mirror of
https://github.com/containers/podman.git
synced 2025-05-22 17:46:52 +08:00
vendor latest c/common
Includes my pasta changes. Signed-off-by: Paul Holzinger <pholzing@redhat.com>
This commit is contained in:
4
go.mod
4
go.mod
@ -13,7 +13,7 @@ require (
|
|||||||
github.com/checkpoint-restore/go-criu/v7 v7.1.1-0.20240728160228-a9064d7e053c
|
github.com/checkpoint-restore/go-criu/v7 v7.1.1-0.20240728160228-a9064d7e053c
|
||||||
github.com/containernetworking/plugins v1.5.1
|
github.com/containernetworking/plugins v1.5.1
|
||||||
github.com/containers/buildah v1.37.0
|
github.com/containers/buildah v1.37.0
|
||||||
github.com/containers/common v0.60.1-0.20240829105055-8483ef6022b4
|
github.com/containers/common v0.60.1-0.20240906123248-5298b838dcbd
|
||||||
github.com/containers/conmon v2.0.20+incompatible
|
github.com/containers/conmon v2.0.20+incompatible
|
||||||
github.com/containers/gvisor-tap-vsock v0.7.5
|
github.com/containers/gvisor-tap-vsock v0.7.5
|
||||||
github.com/containers/image/v5 v5.32.1-0.20240806084436-e3e9287ca8e6
|
github.com/containers/image/v5 v5.32.1-0.20240806084436-e3e9287ca8e6
|
||||||
@ -72,7 +72,7 @@ require (
|
|||||||
go.etcd.io/bbolt v1.3.11
|
go.etcd.io/bbolt v1.3.11
|
||||||
golang.org/x/crypto v0.27.0
|
golang.org/x/crypto v0.27.0
|
||||||
golang.org/x/exp v0.0.0-20240823005443-9b4947da3948
|
golang.org/x/exp v0.0.0-20240823005443-9b4947da3948
|
||||||
golang.org/x/net v0.29.0
|
golang.org/x/net v0.28.0
|
||||||
golang.org/x/sync v0.8.0
|
golang.org/x/sync v0.8.0
|
||||||
golang.org/x/sys v0.25.0
|
golang.org/x/sys v0.25.0
|
||||||
golang.org/x/term v0.24.0
|
golang.org/x/term v0.24.0
|
||||||
|
8
go.sum
8
go.sum
@ -81,8 +81,8 @@ github.com/containernetworking/plugins v1.5.1 h1:T5ji+LPYjjgW0QM+KyrigZbLsZ8jaX+
|
|||||||
github.com/containernetworking/plugins v1.5.1/go.mod h1:MIQfgMayGuHYs0XdNudf31cLLAC+i242hNm6KuDGqCM=
|
github.com/containernetworking/plugins v1.5.1/go.mod h1:MIQfgMayGuHYs0XdNudf31cLLAC+i242hNm6KuDGqCM=
|
||||||
github.com/containers/buildah v1.37.0 h1:jvHwu1vIwIqnHyOSg9eef9Apdpry+5oWLrm43gdf8Rk=
|
github.com/containers/buildah v1.37.0 h1:jvHwu1vIwIqnHyOSg9eef9Apdpry+5oWLrm43gdf8Rk=
|
||||||
github.com/containers/buildah v1.37.0/go.mod h1:MKd79tkluMf6vtH06SedhBQK5OB7E0pFVIuiTTw3dJk=
|
github.com/containers/buildah v1.37.0/go.mod h1:MKd79tkluMf6vtH06SedhBQK5OB7E0pFVIuiTTw3dJk=
|
||||||
github.com/containers/common v0.60.1-0.20240829105055-8483ef6022b4 h1:Ybhbv5Dt0sditi2blwWX0nlmSGCfXejCQ+GvIoU1lCw=
|
github.com/containers/common v0.60.1-0.20240906123248-5298b838dcbd h1:eUzsKokkxMAxqBwCD1agfKf6lIZEQ/ayPru7Tb/oW9Y=
|
||||||
github.com/containers/common v0.60.1-0.20240829105055-8483ef6022b4/go.mod h1:q4SarwqmM2pfrAauTrFQMtDTnGoPsNzcG5p5UxeHQgg=
|
github.com/containers/common v0.60.1-0.20240906123248-5298b838dcbd/go.mod h1:f/n9w0F2lW52S3ppXjQlSVazsyNdilFZ80AyrFl4zn4=
|
||||||
github.com/containers/conmon v2.0.20+incompatible h1:YbCVSFSCqFjjVwHTPINGdMX1F6JXHGTUje2ZYobNrkg=
|
github.com/containers/conmon v2.0.20+incompatible h1:YbCVSFSCqFjjVwHTPINGdMX1F6JXHGTUje2ZYobNrkg=
|
||||||
github.com/containers/conmon v2.0.20+incompatible/go.mod h1:hgwZ2mtuDrppv78a/cOBNiCm6O0UMWGx1mu7P00nu5I=
|
github.com/containers/conmon v2.0.20+incompatible/go.mod h1:hgwZ2mtuDrppv78a/cOBNiCm6O0UMWGx1mu7P00nu5I=
|
||||||
github.com/containers/gvisor-tap-vsock v0.7.5 h1:bTy4u3DOmmUPwurL6me2rsgfypAFDhyeJleUcQmBR/E=
|
github.com/containers/gvisor-tap-vsock v0.7.5 h1:bTy4u3DOmmUPwurL6me2rsgfypAFDhyeJleUcQmBR/E=
|
||||||
@ -605,8 +605,8 @@ golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug
|
|||||||
golang.org/x/net v0.1.0/go.mod h1:Cx3nUiGt4eDBEyega/BKRp+/AlGL8hYe7U9odMt2Cco=
|
golang.org/x/net v0.1.0/go.mod h1:Cx3nUiGt4eDBEyega/BKRp+/AlGL8hYe7U9odMt2Cco=
|
||||||
golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs=
|
golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs=
|
||||||
golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg=
|
golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg=
|
||||||
golang.org/x/net v0.29.0 h1:5ORfpBpCs4HzDYoodCDBbwHzdR5UrLBZ3sOnUJmFoHo=
|
golang.org/x/net v0.28.0 h1:a9JDOJc5GMUJ0+UDqmLT86WiEy7iWyIhz8gz8E4e5hE=
|
||||||
golang.org/x/net v0.29.0/go.mod h1:gLkgy8jTGERgjzMic6DS9+SP0ajcu6Xu3Orq/SpETg0=
|
golang.org/x/net v0.28.0/go.mod h1:yqtgsTWOOnlGLG9GFRrK3++bGOUEkNBoHZc8MEDWPNg=
|
||||||
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
|
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
|
||||||
golang.org/x/oauth2 v0.22.0 h1:BzDx2FehcG7jJwgWLELCdmLuxk2i+x9UDpSiss2u0ZA=
|
golang.org/x/oauth2 v0.22.0 h1:BzDx2FehcG7jJwgWLELCdmLuxk2i+x9UDpSiss2u0ZA=
|
||||||
golang.org/x/oauth2 v0.22.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI=
|
golang.org/x/oauth2 v0.22.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI=
|
||||||
|
2
vendor/github.com/containers/common/libimage/filters.go
generated
vendored
2
vendor/github.com/containers/common/libimage/filters.go
generated
vendored
@ -34,7 +34,7 @@ func (i *Image) applyFilters(ctx context.Context, filters compiledFilters, tree
|
|||||||
// meantime, so do an extra check and make the
|
// meantime, so do an extra check and make the
|
||||||
// error non-fatal (see containers/podman/issues/12582).
|
// error non-fatal (see containers/podman/issues/12582).
|
||||||
if errCorrupted := i.isCorrupted(ctx, ""); errCorrupted != nil {
|
if errCorrupted := i.isCorrupted(ctx, ""); errCorrupted != nil {
|
||||||
logrus.Errorf(errCorrupted.Error())
|
logrus.Error(errCorrupted.Error())
|
||||||
return false, nil
|
return false, nil
|
||||||
}
|
}
|
||||||
return false, err
|
return false, err
|
||||||
|
4
vendor/github.com/containers/common/libimage/search.go
generated
vendored
4
vendor/github.com/containers/common/libimage/search.go
generated
vendored
@ -215,7 +215,7 @@ func (r *Runtime) searchImageInRegistry(ctx context.Context, term, registry stri
|
|||||||
}
|
}
|
||||||
|
|
||||||
paramsArr := []SearchResult{}
|
paramsArr := []SearchResult{}
|
||||||
for i := 0; i < limit; i++ {
|
for i := range limit {
|
||||||
// Check whether query matches filters
|
// Check whether query matches filters
|
||||||
if !(filterMatchesAutomatedFilter(&options.Filter, results[i]) && filterMatchesOfficialFilter(&options.Filter, results[i]) && filterMatchesStarFilter(&options.Filter, results[i])) {
|
if !(filterMatchesAutomatedFilter(&options.Filter, results[i]) && filterMatchesOfficialFilter(&options.Filter, results[i]) && filterMatchesStarFilter(&options.Filter, results[i])) {
|
||||||
continue
|
continue
|
||||||
@ -275,7 +275,7 @@ func searchRepositoryTags(ctx context.Context, sys *types.SystemContext, registr
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
paramsArr := []SearchResult{}
|
paramsArr := []SearchResult{}
|
||||||
for i := 0; i < limit; i++ {
|
for i := range limit {
|
||||||
params := SearchResult{
|
params := SearchResult{
|
||||||
Name: imageRef.DockerReference().Name(),
|
Name: imageRef.DockerReference().Name(),
|
||||||
Tag: tags[i],
|
Tag: tags[i],
|
||||||
|
2
vendor/github.com/containers/common/libnetwork/cni/run.go
generated
vendored
2
vendor/github.com/containers/common/libnetwork/cni/run.go
generated
vendored
@ -62,7 +62,6 @@ func (n *cniNetwork) Setup(namespacePath string, options types.SetupOptions) (ma
|
|||||||
}
|
}
|
||||||
|
|
||||||
for name, netOpts := range options.Networks {
|
for name, netOpts := range options.Networks {
|
||||||
netOpts := netOpts
|
|
||||||
network := n.networks[name]
|
network := n.networks[name]
|
||||||
rt := getRuntimeConfig(namespacePath, options.ContainerName, options.ContainerID, name, ports, &netOpts)
|
rt := getRuntimeConfig(namespacePath, options.ContainerName, options.ContainerID, name, ports, &netOpts)
|
||||||
|
|
||||||
@ -237,7 +236,6 @@ func (n *cniNetwork) teardown(namespacePath string, options types.TeardownOption
|
|||||||
var multiErr *multierror.Error
|
var multiErr *multierror.Error
|
||||||
teardown := func() error {
|
teardown := func() error {
|
||||||
for name, netOpts := range options.Networks {
|
for name, netOpts := range options.Networks {
|
||||||
netOpts := netOpts
|
|
||||||
rt := getRuntimeConfig(namespacePath, options.ContainerName, options.ContainerID, name, ports, &netOpts)
|
rt := getRuntimeConfig(namespacePath, options.ContainerName, options.ContainerID, name, ports, &netOpts)
|
||||||
|
|
||||||
cniConfList, newRt, err := getCachedNetworkConfig(n.cniConf, name, rt)
|
cniConfList, newRt, err := getCachedNetworkConfig(n.cniConf, name, rt)
|
||||||
|
10
vendor/github.com/containers/common/libnetwork/etchosts/hosts.go
generated
vendored
10
vendor/github.com/containers/common/libnetwork/etchosts/hosts.go
generated
vendored
@ -229,9 +229,10 @@ func checkIfEntryExists(current HostEntry, entries HostEntries) bool {
|
|||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
// parseExtraHosts converts a slice of "name:ip" string to entries.
|
// parseExtraHosts converts a slice of "name1;name2;name3:ip" string to entries.
|
||||||
// Because podman and buildah both store the extra hosts in this format
|
// Each entry can contain one or more hostnames separated by semicolons and an IP address separated by a colon.
|
||||||
// we convert it here instead of having to this on the caller side.
|
// Because podman and buildah both store the extra hosts in this format,
|
||||||
|
// we convert it here instead of having to do this on the caller side.
|
||||||
func parseExtraHosts(extraHosts []string, hostContainersInternalIP string) (HostEntries, error) {
|
func parseExtraHosts(extraHosts []string, hostContainersInternalIP string) (HostEntries, error) {
|
||||||
entries := make(HostEntries, 0, len(extraHosts))
|
entries := make(HostEntries, 0, len(extraHosts))
|
||||||
for _, entry := range extraHosts {
|
for _, entry := range extraHosts {
|
||||||
@ -252,7 +253,8 @@ func parseExtraHosts(extraHosts []string, hostContainersInternalIP string) (Host
|
|||||||
}
|
}
|
||||||
ip = hostContainersInternalIP
|
ip = hostContainersInternalIP
|
||||||
}
|
}
|
||||||
e := HostEntry{IP: ip, Names: []string{values[0]}}
|
names := strings.Split(values[0], ";")
|
||||||
|
e := HostEntry{IP: ip, Names: names}
|
||||||
entries = append(entries, e)
|
entries = append(entries, e)
|
||||||
}
|
}
|
||||||
return entries, nil
|
return entries, nil
|
||||||
|
56
vendor/github.com/containers/common/libnetwork/etchosts/ip.go
generated
vendored
56
vendor/github.com/containers/common/libnetwork/etchosts/ip.go
generated
vendored
@ -10,17 +10,27 @@ import (
|
|||||||
"github.com/containers/storage/pkg/unshare"
|
"github.com/containers/storage/pkg/unshare"
|
||||||
)
|
)
|
||||||
|
|
||||||
// GetHostContainersInternalIP returns the host.containers.internal ip
|
// HostContainersInternalOptions contains the options for GetHostContainersInternalIP()
|
||||||
// if netStatus is not nil then networkInterface also must be non nil otherwise this function panics
|
type HostContainersInternalOptions struct {
|
||||||
func GetHostContainersInternalIP(conf *config.Config, netStatus map[string]types.StatusBlock, networkInterface types.ContainerNetwork) string {
|
// Conf is the containers.Conf, must not be nil
|
||||||
return GetHostContainersInternalIPExcluding(conf, netStatus, networkInterface, nil)
|
Conf *config.Config
|
||||||
|
// NetStatus is the network status for the container,
|
||||||
|
// if this is set networkInterface must not be nil
|
||||||
|
NetStatus map[string]types.StatusBlock
|
||||||
|
// NetworkInterface of the current runtime
|
||||||
|
NetworkInterface types.ContainerNetwork
|
||||||
|
// Exclude are then ips that should not be returned, this is
|
||||||
|
// useful to prevent returning the same ip as in the container.
|
||||||
|
Exclude []net.IP
|
||||||
|
// PreferIP is a ip that should be used if set but it has a
|
||||||
|
// lower priority than the containers.conf config option.
|
||||||
|
// This is used for the pasta --map-guest-addr ip.
|
||||||
|
PreferIP string
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetHostContainersInternalIPExcluding returns the host.containers.internal ip
|
// GetHostContainersInternalIP returns the host.containers.internal ip
|
||||||
// Exclude are ips that should not be returned, this is useful to prevent returning the same ip as in the container.
|
func GetHostContainersInternalIP(opts HostContainersInternalOptions) string {
|
||||||
// if netStatus is not nil then networkInterface also must be non nil otherwise this function panics
|
switch opts.Conf.Containers.HostContainersInternalIP {
|
||||||
func GetHostContainersInternalIPExcluding(conf *config.Config, netStatus map[string]types.StatusBlock, networkInterface types.ContainerNetwork, exclude []net.IP) string {
|
|
||||||
switch conf.Containers.HostContainersInternalIP {
|
|
||||||
case "":
|
case "":
|
||||||
// if empty (default) we will automatically choose one below
|
// if empty (default) we will automatically choose one below
|
||||||
// if machine using gvproxy we let the gvproxy dns server handle the dns name so do not add it
|
// if machine using gvproxy we let the gvproxy dns server handle the dns name so do not add it
|
||||||
@ -30,16 +40,22 @@ func GetHostContainersInternalIPExcluding(conf *config.Config, netStatus map[str
|
|||||||
case "none":
|
case "none":
|
||||||
return ""
|
return ""
|
||||||
default:
|
default:
|
||||||
return conf.Containers.HostContainersInternalIP
|
return opts.Conf.Containers.HostContainersInternalIP
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// caller has a specific ip it prefers
|
||||||
|
if opts.PreferIP != "" {
|
||||||
|
return opts.PreferIP
|
||||||
|
}
|
||||||
|
|
||||||
ip := ""
|
ip := ""
|
||||||
// Only use the bridge ip when root, as rootless the interfaces are created
|
// Only use the bridge ip when root, as rootless the interfaces are created
|
||||||
// inside the special netns and not the host so we cannot use them.
|
// inside the special netns and not the host so we cannot use them.
|
||||||
if unshare.IsRootless() {
|
if unshare.IsRootless() {
|
||||||
return util.GetLocalIPExcluding(exclude)
|
return util.GetLocalIPExcluding(opts.Exclude)
|
||||||
}
|
}
|
||||||
for net, status := range netStatus {
|
for net, status := range opts.NetStatus {
|
||||||
network, err := networkInterface.NetworkInspect(net)
|
network, err := opts.NetworkInterface.NetworkInspect(net)
|
||||||
// only add the host entry for bridge networks
|
// only add the host entry for bridge networks
|
||||||
// ip/macvlan gateway is normally not on the host
|
// ip/macvlan gateway is normally not on the host
|
||||||
if err != nil || network.Driver != types.BridgeNetworkDriver {
|
if err != nil || network.Driver != types.BridgeNetworkDriver {
|
||||||
@ -60,7 +76,19 @@ func GetHostContainersInternalIPExcluding(conf *config.Config, netStatus map[str
|
|||||||
if ip != "" {
|
if ip != "" {
|
||||||
return ip
|
return ip
|
||||||
}
|
}
|
||||||
return util.GetLocalIPExcluding(exclude)
|
return util.GetLocalIPExcluding(opts.Exclude)
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetHostContainersInternalIPExcluding returns the host.containers.internal ip
|
||||||
|
// Exclude are ips that should not be returned, this is useful to prevent returning the same ip as in the container.
|
||||||
|
// if netStatus is not nil then networkInterface also must be non nil otherwise this function panics
|
||||||
|
func GetHostContainersInternalIPExcluding(conf *config.Config, netStatus map[string]types.StatusBlock, networkInterface types.ContainerNetwork, exclude []net.IP) string {
|
||||||
|
return GetHostContainersInternalIP(HostContainersInternalOptions{
|
||||||
|
Conf: conf,
|
||||||
|
NetStatus: netStatus,
|
||||||
|
NetworkInterface: networkInterface,
|
||||||
|
Exclude: exclude,
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetNetworkHostEntries returns HostEntries for all ips in the network status
|
// GetNetworkHostEntries returns HostEntries for all ips in the network status
|
||||||
|
82
vendor/github.com/containers/common/libnetwork/internal/rootlessnetns/netns_linux.go
generated
vendored
82
vendor/github.com/containers/common/libnetwork/internal/rootlessnetns/netns_linux.go
generated
vendored
@ -1,6 +1,7 @@
|
|||||||
package rootlessnetns
|
package rootlessnetns
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"encoding/json"
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
"io/fs"
|
"io/fs"
|
||||||
@ -34,6 +35,9 @@ const (
|
|||||||
// refCountFile file name for the ref count file
|
// refCountFile file name for the ref count file
|
||||||
refCountFile = "ref-count"
|
refCountFile = "ref-count"
|
||||||
|
|
||||||
|
// infoCacheFile file name for the cache file used to store the rootless netns info
|
||||||
|
infoCacheFile = "info.json"
|
||||||
|
|
||||||
// rootlessNetNsConnPidFile is the name of the rootless netns slirp4netns/pasta pid file
|
// rootlessNetNsConnPidFile is the name of the rootless netns slirp4netns/pasta pid file
|
||||||
rootlessNetNsConnPidFile = "rootless-netns-conn.pid"
|
rootlessNetNsConnPidFile = "rootless-netns-conn.pid"
|
||||||
|
|
||||||
@ -54,11 +58,9 @@ type Netns struct {
|
|||||||
// config contains containers.conf options.
|
// config contains containers.conf options.
|
||||||
config *config.Config
|
config *config.Config
|
||||||
|
|
||||||
// ipAddresses used in the netns, this is needed to store
|
// info contain information about ip addresses used in the netns.
|
||||||
// the netns ips that are used by pasta. This is then handed
|
// A caller can get this info via Info().
|
||||||
// back to the caller via IPAddresses() which then can make
|
info *types.RootlessNetnsInfo
|
||||||
// sure to not use them for host.containers.internal.
|
|
||||||
ipAddresses []net.IP
|
|
||||||
}
|
}
|
||||||
|
|
||||||
type rootlessNetnsError struct {
|
type rootlessNetnsError struct {
|
||||||
@ -115,6 +117,9 @@ func (n *Netns) getOrCreateNetns() (ns.NetNS, bool, error) {
|
|||||||
// quick check if pasta/slirp4netns are still running
|
// quick check if pasta/slirp4netns are still running
|
||||||
err := unix.Kill(pid, 0)
|
err := unix.Kill(pid, 0)
|
||||||
if err == nil {
|
if err == nil {
|
||||||
|
if err := n.deserializeInfo(); err != nil {
|
||||||
|
return nil, false, wrapError("deserialize info", err)
|
||||||
|
}
|
||||||
// All good, return the netns.
|
// All good, return the netns.
|
||||||
return nsRef, false, nil
|
return nsRef, false, nil
|
||||||
}
|
}
|
||||||
@ -227,6 +232,15 @@ func (n *Netns) setupPasta(nsPath string) error {
|
|||||||
return wrapError("create resolv.conf", err)
|
return wrapError("create resolv.conf", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
n.info = &types.RootlessNetnsInfo{
|
||||||
|
IPAddresses: res.IPAddresses,
|
||||||
|
DnsForwardIps: res.DNSForwardIPs,
|
||||||
|
MapGuestIps: res.MapGuestAddrIPs,
|
||||||
|
}
|
||||||
|
if err := n.serializeInfo(); err != nil {
|
||||||
|
return wrapError("serialize info", err)
|
||||||
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -261,6 +275,12 @@ func (n *Netns) setupSlirp4netns(nsPath string) error {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return wrapError("determine default slirp4netns DNS address", err)
|
return wrapError("determine default slirp4netns DNS address", err)
|
||||||
}
|
}
|
||||||
|
nameservers := []string{resolveIP.String()}
|
||||||
|
|
||||||
|
netnsIP, err := slirp4netns.GetIP(res.Subnet)
|
||||||
|
if err != nil {
|
||||||
|
return wrapError("determine default slirp4netns ip address", err)
|
||||||
|
}
|
||||||
|
|
||||||
if err := resolvconf.New(&resolvconf.Params{
|
if err := resolvconf.New(&resolvconf.Params{
|
||||||
Path: n.getPath(resolvConfName),
|
Path: n.getPath(resolvConfName),
|
||||||
@ -270,10 +290,19 @@ func (n *Netns) setupSlirp4netns(nsPath string) error {
|
|||||||
},
|
},
|
||||||
IPv6Enabled: res.IPv6,
|
IPv6Enabled: res.IPv6,
|
||||||
KeepHostServers: true,
|
KeepHostServers: true,
|
||||||
Nameservers: []string{resolveIP.String()},
|
Nameservers: nameservers,
|
||||||
}); err != nil {
|
}); err != nil {
|
||||||
return wrapError("create resolv.conf", err)
|
return wrapError("create resolv.conf", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
n.info = &types.RootlessNetnsInfo{
|
||||||
|
IPAddresses: []net.IP{*netnsIP},
|
||||||
|
DnsForwardIps: nameservers,
|
||||||
|
}
|
||||||
|
if err := n.serializeInfo(); err != nil {
|
||||||
|
return wrapError("serialize info", err)
|
||||||
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -541,20 +570,6 @@ func (n *Netns) runInner(toRun func() error, cleanup bool) (err error) {
|
|||||||
if err := toRun(); err != nil {
|
if err := toRun(); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
// get the current active addresses in the netns, and store them
|
|
||||||
addrs, err := net.InterfaceAddrs()
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
ips := make([]net.IP, 0, len(addrs))
|
|
||||||
for _, addr := range addrs {
|
|
||||||
// make sure to skip localhost and other special addresses
|
|
||||||
if ipnet, ok := addr.(*net.IPNet); ok && ipnet.IP.IsGlobalUnicast() {
|
|
||||||
ips = append(ips, ipnet.IP)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
n.ipAddresses = ips
|
|
||||||
return nil
|
return nil
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
@ -630,9 +645,7 @@ func (n *Netns) Run(lock *lockfile.LockFile, toRun func() error) error {
|
|||||||
// IPAddresses returns the currently used ip addresses in the netns
|
// IPAddresses returns the currently used ip addresses in the netns
|
||||||
// These should then not be assigned for the host.containers.internal entry.
|
// These should then not be assigned for the host.containers.internal entry.
|
||||||
func (n *Netns) Info() *types.RootlessNetnsInfo {
|
func (n *Netns) Info() *types.RootlessNetnsInfo {
|
||||||
return &types.RootlessNetnsInfo{
|
return n.info
|
||||||
IPAddresses: n.ipAddresses,
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func refCount(dir string, inc int) (int, error) {
|
func refCount(dir string, inc int) (int, error) {
|
||||||
@ -671,3 +684,26 @@ func readPidFile(path string) (int, error) {
|
|||||||
}
|
}
|
||||||
return strconv.Atoi(strings.TrimSpace(string(b)))
|
return strconv.Atoi(strings.TrimSpace(string(b)))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (n *Netns) serializeInfo() error {
|
||||||
|
f, err := os.Create(filepath.Join(n.dir, infoCacheFile))
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
return json.NewEncoder(f).Encode(n.info)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (n *Netns) deserializeInfo() error {
|
||||||
|
f, err := os.Open(filepath.Join(n.dir, infoCacheFile))
|
||||||
|
if err != nil {
|
||||||
|
if errors.Is(err, fs.ErrNotExist) {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
defer f.Close()
|
||||||
|
if n.info == nil {
|
||||||
|
n.info = new(types.RootlessNetnsInfo)
|
||||||
|
}
|
||||||
|
return json.NewDecoder(f).Decode(n.info)
|
||||||
|
}
|
||||||
|
2
vendor/github.com/containers/common/libnetwork/internal/util/util.go
generated
vendored
2
vendor/github.com/containers/common/libnetwork/internal/util/util.go
generated
vendored
@ -112,7 +112,7 @@ func GetFreeIPv4NetworkSubnet(usedNetworks []*net.IPNet, subnetPools []config.Su
|
|||||||
// GetFreeIPv6NetworkSubnet returns a unused ipv6 subnet
|
// GetFreeIPv6NetworkSubnet returns a unused ipv6 subnet
|
||||||
func GetFreeIPv6NetworkSubnet(usedNetworks []*net.IPNet) (*types.Subnet, error) {
|
func GetFreeIPv6NetworkSubnet(usedNetworks []*net.IPNet) (*types.Subnet, error) {
|
||||||
// FIXME: Is 10000 fine as limit? We should prevent an endless loop.
|
// FIXME: Is 10000 fine as limit? We should prevent an endless loop.
|
||||||
for i := 0; i < 10000; i++ {
|
for range 10000 {
|
||||||
// RFC4193: Choose the ipv6 subnet random and NOT sequentially.
|
// RFC4193: Choose the ipv6 subnet random and NOT sequentially.
|
||||||
network, err := getRandomIPv6Subnet()
|
network, err := getRandomIPv6Subnet()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
1
vendor/github.com/containers/common/libnetwork/internal/util/validate.go
generated
vendored
1
vendor/github.com/containers/common/libnetwork/internal/util/validate.go
generated
vendored
@ -129,7 +129,6 @@ func ValidateSetupOptions(n NetUtil, namespacePath string, options types.SetupOp
|
|||||||
return errors.New("must specify at least one network")
|
return errors.New("must specify at least one network")
|
||||||
}
|
}
|
||||||
for name, netOpts := range options.Networks {
|
for name, netOpts := range options.Networks {
|
||||||
netOpts := netOpts
|
|
||||||
network, err := n.Network(name)
|
network, err := n.Network(name)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
|
2
vendor/github.com/containers/common/libnetwork/netavark/config.go
generated
vendored
2
vendor/github.com/containers/common/libnetwork/netavark/config.go
generated
vendored
@ -126,7 +126,7 @@ func (n *netavarkNetwork) networkCreate(newNetwork *types.Network, defaultNet bo
|
|||||||
|
|
||||||
// generate random network ID
|
// generate random network ID
|
||||||
var i int
|
var i int
|
||||||
for i = 0; i < 1000; i++ {
|
for i = range 1000 {
|
||||||
id := stringid.GenerateNonCryptoID()
|
id := stringid.GenerateNonCryptoID()
|
||||||
if _, err := n.getNetwork(id); err != nil {
|
if _, err := n.getNetwork(id); err != nil {
|
||||||
newNetwork.ID = id
|
newNetwork.ID = id
|
||||||
|
86
vendor/github.com/containers/common/libnetwork/pasta/pasta_linux.go
generated
vendored
86
vendor/github.com/containers/common/libnetwork/pasta/pasta_linux.go
generated
vendored
@ -27,10 +27,15 @@ import (
|
|||||||
|
|
||||||
const (
|
const (
|
||||||
dnsForwardOpt = "--dns-forward"
|
dnsForwardOpt = "--dns-forward"
|
||||||
|
mapGuestAddrOpt = "--map-guest-addr"
|
||||||
|
|
||||||
// dnsForwardIpv4 static ip used as nameserver address inside the netns,
|
// dnsForwardIpv4 static ip used as nameserver address inside the netns,
|
||||||
// given this is a "link local" ip it should be very unlikely that it causes conflicts
|
// given this is a "link local" ip it should be very unlikely that it causes conflicts
|
||||||
dnsForwardIpv4 = "169.254.0.1"
|
dnsForwardIpv4 = "169.254.1.1"
|
||||||
|
|
||||||
|
// mapGuestAddrIpv4 static ip used as forwarder address inside the netns to reach the host,
|
||||||
|
// given this is a "link local" ip it should be very unlikely that it causes conflicts
|
||||||
|
mapGuestAddrIpv4 = "169.254.1.2"
|
||||||
)
|
)
|
||||||
|
|
||||||
type SetupOptions struct {
|
type SetupOptions struct {
|
||||||
@ -45,33 +50,46 @@ type SetupOptions struct {
|
|||||||
ExtraOptions []string
|
ExtraOptions []string
|
||||||
}
|
}
|
||||||
|
|
||||||
func Setup(opts *SetupOptions) error {
|
// Setup2 alias for Setup()
|
||||||
_, err := Setup2(opts)
|
func Setup2(opts *SetupOptions) (*SetupResult, error) {
|
||||||
return err
|
return Setup(opts)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Setup2 start the pasta process for the given netns.
|
// Setup start the pasta process for the given netns.
|
||||||
// The pasta binary is looked up in the HelperBinariesDir and $PATH.
|
// The pasta binary is looked up in the HelperBinariesDir and $PATH.
|
||||||
// Note that there is no need for any special cleanup logic, the pasta
|
// Note that there is no need for any special cleanup logic, the pasta
|
||||||
// process will automatically exit when the netns path is deleted.
|
// process will automatically exit when the netns path is deleted.
|
||||||
func Setup2(opts *SetupOptions) (*SetupResult, error) {
|
func Setup(opts *SetupOptions) (*SetupResult, error) {
|
||||||
path, err := opts.Config.FindHelperBinary(BinaryName, true)
|
path, err := opts.Config.FindHelperBinary(BinaryName, true)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("could not find pasta, the network namespace can't be configured: %w", err)
|
return nil, fmt.Errorf("could not find pasta, the network namespace can't be configured: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
cmdArgs, dnsForwardIPs, err := createPastaArgs(opts)
|
cmdArgs, dnsForwardIPs, mapGuestAddrIPs, err := createPastaArgs(opts)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
logrus.Debugf("pasta arguments: %s", strings.Join(cmdArgs, " "))
|
logrus.Debugf("pasta arguments: %s", strings.Join(cmdArgs, " "))
|
||||||
|
|
||||||
|
for {
|
||||||
// pasta forks once ready, and quits once we delete the target namespace
|
// pasta forks once ready, and quits once we delete the target namespace
|
||||||
out, err := exec.Command(path, cmdArgs...).CombinedOutput()
|
out, err := exec.Command(path, cmdArgs...).CombinedOutput()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
exitErr := &exec.ExitError{}
|
exitErr := &exec.ExitError{}
|
||||||
if errors.As(err, &exitErr) {
|
if errors.As(err, &exitErr) {
|
||||||
|
// special backwards compat check, --map-guest-addr was added in pasta version 20240814 so we
|
||||||
|
// cannot hard require it yet. Once we are confident that the update is most distros we can remove it.
|
||||||
|
if exitErr.ExitCode() == 1 &&
|
||||||
|
strings.Contains(string(out), "unrecognized option '"+mapGuestAddrOpt) &&
|
||||||
|
len(mapGuestAddrIPs) == 1 && mapGuestAddrIPs[0] == mapGuestAddrIpv4 {
|
||||||
|
// we did add the default --map-guest-addr option, if users set something different we want
|
||||||
|
// to get to the error below. We have to unset mapGuestAddrIPs here to avoid a infinite loop.
|
||||||
|
mapGuestAddrIPs = nil
|
||||||
|
// Trim off last two args which are --map-guest-addr 169.254.1.2.
|
||||||
|
cmdArgs = cmdArgs[:len(cmdArgs)-2]
|
||||||
|
continue
|
||||||
|
}
|
||||||
return nil, fmt.Errorf("pasta failed with exit code %d:\n%s",
|
return nil, fmt.Errorf("pasta failed with exit code %d:\n%s",
|
||||||
exitErr.ExitCode(), string(out))
|
exitErr.ExitCode(), string(out))
|
||||||
}
|
}
|
||||||
@ -79,11 +97,14 @@ func Setup2(opts *SetupOptions) (*SetupResult, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if len(out) > 0 {
|
if len(out) > 0 {
|
||||||
// TODO: This should be warning but right now pasta still prints
|
// TODO: This should be warning but as of August 2024 pasta still prints
|
||||||
// things with --quiet that we do not care about.
|
// things with --quiet that we do not care about. In podman CI I still see
|
||||||
// For now info is fine and we can bump it up later, it is only a
|
// "Couldn't get any nameserver address" so until this is fixed we cannot
|
||||||
|
// enable it. For now info is fine and we can bump it up later, it is only a
|
||||||
// nice to have.
|
// nice to have.
|
||||||
logrus.Infof("pasta logged warnings: %q", string(out))
|
logrus.Infof("pasta logged warnings: %q", strings.TrimSpace(string(out)))
|
||||||
|
}
|
||||||
|
break
|
||||||
}
|
}
|
||||||
|
|
||||||
var ipv4, ipv6 bool
|
var ipv4, ipv6 bool
|
||||||
@ -112,19 +133,27 @@ func Setup2(opts *SetupOptions) (*SetupResult, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
result.IPv6 = ipv6
|
result.IPv6 = ipv6
|
||||||
for _, ip := range dnsForwardIPs {
|
result.DNSForwardIPs = filterIpFamily(dnsForwardIPs, ipv4, ipv6)
|
||||||
ipp := net.ParseIP(ip)
|
result.MapGuestAddrIPs = filterIpFamily(mapGuestAddrIPs, ipv4, ipv6)
|
||||||
// add the namesever ip only if the address family matches
|
|
||||||
if ipv4 && util.IsIPv4(ipp) || ipv6 && util.IsIPv6(ipp) {
|
|
||||||
result.DNSForwardIPs = append(result.DNSForwardIPs, ip)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return result, nil
|
return result, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// createPastaArgs creates the pasta arguments, it returns the args to be passed to pasta(1) and as second arg the dns forward ips used.
|
func filterIpFamily(ips []string, ipv4, ipv6 bool) []string {
|
||||||
func createPastaArgs(opts *SetupOptions) ([]string, []string, error) {
|
var result []string
|
||||||
|
for _, ip := range ips {
|
||||||
|
ipp := net.ParseIP(ip)
|
||||||
|
// add the ip only if the address family matches
|
||||||
|
if ipv4 && util.IsIPv4(ipp) || ipv6 && util.IsIPv6(ipp) {
|
||||||
|
result = append(result, ip)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return result
|
||||||
|
}
|
||||||
|
|
||||||
|
// createPastaArgs creates the pasta arguments, it returns the args to be passed to pasta(1)
|
||||||
|
// and as second arg the dns forward ips used. As third arg the map guest addr ips used.
|
||||||
|
func createPastaArgs(opts *SetupOptions) ([]string, []string, []string, error) {
|
||||||
noTCPInitPorts := true
|
noTCPInitPorts := true
|
||||||
noUDPInitPorts := true
|
noUDPInitPorts := true
|
||||||
noTCPNamespacePorts := true
|
noTCPNamespacePorts := true
|
||||||
@ -149,6 +178,7 @@ func createPastaArgs(opts *SetupOptions) ([]string, []string, error) {
|
|||||||
})
|
})
|
||||||
|
|
||||||
var dnsForwardIPs []string
|
var dnsForwardIPs []string
|
||||||
|
var mapGuestAddrIPs []string
|
||||||
for i, opt := range cmdArgs {
|
for i, opt := range cmdArgs {
|
||||||
switch opt {
|
switch opt {
|
||||||
case "-t", "--tcp-ports":
|
case "-t", "--tcp-ports":
|
||||||
@ -166,6 +196,10 @@ func createPastaArgs(opts *SetupOptions) ([]string, []string, error) {
|
|||||||
if len(cmdArgs) > i+1 {
|
if len(cmdArgs) > i+1 {
|
||||||
dnsForwardIPs = append(dnsForwardIPs, cmdArgs[i+1])
|
dnsForwardIPs = append(dnsForwardIPs, cmdArgs[i+1])
|
||||||
}
|
}
|
||||||
|
case mapGuestAddrOpt:
|
||||||
|
if len(cmdArgs) > i+1 {
|
||||||
|
mapGuestAddrIPs = append(mapGuestAddrIPs, cmdArgs[i+1])
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -186,7 +220,7 @@ func createPastaArgs(opts *SetupOptions) ([]string, []string, error) {
|
|||||||
noUDPInitPorts = false
|
noUDPInitPorts = false
|
||||||
cmdArgs = append(cmdArgs, "-u")
|
cmdArgs = append(cmdArgs, "-u")
|
||||||
default:
|
default:
|
||||||
return nil, nil, fmt.Errorf("can't forward protocol: %s", protocol)
|
return nil, nil, nil, fmt.Errorf("can't forward protocol: %s", protocol)
|
||||||
}
|
}
|
||||||
|
|
||||||
arg := fmt.Sprintf("%s%d-%d:%d-%d", addr,
|
arg := fmt.Sprintf("%s%d-%d:%d-%d", addr,
|
||||||
@ -226,5 +260,13 @@ func createPastaArgs(opts *SetupOptions) ([]string, []string, error) {
|
|||||||
|
|
||||||
cmdArgs = append(cmdArgs, "--netns", opts.Netns)
|
cmdArgs = append(cmdArgs, "--netns", opts.Netns)
|
||||||
|
|
||||||
return cmdArgs, dnsForwardIPs, nil
|
// do this as last arg so we can easily trim them off in the error case when we have an older version
|
||||||
|
if len(mapGuestAddrIPs) == 0 {
|
||||||
|
// the user did not request custom --map-guest-addr so add our own so that we can use this
|
||||||
|
// for our own host.containers.internal host entry.
|
||||||
|
cmdArgs = append(cmdArgs, mapGuestAddrOpt, mapGuestAddrIpv4)
|
||||||
|
mapGuestAddrIPs = append(mapGuestAddrIPs, mapGuestAddrIpv4)
|
||||||
|
}
|
||||||
|
|
||||||
|
return cmdArgs, dnsForwardIPs, mapGuestAddrIPs, nil
|
||||||
}
|
}
|
||||||
|
3
vendor/github.com/containers/common/libnetwork/pasta/types.go
generated
vendored
3
vendor/github.com/containers/common/libnetwork/pasta/types.go
generated
vendored
@ -10,6 +10,9 @@ type SetupResult struct {
|
|||||||
// DNSForwardIP is the ip used in --dns-forward, it should be added as first
|
// DNSForwardIP is the ip used in --dns-forward, it should be added as first
|
||||||
// entry to resolv.conf in the container.
|
// entry to resolv.conf in the container.
|
||||||
DNSForwardIPs []string
|
DNSForwardIPs []string
|
||||||
|
// MapGuestIps are the ips used for the --map-guest-addr option which
|
||||||
|
// we can use for the host.containers.internal entry.
|
||||||
|
MapGuestAddrIPs []string
|
||||||
// IPv6 says whenever pasta run with ipv6 support
|
// IPv6 says whenever pasta run with ipv6 support
|
||||||
IPv6 bool
|
IPv6 bool
|
||||||
}
|
}
|
||||||
|
2
vendor/github.com/containers/common/libnetwork/slirp4netns/slirp4netns.go
generated
vendored
2
vendor/github.com/containers/common/libnetwork/slirp4netns/slirp4netns.go
generated
vendored
@ -645,7 +645,7 @@ func setupRootlessPortMappingViaSlirp(ports []types.PortMapping, cmd *exec.Cmd,
|
|||||||
if hostIP == "" {
|
if hostIP == "" {
|
||||||
hostIP = "0.0.0.0"
|
hostIP = "0.0.0.0"
|
||||||
}
|
}
|
||||||
for i := uint16(0); i < port.Range; i++ {
|
for i := range port.Range {
|
||||||
if err := openSlirp4netnsPort(apiSocket, protocol, hostIP, port.HostPort+i, port.ContainerPort+i); err != nil {
|
if err := openSlirp4netnsPort(apiSocket, protocol, hostIP, port.HostPort+i, port.ContainerPort+i); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
4
vendor/github.com/containers/common/libnetwork/types/network.go
generated
vendored
4
vendor/github.com/containers/common/libnetwork/types/network.go
generated
vendored
@ -342,6 +342,10 @@ type TeardownOptions struct {
|
|||||||
type RootlessNetnsInfo struct {
|
type RootlessNetnsInfo struct {
|
||||||
// IPAddresses used in the netns, must not be used for host.containers.internal
|
// IPAddresses used in the netns, must not be used for host.containers.internal
|
||||||
IPAddresses []net.IP
|
IPAddresses []net.IP
|
||||||
|
// DnsForwardIps ips used in resolv.conf
|
||||||
|
DnsForwardIps []string
|
||||||
|
// MapGuestIps should be used for the host.containers.internal entry when set
|
||||||
|
MapGuestIps []string
|
||||||
}
|
}
|
||||||
|
|
||||||
// FilterFunc can be passed to NetworkList to filter the networks.
|
// FilterFunc can be passed to NetworkList to filter the networks.
|
||||||
|
2
vendor/github.com/containers/common/pkg/cgroups/systemd_linux.go
generated
vendored
2
vendor/github.com/containers/common/pkg/cgroups/systemd_linux.go
generated
vendored
@ -23,7 +23,7 @@ func systemdCreate(resources *configs.Resources, path string, c *systemdDbus.Con
|
|||||||
slice = strings.TrimSuffix(slice, "/")
|
slice = strings.TrimSuffix(slice, "/")
|
||||||
|
|
||||||
var lastError error
|
var lastError error
|
||||||
for i := 0; i < 2; i++ {
|
for i := range 2 {
|
||||||
properties := []systemdDbus.Property{
|
properties := []systemdDbus.Property{
|
||||||
systemdDbus.PropDescription("cgroup " + name),
|
systemdDbus.PropDescription("cgroup " + name),
|
||||||
systemdDbus.PropWants(slice),
|
systemdDbus.PropWants(slice),
|
||||||
|
4
vendor/github.com/containers/common/pkg/config/default_linux.go
generated
vendored
4
vendor/github.com/containers/common/pkg/config/default_linux.go
generated
vendored
@ -28,9 +28,9 @@ func getDefaultProcessLimits() []string {
|
|||||||
dat, err := os.ReadFile("/proc/sys/kernel/pid_max")
|
dat, err := os.ReadFile("/proc/sys/kernel/pid_max")
|
||||||
if err == nil {
|
if err == nil {
|
||||||
val := strings.TrimSuffix(string(dat), "\n")
|
val := strings.TrimSuffix(string(dat), "\n")
|
||||||
max, err := strconv.ParseUint(val, 10, 64)
|
maxLimit, err := strconv.ParseUint(val, 10, 64)
|
||||||
if err == nil {
|
if err == nil {
|
||||||
rlim = unix.Rlimit{Cur: max, Max: max}
|
rlim = unix.Rlimit{Cur: maxLimit, Max: maxLimit}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
defaultLimits := []string{}
|
defaultLimits := []string{}
|
||||||
|
1
vendor/github.com/containers/common/pkg/hooks/exec/runtimeconfigfilter.go
generated
vendored
1
vendor/github.com/containers/common/pkg/hooks/exec/runtimeconfigfilter.go
generated
vendored
@ -56,7 +56,6 @@ func RuntimeConfigFilterWithOptions(ctx context.Context, options RuntimeConfigFi
|
|||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
for i, hook := range options.Hooks {
|
for i, hook := range options.Hooks {
|
||||||
hook := hook
|
|
||||||
var stdout bytes.Buffer
|
var stdout bytes.Buffer
|
||||||
hookErr, err = RunWithOptions(ctx, RunOptions{Hook: &hook, Dir: options.Dir, State: data, Stdout: &stdout, PostKillTimeout: options.PostKillTimeout})
|
hookErr, err = RunWithOptions(ctx, RunOptions{Hook: &hook, Dir: options.Dir, State: data, Stdout: &stdout, PostKillTimeout: options.PostKillTimeout})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
2
vendor/github.com/containers/common/pkg/netns/netns_linux.go
generated
vendored
2
vendor/github.com/containers/common/pkg/netns/netns_linux.go
generated
vendored
@ -60,7 +60,7 @@ func NewNSAtPath(nsPath string) (ns.NetNS, error) {
|
|||||||
// NewNS creates a new persistent (bind-mounted) network namespace and returns
|
// NewNS creates a new persistent (bind-mounted) network namespace and returns
|
||||||
// an object representing that namespace, without switching to it.
|
// an object representing that namespace, without switching to it.
|
||||||
func NewNS() (ns.NetNS, error) {
|
func NewNS() (ns.NetNS, error) {
|
||||||
for i := 0; i < 10000; i++ {
|
for range 10000 {
|
||||||
b := make([]byte, 16)
|
b := make([]byte, 16)
|
||||||
_, err := rand.Reader.Read(b)
|
_, err := rand.Reader.Read(b)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
2
vendor/github.com/containers/common/pkg/report/camelcase/camelcase.go
generated
vendored
2
vendor/github.com/containers/common/pkg/report/camelcase/camelcase.go
generated
vendored
@ -73,7 +73,7 @@ func Split(src string) (entries []string) {
|
|||||||
}
|
}
|
||||||
// handle upper case -> lower case sequences, e.g.
|
// handle upper case -> lower case sequences, e.g.
|
||||||
// "PDFL", "oader" -> "PDF", "Loader"
|
// "PDFL", "oader" -> "PDF", "Loader"
|
||||||
for i := 0; i < len(runes)-1; i++ {
|
for i := range len(runes) - 1 {
|
||||||
if unicode.IsUpper(runes[i][0]) && unicode.IsLower(runes[i+1][0]) {
|
if unicode.IsUpper(runes[i][0]) && unicode.IsLower(runes[i+1][0]) {
|
||||||
runes[i+1] = append([]rune{runes[i][len(runes[i])-1]}, runes[i+1]...)
|
runes[i+1] = append([]rune{runes[i][len(runes[i])-1]}, runes[i+1]...)
|
||||||
runes[i] = runes[i][:len(runes[i])-1]
|
runes[i] = runes[i][:len(runes[i])-1]
|
||||||
|
2
vendor/github.com/containers/common/pkg/report/template.go
generated
vendored
2
vendor/github.com/containers/common/pkg/report/template.go
generated
vendored
@ -101,7 +101,7 @@ func Headers(object any, overrides map[string]string) []map[string]string {
|
|||||||
|
|
||||||
// Column header will be field name upper-cased.
|
// Column header will be field name upper-cased.
|
||||||
headers := make(map[string]string, value.NumField())
|
headers := make(map[string]string, value.NumField())
|
||||||
for i := 0; i < value.Type().NumField(); i++ {
|
for i := range value.Type().NumField() {
|
||||||
field := value.Type().Field(i)
|
field := value.Type().Field(i)
|
||||||
// Recurse to find field names from promoted structs
|
// Recurse to find field names from promoted structs
|
||||||
if field.Type.Kind() == reflect.Struct && field.Anonymous {
|
if field.Type.Kind() == reflect.Struct && field.Anonymous {
|
||||||
|
2
vendor/github.com/containers/common/pkg/systemd/systemd_linux.go
generated
vendored
2
vendor/github.com/containers/common/pkg/systemd/systemd_linux.go
generated
vendored
@ -74,7 +74,7 @@ func MoveRootlessNetnsSlirpProcessToUserSlice(pid int) error {
|
|||||||
func MovePauseProcessToScope(pausePidPath string) {
|
func MovePauseProcessToScope(pausePidPath string) {
|
||||||
var err error
|
var err error
|
||||||
|
|
||||||
for i := 0; i < 10; i++ {
|
for range 10 {
|
||||||
randBytes := make([]byte, 4)
|
randBytes := make([]byte, 4)
|
||||||
_, err = rand.Read(randBytes)
|
_, err = rand.Read(randBytes)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
6
vendor/modules.txt
vendored
6
vendor/modules.txt
vendored
@ -171,8 +171,8 @@ github.com/containers/buildah/pkg/sshagent
|
|||||||
github.com/containers/buildah/pkg/util
|
github.com/containers/buildah/pkg/util
|
||||||
github.com/containers/buildah/pkg/volumes
|
github.com/containers/buildah/pkg/volumes
|
||||||
github.com/containers/buildah/util
|
github.com/containers/buildah/util
|
||||||
# github.com/containers/common v0.60.1-0.20240829105055-8483ef6022b4
|
# github.com/containers/common v0.60.1-0.20240906123248-5298b838dcbd
|
||||||
## explicit; go 1.21.0
|
## explicit; go 1.22.0
|
||||||
github.com/containers/common/internal
|
github.com/containers/common/internal
|
||||||
github.com/containers/common/internal/attributedstring
|
github.com/containers/common/internal/attributedstring
|
||||||
github.com/containers/common/libimage
|
github.com/containers/common/libimage
|
||||||
@ -1193,7 +1193,7 @@ golang.org/x/exp/slices
|
|||||||
## explicit; go 1.18
|
## explicit; go 1.18
|
||||||
golang.org/x/mod/semver
|
golang.org/x/mod/semver
|
||||||
golang.org/x/mod/sumdb/note
|
golang.org/x/mod/sumdb/note
|
||||||
# golang.org/x/net v0.29.0
|
# golang.org/x/net v0.28.0
|
||||||
## explicit; go 1.18
|
## explicit; go 1.18
|
||||||
golang.org/x/net/bpf
|
golang.org/x/net/bpf
|
||||||
golang.org/x/net/context
|
golang.org/x/net/context
|
||||||
|
Reference in New Issue
Block a user