diff -ur ../src.orig/cli/docs/reference/commandline/service_create.md ./cli/docs/reference/commandline/service_create.md --- ../src.orig/cli/docs/reference/commandline/service_create.md 2023-10-15 10:26:02.791344801 +0000 +++ ./cli/docs/reference/commandline/service_create.md 2023-10-15 10:27:35.195005139 +0000 @@ -305,7 +305,7 @@ A **bind mount** makes a file or directory on the host available to the container it is mounted within. A bind mount may be either read-only or read-write. For example, a container might share its host's DNS information by -means of a bind mount of the host's `/etc/resolv.conf` or a container might +means of a bind mount of the host's `@TERMUX_PREFIX@/etc/resolv.conf` or a container might write logs to its host's `/var/log/myContainerLogs` directory. If you use bind mounts and your host and containers have different notions of permissions, access controls, or other such details, you will run into portability issues. diff -ur ../src.orig/cli/docs/reference/run.md ./cli/docs/reference/run.md --- ../src.orig/cli/docs/reference/run.md 2023-10-15 10:26:02.791344801 +0000 +++ ./cli/docs/reference/run.md 2023-10-15 10:27:35.201671828 +0000 @@ -412,8 +412,8 @@ only change the hostname and domain name inside the container. Similar to `--hostname`, the `--add-host`, `--dns`, `--dns-search`, and `--dns-option` options can be used in `host` network mode. These options update -`/etc/hosts` or `/etc/resolv.conf` inside the container. No change are made to -`/etc/hosts` and `/etc/resolv.conf` on the host. +`/etc/hosts` or `@TERMUX_PREFIX@/etc/resolv.conf` inside the container. No change are made to +`/etc/hosts` and `@TERMUX_PREFIX@/etc/resolv.conf` on the host. Compared to the default `bridge` mode, the `host` mode gives *significantly* better networking performance since it uses the host's native networking stack diff -ur ../src.orig/libnetwork/api/api_test.go ./libnetwork/api/api_test.go --- ../src.orig/libnetwork/api/api_test.go 2023-10-15 10:26:02.794678146 +0000 +++ ./libnetwork/api/api_test.go 2023-10-15 10:27:36.505009746 +0000 @@ -132,7 +132,7 @@ hn := "host1" dn := "docker.com" hp := "/etc/hosts" - rc := "/etc/resolv.conf" + rc := "@TERMUX_PREFIX@/etc/resolv.conf" dnss := []string{"8.8.8.8", "172.28.34.5"} ehs := []extraHost{{Name: "extra1", Address: "172.28.9.1"}, {Name: "extra2", Address: "172.28.9.2"}} diff -ur ../src.orig/libnetwork/libnetwork_linux_test.go ./libnetwork/libnetwork_linux_test.go --- ../src.orig/libnetwork/libnetwork_linux_test.go 2023-10-15 10:26:02.794678146 +0000 +++ ./libnetwork/libnetwork_linux_test.go 2023-10-15 10:27:36.268342246 +0000 @@ -551,13 +551,13 @@ tmpResolvConf := []byte("search pommesfrites.fr\nnameserver 12.34.56.78\nnameserver 2001:4860:4860::8888\n") expectedResolvConf := []byte("search pommesfrites.fr\nnameserver 127.0.0.11\nnameserver 2001:4860:4860::8888\noptions ndots:0\n") //take a copy of resolv.conf for restoring after test completes - resolvConfSystem, err := ioutil.ReadFile("/etc/resolv.conf") + resolvConfSystem, err := ioutil.ReadFile("@TERMUX_PREFIX@/etc/resolv.conf") if err != nil { t.Fatal(err) } //cleanup defer func() { - if err := ioutil.WriteFile("/etc/resolv.conf", resolvConfSystem, 0644); err != nil { + if err := ioutil.WriteFile("@TERMUX_PREFIX@/etc/resolv.conf", resolvConfSystem, 0644); err != nil { t.Fatal(err) } }() @@ -585,7 +585,7 @@ t.Fatal(err) } - if err := ioutil.WriteFile("/etc/resolv.conf", tmpResolvConf, 0644); err != nil { + if err := ioutil.WriteFile("@TERMUX_PREFIX@/etc/resolv.conf", tmpResolvConf, 0644); err != nil { t.Fatal(err) } @@ -629,13 +629,13 @@ tmpResolvConf := []byte("search localhost.net\nnameserver 127.0.0.1\nnameserver 2001:4860:4860::8888\n") //take a copy of resolv.conf for restoring after test completes - resolvConfSystem, err := ioutil.ReadFile("/etc/resolv.conf") + resolvConfSystem, err := ioutil.ReadFile("@TERMUX_PREFIX@/etc/resolv.conf") if err != nil { t.Fatal(err) } //cleanup defer func() { - if err := ioutil.WriteFile("/etc/resolv.conf", resolvConfSystem, 0644); err != nil { + if err := ioutil.WriteFile("@TERMUX_PREFIX@/etc/resolv.conf", resolvConfSystem, 0644); err != nil { t.Fatal(err) } }() @@ -650,7 +650,7 @@ t.Fatal(err) } - if err := ioutil.WriteFile("/etc/resolv.conf", tmpResolvConf, 0644); err != nil { + if err := ioutil.WriteFile("@TERMUX_PREFIX@/etc/resolv.conf", tmpResolvConf, 0644); err != nil { t.Fatal(err) } @@ -660,7 +660,7 @@ sb, err := controller.NewSandbox(containerID, libnetwork.OptionUseDefaultSandbox(), libnetwork.OptionResolvConfPath(resolvConfPath), - libnetwork.OptionOriginResolvConfPath("/etc/resolv.conf")) + libnetwork.OptionOriginResolvConfPath("@TERMUX_PREFIX@/etc/resolv.conf")) if err != nil { t.Fatal(err) } @@ -712,13 +712,13 @@ tmpResolvConf3 := []byte("search pommesfrites.fr\nnameserver 113.34.56.78\n") //take a copy of resolv.conf for restoring after test completes - resolvConfSystem, err := ioutil.ReadFile("/etc/resolv.conf") + resolvConfSystem, err := ioutil.ReadFile("@TERMUX_PREFIX@/etc/resolv.conf") if err != nil { t.Fatal(err) } //cleanup defer func() { - if err := ioutil.WriteFile("/etc/resolv.conf", resolvConfSystem, 0644); err != nil { + if err := ioutil.WriteFile("@TERMUX_PREFIX@/etc/resolv.conf", resolvConfSystem, 0644); err != nil { t.Fatal(err) } }() @@ -743,7 +743,7 @@ t.Fatal(err) } - if err := ioutil.WriteFile("/etc/resolv.conf", tmpResolvConf1, 0644); err != nil { + if err := ioutil.WriteFile("@TERMUX_PREFIX@/etc/resolv.conf", tmpResolvConf1, 0644); err != nil { t.Fatal(err) } @@ -790,7 +790,7 @@ t.Fatal(err) } - if err := ioutil.WriteFile("/etc/resolv.conf", tmpResolvConf2, 0644); err != nil { + if err := ioutil.WriteFile("@TERMUX_PREFIX@/etc/resolv.conf", tmpResolvConf2, 0644); err != nil { t.Fatal(err) } diff -ur ../src.orig/libnetwork/netutils/utils_linux.go ./libnetwork/netutils/utils_linux.go --- ../src.orig/libnetwork/netutils/utils_linux.go 2023-10-15 10:26:02.794678146 +0000 +++ ./libnetwork/netutils/utils_linux.go 2023-10-15 10:27:36.268342246 +0000 @@ -113,7 +113,7 @@ // overlap with existing interfaces in the system func FindAvailableNetwork(list []*net.IPNet) (*net.IPNet, error) { // We don't check for an error here, because we don't really care if we - // can't read /etc/resolv.conf. So instead we skip the append if resolvConf + // can't read @TERMUX_PREFIX@/etc/resolv.conf. So instead we skip the append if resolvConf // is nil. It either doesn't exist, or we can't read it for some reason. var nameservers []string if rc, err := resolvconf.Get(); err == nil { diff -ur ../src.orig/libnetwork/resolvconf/README.md ./libnetwork/resolvconf/README.md --- ../src.orig/libnetwork/resolvconf/README.md 2023-10-15 10:26:02.794678146 +0000 +++ ./libnetwork/resolvconf/README.md 2023-10-15 10:27:36.261675557 +0000 @@ -1 +1 @@ -Package resolvconf provides utility code to query and update DNS configuration in /etc/resolv.conf +Package resolvconf provides utility code to query and update DNS configuration in @TERMUX_PREFIX@/etc/resolv.conf diff -ur ../src.orig/libnetwork/resolvconf/resolvconf.go ./libnetwork/resolvconf/resolvconf.go --- ../src.orig/libnetwork/resolvconf/resolvconf.go 2023-10-15 10:26:02.794678146 +0000 +++ ./libnetwork/resolvconf/resolvconf.go 2023-10-15 10:27:36.261675557 +0000 @@ -1,4 +1,4 @@ -// Package resolvconf provides utility code to query and update DNS configuration in /etc/resolv.conf +// Package resolvconf provides utility code to query and update DNS configuration in @TERMUX_PREFIX@/etc/resolv.conf package resolvconf import ( @@ -16,7 +16,7 @@ const ( // defaultPath is the default path to the resolv.conf that contains information to resolve DNS. See Path(). - defaultPath = "/etc/resolv.conf" + defaultPath = "@TERMUX_PREFIX@/etc/resolv.conf" // alternatePath is a path different from defaultPath, that may be used to resolve DNS. See Path(). alternatePath = "/run/systemd/resolve/resolv.conf" ) @@ -28,15 +28,15 @@ // Path returns the path to the resolv.conf file that libnetwork should use. // -// When /etc/resolv.conf contains 127.0.0.53 as the only nameserver, then +// When @TERMUX_PREFIX@/etc/resolv.conf contains 127.0.0.53 as the only nameserver, then // it is assumed systemd-resolved manages DNS. Because inside the container 127.0.0.53 // is not a valid DNS server, Path() returns /run/systemd/resolve/resolv.conf // which is the resolv.conf that systemd-resolved generates and manages. -// Otherwise Path() returns /etc/resolv.conf. +// Otherwise Path() returns @TERMUX_PREFIX@/etc/resolv.conf. // // Errors are silenced as they will inevitably resurface at future open/read calls. // -// More information at https://www.freedesktop.org/software/systemd/man/systemd-resolved.service.html#/etc/resolv.conf +// More information at https://www.freedesktop.org/software/systemd/man/systemd-resolved.service.html#@TERMUX_PREFIX@/etc/resolv.conf func Path() string { detectSystemdResolvConfOnce.Do(func() { candidateResolvConf, err := ioutil.ReadFile(defaultPath) @@ -87,7 +87,7 @@ Hash string } -// Get returns the contents of /etc/resolv.conf and its hash +// Get returns the contents of @TERMUX_PREFIX@/etc/resolv.conf and its hash func Get() (*File, error) { return GetSpecific(Path()) } @@ -105,7 +105,7 @@ return &File{Content: resolv, Hash: hash}, nil } -// GetIfChanged retrieves the host /etc/resolv.conf file, checks against the last hash +// GetIfChanged retrieves the host @TERMUX_PREFIX@/etc/resolv.conf file, checks against the last hash // and, if modified since last check, returns the bytes and new hash. // This feature is used by the resolv.conf updater for containers func GetIfChanged() (*File, error) { @@ -183,7 +183,7 @@ return output } -// GetNameservers returns nameservers (if any) listed in /etc/resolv.conf +// GetNameservers returns nameservers (if any) listed in @TERMUX_PREFIX@/etc/resolv.conf func GetNameservers(resolvConf []byte, kind int) []string { nameservers := []string{} for _, line := range getLines(resolvConf, []byte("#")) { @@ -203,7 +203,7 @@ } // GetNameserversAsCIDR returns nameservers (if any) listed in -// /etc/resolv.conf as CIDR blocks (e.g., "1.2.3.4/32") +// @TERMUX_PREFIX@/etc/resolv.conf as CIDR blocks (e.g., "1.2.3.4/32") // This function's output is intended for net.ParseCIDR func GetNameserversAsCIDR(resolvConf []byte) []string { nameservers := []string{} @@ -220,7 +220,7 @@ return nameservers } -// GetSearchDomains returns search domains (if any) listed in /etc/resolv.conf +// GetSearchDomains returns search domains (if any) listed in @TERMUX_PREFIX@/etc/resolv.conf // If more than one search line is encountered, only the contents of the last // one is returned. func GetSearchDomains(resolvConf []byte) []string { @@ -235,7 +235,7 @@ return domains } -// GetOptions returns options (if any) listed in /etc/resolv.conf +// GetOptions returns options (if any) listed in @TERMUX_PREFIX@/etc/resolv.conf // If more than one options line is encountered, only the contents of the last // one is returned. func GetOptions(resolvConf []byte) []string { diff -ur ../src.orig/libnetwork/resolvconf/resolvconf_test.go ./libnetwork/resolvconf/resolvconf_test.go --- ../src.orig/libnetwork/resolvconf/resolvconf_test.go 2023-10-15 10:26:02.794678146 +0000 +++ ./libnetwork/resolvconf/resolvconf_test.go 2023-10-15 10:27:36.261675557 +0000 @@ -16,19 +16,19 @@ if err != nil { t.Fatal(err) } - resolvConfSystem, err := ioutil.ReadFile("/etc/resolv.conf") + resolvConfSystem, err := ioutil.ReadFile("@TERMUX_PREFIX@/etc/resolv.conf") if err != nil { t.Fatal(err) } if string(resolvConfUtils.Content) != string(resolvConfSystem) { - t.Fatalf("/etc/resolv.conf and GetResolvConf have different content.") + t.Fatalf("@TERMUX_PREFIX@/etc/resolv.conf and GetResolvConf have different content.") } hashSystem, err := ioutils.HashData(bytes.NewReader(resolvConfSystem)) if err != nil { t.Fatal(err) } if resolvConfUtils.Hash != hashSystem { - t.Fatalf("/etc/resolv.conf and GetResolvConf have different hashes.") + t.Fatalf("@TERMUX_PREFIX@/etc/resolv.conf and GetResolvConf have different hashes.") } } diff -ur ../src.orig/libnetwork/sandbox_dns_unix.go ./libnetwork/sandbox_dns_unix.go --- ../src.orig/libnetwork/sandbox_dns_unix.go 2023-10-15 10:26:02.794678146 +0000 +++ ./libnetwork/sandbox_dns_unix.go 2023-10-15 10:27:36.268342246 +0000 @@ -225,10 +225,10 @@ if !os.IsNotExist(err) { return err } - // it's ok to continue if /etc/resolv.conf doesn't exist, default resolvers (Google's Public DNS) + // it's ok to continue if @TERMUX_PREFIX@/etc/resolv.conf doesn't exist, default resolvers (Google's Public DNS) // will be used currRC = &resolvconf.File{} - logrus.Infof("/etc/resolv.conf does not exist") + logrus.Infof("@TERMUX_PREFIX@/etc/resolv.conf does not exist") } if len(sb.config.dnsList) > 0 || len(sb.config.dnsSearchList) > 0 || len(sb.config.dnsOptionsList) > 0 { diff -ur ../src.orig/libnetwork/sandbox.go ./libnetwork/sandbox.go --- ../src.orig/libnetwork/sandbox.go 2023-10-15 10:26:02.794678146 +0000 +++ ./libnetwork/sandbox.go 2023-10-15 10:27:36.268342246 +0000 @@ -112,7 +112,7 @@ IP string } -// These are the container configs used to customize container /etc/resolv.conf file. +// These are the container configs used to customize container @TERMUX_PREFIX@/etc/resolv.conf file. type resolvConfPathConfig struct { resolvConfPath string originResolvConfPath string diff -ur ../src.orig/libnetwork/vendor/github.com/hashicorp/memberlist/config.go ./libnetwork/vendor/github.com/hashicorp/memberlist/config.go --- ../src.orig/libnetwork/vendor/github.com/hashicorp/memberlist/config.go 2023-10-15 10:26:02.794678146 +0000 +++ ./libnetwork/vendor/github.com/hashicorp/memberlist/config.go 2023-10-15 10:27:36.435009499 +0000 @@ -188,7 +188,7 @@ Alive AliveDelegate // DNSConfigPath points to the system's DNS config file, usually located - // at /etc/resolv.conf. It can be overridden via config for easier testing. + // at @TERMUX_PREFIX@/etc/resolv.conf. It can be overridden via config for easier testing. DNSConfigPath string // LogOutput is the writer where logs should be sent. If this is not @@ -254,7 +254,7 @@ SecretKey: nil, Keyring: nil, - DNSConfigPath: "/etc/resolv.conf", + DNSConfigPath: "@TERMUX_PREFIX@/etc/resolv.conf", HandoffQueueDepth: 1024, UDPBufferSize: 1400, diff -ur ../src.orig/libnetwork/vendor/github.com/miekg/dns/clientconfig.go ./libnetwork/vendor/github.com/miekg/dns/clientconfig.go --- ../src.orig/libnetwork/vendor/github.com/miekg/dns/clientconfig.go 2023-10-15 10:26:02.794678146 +0000 +++ ./libnetwork/vendor/github.com/miekg/dns/clientconfig.go 2023-10-15 10:27:36.451676225 +0000 @@ -8,7 +8,7 @@ "strings" ) -// ClientConfig wraps the contents of the /etc/resolv.conf file. +// ClientConfig wraps the contents of the @TERMUX_PREFIX@/etc/resolv.conf file. type ClientConfig struct { Servers []string // servers to use Search []string // suffixes to append to local name diff -ur ../src.orig/moby/container/container_unix.go ./moby/container/container_unix.go --- ../src.orig/moby/container/container_unix.go 2023-08-29 19:14:17.000000000 +0000 +++ ./moby/container/container_unix.go 2023-10-15 10:27:35.245005315 +0000 @@ -37,7 +37,7 @@ // TrySetNetworkMount attempts to set the network mounts given a provided destination and // the path to use for it; return true if the given destination was a network mount file func (container *Container) TrySetNetworkMount(destination string, path string) bool { - if destination == "/etc/resolv.conf" { + if destination == "@TERMUX_PREFIX@/etc/resolv.conf" { container.ResolvConfPath = path return true } @@ -73,14 +73,14 @@ logrus.Warnf("ResolvConfPath set to %q, but can't stat this filename (err = %v); skipping", container.ResolvConfPath, err) } else { writable := !container.HostConfig.ReadonlyRootfs - if m, exists := container.MountPoints["/etc/resolv.conf"]; exists { + if m, exists := container.MountPoints["@TERMUX_PREFIX@/etc/resolv.conf"]; exists { writable = m.RW } else { label.Relabel(container.ResolvConfPath, container.MountLabel, shared) } mounts = append(mounts, Mount{ Source: container.ResolvConfPath, - Destination: "/etc/resolv.conf", + Destination: "@TERMUX_PREFIX@/etc/resolv.conf", Writable: writable, Propagation: string(parser.DefaultPropagationMode()), }) diff -ur ../src.orig/moby/contrib/dockerd-rootless.sh ./moby/contrib/dockerd-rootless.sh --- ../src.orig/moby/contrib/dockerd-rootless.sh 2023-08-29 19:14:17.000000000 +0000 +++ ./moby/contrib/dockerd-rootless.sh 2023-10-15 10:27:35.351672357 +0000 @@ -95,8 +95,8 @@ # Re-exec the script via RootlessKit, so as to create unprivileged {user,mount,network} namespaces. # # --copy-up allows removing/creating files in the directories by creating tmpfs and symlinks - # * /etc: copy-up is required so as to prevent `/etc/resolv.conf` in the - # namespace from being unexpectedly unmounted when `/etc/resolv.conf` is recreated on the host + # * /etc: copy-up is required so as to prevent `@TERMUX_PREFIX@/etc/resolv.conf` in the + # namespace from being unexpectedly unmounted when `@TERMUX_PREFIX@/etc/resolv.conf` is recreated on the host # (by either systemd-networkd or NetworkManager) # * /run: copy-up is required so that we can create /run/docker (hardcoded for plugins) in our namespace exec $rootlesskit \ diff -ur ../src.orig/moby/daemon/container_operations_unix.go ./moby/daemon/container_operations_unix.go --- ../src.orig/moby/daemon/container_operations_unix.go 2023-08-29 19:14:17.000000000 +0000 +++ ./moby/daemon/container_operations_unix.go 2023-10-15 10:27:35.288338800 +0000 @@ -384,25 +384,25 @@ func (daemon *Daemon) setupPathsAndSandboxOptions(container *container.Container, sboxOptions *[]libnetwork.SandboxOption) error { var err error - // Set the correct paths for /etc/hosts and /etc/resolv.conf, based on the + // Set the correct paths for /etc/hosts and @TERMUX_PREFIX@/etc/resolv.conf, based on the // networking-mode of the container. Note that containers with "container" // networking are already handled in "initializeNetworking()" before we reach // this function, so do not have to be accounted for here. switch { case container.HostConfig.NetworkMode.IsHost(): // In host-mode networking, the container does not have its own networking - // namespace, so both `/etc/hosts` and `/etc/resolv.conf` should be the same + // namespace, so both `/etc/hosts` and `@TERMUX_PREFIX@/etc/resolv.conf` should be the same // as on the host itself. The container gets a copy of these files. *sboxOptions = append( *sboxOptions, libnetwork.OptionOriginHostsPath("/etc/hosts"), - libnetwork.OptionOriginResolvConfPath("/etc/resolv.conf"), + libnetwork.OptionOriginResolvConfPath("@TERMUX_PREFIX@/etc/resolv.conf"), ) case container.HostConfig.NetworkMode.IsUserDefined(): // The container uses a user-defined network. We use the embedded DNS // server for container name resolution and to act as a DNS forwarder // for external DNS resolution. - // We parse the DNS server(s) that are defined in /etc/resolv.conf on + // We parse the DNS server(s) that are defined in @TERMUX_PREFIX@/etc/resolv.conf on // the host, which may be a local DNS server (for example, if DNSMasq or // systemd-resolvd are in use). The embedded DNS server forwards DNS // resolution to the DNS server configured on the host, which in itself @@ -412,7 +412,7 @@ // directly, as they can be dynamically reconfigured. *sboxOptions = append( *sboxOptions, - libnetwork.OptionOriginResolvConfPath("/etc/resolv.conf"), + libnetwork.OptionOriginResolvConfPath("@TERMUX_PREFIX@/etc/resolv.conf"), ) default: // For other situations, such as the default bridge network, container @@ -425,7 +425,7 @@ // container are not updated after the container is created, but the // DNS servers on the host can be dynamically updated. // - // Copy the host's resolv.conf for the container (/run/systemd/resolve/resolv.conf or /etc/resolv.conf) + // Copy the host's resolv.conf for the container (/run/systemd/resolve/resolv.conf or @TERMUX_PREFIX@/etc/resolv.conf) *sboxOptions = append( *sboxOptions, libnetwork.OptionOriginResolvConfPath(daemon.configStore.GetResolvConf()), diff -ur ../src.orig/moby/daemon/daemon_linux.go ./moby/daemon/daemon_linux.go --- ../src.orig/moby/daemon/daemon_linux.go 2023-10-15 10:26:02.708011170 +0000 +++ ./moby/daemon/daemon_linux.go 2023-10-15 10:27:35.288338800 +0000 @@ -134,7 +134,7 @@ } // setupResolvConf sets the appropriate resolv.conf file if not specified -// When systemd-resolved is running the default /etc/resolv.conf points to +// When systemd-resolved is running the default @TERMUX_PREFIX@/etc/resolv.conf points to // localhost. In this case fetch the alternative config file that is in a // different path so that containers can use it // In all the other cases fallback to the default one diff -ur ../src.orig/moby/daemon/daemon_linux_test.go ./moby/daemon/daemon_linux_test.go --- ../src.orig/moby/daemon/daemon_linux_test.go 2023-08-29 19:14:17.000000000 +0000 +++ ./moby/daemon/daemon_linux_test.go 2023-10-15 10:27:35.341672321 +0000 @@ -42,7 +42,7 @@ 159 142 8:4 /home/mlaventure/gopath /home/mlaventure/gopath rw,relatime - ext4 /dev/disk/by-uuid/d99e196c-1fc4-4b4f-bab9-9962b2b34e99 rw,errors=remount-ro,data=ordered 160 142 8:4 /var/lib/docker/volumes/9a428b651ee4c538130143cad8d87f603a4bf31b928afe7ff3ecd65480692b35/_data /var/lib/docker rw,relatime - ext4 /dev/disk/by-uuid/d99e196c-1fc4-4b4f-bab9-9962b2b34e99 rw,errors=remount-ro,data=ordered 164 142 8:4 /home/mlaventure/gopath/src/github.com/docker/docker /go/src/github.com/docker/docker rw,relatime - ext4 /dev/disk/by-uuid/d99e196c-1fc4-4b4f-bab9-9962b2b34e99 rw,errors=remount-ro,data=ordered -165 142 8:4 /var/lib/docker/containers/5425782a95e643181d8a485a2bab3c0bb21f51d7dfc03511f0e6fbf3f3aa356a/resolv.conf /etc/resolv.conf rw,relatime - ext4 /dev/disk/by-uuid/d99e196c-1fc4-4b4f-bab9-9962b2b34e99 rw,errors=remount-ro,data=ordered +165 142 8:4 /var/lib/docker/containers/5425782a95e643181d8a485a2bab3c0bb21f51d7dfc03511f0e6fbf3f3aa356a/resolv.conf @TERMUX_PREFIX@/etc/resolv.conf rw,relatime - ext4 /dev/disk/by-uuid/d99e196c-1fc4-4b4f-bab9-9962b2b34e99 rw,errors=remount-ro,data=ordered 166 142 8:4 /var/lib/docker/containers/5425782a95e643181d8a485a2bab3c0bb21f51d7dfc03511f0e6fbf3f3aa356a/hostname /etc/hostname rw,relatime - ext4 /dev/disk/by-uuid/d99e196c-1fc4-4b4f-bab9-9962b2b34e99 rw,errors=remount-ro,data=ordered 167 142 8:4 /var/lib/docker/containers/5425782a95e643181d8a485a2bab3c0bb21f51d7dfc03511f0e6fbf3f3aa356a/hosts /etc/hosts rw,relatime - ext4 /dev/disk/by-uuid/d99e196c-1fc4-4b4f-bab9-9962b2b34e99 rw,errors=remount-ro,data=ordered 168 144 0:39 / /dev/shm rw,nosuid,nodev,noexec,relatime - tmpfs shm rw,size=65536k diff -ur ../src.orig/moby/daemon/initlayer/setup_unix.go ./moby/daemon/initlayer/setup_unix.go --- ../src.orig/moby/daemon/initlayer/setup_unix.go 2023-08-29 19:14:17.000000000 +0000 +++ ./moby/daemon/initlayer/setup_unix.go 2023-10-15 10:27:35.341672321 +0000 @@ -27,7 +27,7 @@ "/proc": "dir", "/sys": "dir", "/.dockerenv": "file", - "/etc/resolv.conf": "file", + "@TERMUX_PREFIX@/etc/resolv.conf": "file", "/etc/hosts": "file", "/etc/hostname": "file", "/dev/console": "file", diff -ur ../src.orig/moby/daemon/volumes_unix.go ./moby/daemon/volumes_unix.go --- ../src.orig/moby/daemon/volumes_unix.go 2023-08-29 19:14:17.000000000 +0000 +++ ./moby/daemon/volumes_unix.go 2023-10-15 10:27:35.331672287 +0000 @@ -17,7 +17,7 @@ // setupMounts iterates through each of the mount points for a container and // calls Setup() on each. It also looks to see if is a network mount such as -// /etc/resolv.conf, and if it is not, appends it to the array of mounts. +// @TERMUX_PREFIX@/etc/resolv.conf, and if it is not, appends it to the array of mounts. func (daemon *Daemon) setupMounts(c *container.Container) ([]container.Mount, error) { var mounts []container.Mount // TODO: tmpfs mounts should be part of Mountpoints @@ -96,7 +96,7 @@ // sortMounts sorts an array of mounts in lexicographic order. This ensure that // when mounting, the mounts don't shadow other mounts. For example, if mounting -// /etc and /etc/resolv.conf, /etc/resolv.conf must not be mounted first. +// /etc and @TERMUX_PREFIX@/etc/resolv.conf, @TERMUX_PREFIX@/etc/resolv.conf must not be mounted first. func sortMounts(m []container.Mount) []container.Mount { sort.Sort(mounts(m)) return m diff -ur ../src.orig/moby/integration/container/mounts_linux_test.go ./moby/integration/container/mounts_linux_test.go --- ../src.orig/moby/integration/container/mounts_linux_test.go 2023-08-29 19:14:17.000000000 +0000 +++ ./moby/integration/container/mounts_linux_test.go 2023-10-15 10:27:35.258338695 +0000 @@ -46,7 +46,7 @@ { Type: "bind", Source: tmpNWFileMount, - Target: "/etc/resolv.conf", + Target: "@TERMUX_PREFIX@/etc/resolv.conf", }, { Type: "bind", @@ -77,7 +77,7 @@ // (represented by `daemon.repository` at init time). // This forces users who want to use user namespaces to handle the // ownership needs of any external files mounted as network files - // (/etc/resolv.conf, /etc/hosts, /etc/hostname) separately from the + // (@TERMUX_PREFIX@/etc/resolv.conf, /etc/hosts, /etc/hostname) separately from the // daemon. In all other volume/bind mount situations we have taken this // same line--we don't chown host file content. // See GitHub PR 34224 for details. diff -ur ../src.orig/moby/integration-cli/docker_cli_cp_test.go ./moby/integration-cli/docker_cli_cp_test.go --- ../src.orig/moby/integration-cli/docker_cli_cp_test.go 2023-08-29 19:14:17.000000000 +0000 +++ ./moby/integration-cli/docker_cli_cp_test.go 2023-10-15 10:27:36.248342177 +0000 @@ -398,8 +398,8 @@ out, _ = dockerCmd(c, "wait", containerID) assert.Equal(c, strings.TrimSpace(out), "0", "failed to set up container") - // Copy actual /etc/resolv.conf - dockerCmd(c, "cp", containerID+":/etc/resolv.conf", outDir) + // Copy actual @TERMUX_PREFIX@/etc/resolv.conf + dockerCmd(c, "cp", containerID+":@TERMUX_PREFIX@/etc/resolv.conf", outDir) expected := readContainerFile(c, containerID, "resolv.conf") actual, err := os.ReadFile(outDir + "/resolv.conf") @@ -414,7 +414,7 @@ assert.NilError(c, err) assert.Assert(c, bytes.Equal(actual, expected), "Expected copied file to be duplicate of the container hosts") - // Copy actual /etc/resolv.conf + // Copy actual @TERMUX_PREFIX@/etc/resolv.conf dockerCmd(c, "cp", containerID+":/etc/hostname", outDir) expected = readContainerFile(c, containerID, "hostname") diff -ur ../src.orig/moby/integration-cli/docker_cli_daemon_test.go ./moby/integration-cli/docker_cli_daemon_test.go --- ../src.orig/moby/integration-cli/docker_cli_daemon_test.go 2023-08-29 19:14:17.000000000 +0000 +++ ./moby/integration-cli/docker_cli_daemon_test.go 2023-10-15 10:27:36.245008831 +0000 @@ -2258,7 +2258,7 @@ s.d.StartWithBusybox(c, "--dns", "1.2.3.4", "--dns-search", "example.com", "--dns-opt", "timeout:3") expectedOutput := "nameserver 1.2.3.4" - out, _ := s.d.Cmd("run", "--net=host", "busybox", "cat", "/etc/resolv.conf") + out, _ := s.d.Cmd("run", "--net=host", "busybox", "cat", "@TERMUX_PREFIX@/etc/resolv.conf") assert.Assert(c, strings.Contains(out, expectedOutput), "Expected '%s', but got %q", expectedOutput, out) expectedOutput = "search example.com" assert.Assert(c, strings.Contains(out, expectedOutput), "Expected '%s', but got %q", expectedOutput, out) diff -ur ../src.orig/moby/integration-cli/docker_cli_run_test.go ./moby/integration-cli/docker_cli_run_test.go --- ../src.orig/moby/integration-cli/docker_cli_run_test.go 2023-10-15 10:26:02.758011348 +0000 +++ ./moby/integration-cli/docker_cli_run_test.go 2023-10-15 10:27:36.238342141 +0000 @@ -1263,13 +1263,13 @@ testRequires(c, testEnv.IsLocalDaemon, DaemonIsLinux) // preserve original resolv.conf for restoring after test - origResolvConf, err := os.ReadFile("/etc/resolv.conf") + origResolvConf, err := os.ReadFile("@TERMUX_PREFIX@/etc/resolv.conf") if os.IsNotExist(err) { - c.Fatalf("/etc/resolv.conf does not exist") + c.Fatalf("@TERMUX_PREFIX@/etc/resolv.conf does not exist") } // defer restored original conf defer func() { - if err := os.WriteFile("/etc/resolv.conf", origResolvConf, 0644); err != nil { + if err := os.WriteFile("@TERMUX_PREFIX@/etc/resolv.conf", origResolvConf, 0644); err != nil { c.Fatal(err) } }() @@ -1278,11 +1278,11 @@ // 2 are removed from the file at container start, and the 3rd (commented out) one is ignored by // GetNameservers(), leading to a replacement of nameservers with the default set tmpResolvConf := []byte("nameserver 127.0.0.1\n#nameserver 127.0.2.1\nnameserver ::1") - if err := os.WriteFile("/etc/resolv.conf", tmpResolvConf, 0644); err != nil { + if err := os.WriteFile("@TERMUX_PREFIX@/etc/resolv.conf", tmpResolvConf, 0644); err != nil { c.Fatal(err) } - actual, _ := dockerCmd(c, "run", "busybox", "cat", "/etc/resolv.conf") + actual, _ := dockerCmd(c, "run", "busybox", "cat", "@TERMUX_PREFIX@/etc/resolv.conf") // check that the actual defaults are appended to the commented out // localhost resolver (which should be preserved) // NOTE: if we ever change the defaults from google dns, this will break @@ -1296,7 +1296,7 @@ // Not applicable on Windows as Windows does not support --dns*, or // the Unix-specific functionality of resolv.conf. testRequires(c, DaemonIsLinux) - result := cli.DockerCmd(c, "run", "--dns=127.0.0.1", "--dns-search=mydomain", "--dns-opt=ndots:9", "busybox", "cat", "/etc/resolv.conf") + result := cli.DockerCmd(c, "run", "--dns=127.0.0.1", "--dns-search=mydomain", "--dns-opt=ndots:9", "busybox", "cat", "@TERMUX_PREFIX@/etc/resolv.conf") // The client will get a warning on stderr when setting DNS to a localhost address; verify this: if !strings.Contains(result.Stderr(), "Localhost DNS setting") { @@ -1308,7 +1308,7 @@ c.Fatalf("expected 'search mydomain nameserver 127.0.0.1 options ndots:9', but says: %q", actual) } - out := cli.DockerCmd(c, "run", "--dns=1.1.1.1", "--dns-search=.", "--dns-opt=ndots:3", "busybox", "cat", "/etc/resolv.conf").Combined() + out := cli.DockerCmd(c, "run", "--dns=1.1.1.1", "--dns-search=.", "--dns-opt=ndots:3", "busybox", "cat", "@TERMUX_PREFIX@/etc/resolv.conf").Combined() actual = strings.ReplaceAll(strings.Trim(strings.Trim(out, "\r\n"), " "), "\n", " ") if actual != "nameserver 1.1.1.1 options ndots:3" { @@ -1318,7 +1318,7 @@ func (s *DockerCLIRunSuite) TestRunDNSRepeatOptions(c *testing.T) { testRequires(c, DaemonIsLinux) - out := cli.DockerCmd(c, "run", "--dns=1.1.1.1", "--dns=2.2.2.2", "--dns-search=mydomain", "--dns-search=mydomain2", "--dns-opt=ndots:9", "--dns-opt=timeout:3", "busybox", "cat", "/etc/resolv.conf").Stdout() + out := cli.DockerCmd(c, "run", "--dns=1.1.1.1", "--dns=2.2.2.2", "--dns-search=mydomain", "--dns-search=mydomain2", "--dns-opt=ndots:9", "--dns-opt=timeout:3", "busybox", "cat", "@TERMUX_PREFIX@/etc/resolv.conf").Stdout() actual := strings.ReplaceAll(strings.Trim(out, "\r\n"), "\n", " ") if actual != "search mydomain mydomain2 nameserver 1.1.1.1 nameserver 2.2.2.2 options ndots:9 timeout:3" { @@ -1330,16 +1330,16 @@ // Not applicable on Windows as testing Unix specific functionality testRequires(c, testEnv.IsLocalDaemon, DaemonIsLinux) - origResolvConf, err := os.ReadFile("/etc/resolv.conf") + origResolvConf, err := os.ReadFile("@TERMUX_PREFIX@/etc/resolv.conf") if os.IsNotExist(err) { - c.Fatalf("/etc/resolv.conf does not exist") + c.Fatalf("@TERMUX_PREFIX@/etc/resolv.conf does not exist") } hostNameservers := resolvconf.GetNameservers(origResolvConf, resolvconf.IP) hostSearch := resolvconf.GetSearchDomains(origResolvConf) var out string - out, _ = dockerCmd(c, "run", "--dns=127.0.0.1", "busybox", "cat", "/etc/resolv.conf") + out, _ = dockerCmd(c, "run", "--dns=127.0.0.1", "busybox", "cat", "@TERMUX_PREFIX@/etc/resolv.conf") if actualNameservers := resolvconf.GetNameservers([]byte(out), resolvconf.IP); actualNameservers[0] != "127.0.0.1" { c.Fatalf("expected '127.0.0.1', but says: %q", actualNameservers[0]) @@ -1355,7 +1355,7 @@ } } - out, _ = dockerCmd(c, "run", "--dns-search=mydomain", "busybox", "cat", "/etc/resolv.conf") + out, _ = dockerCmd(c, "run", "--dns-search=mydomain", "busybox", "cat", "@TERMUX_PREFIX@/etc/resolv.conf") actualNameservers := resolvconf.GetNameservers([]byte(out), resolvconf.IP) if len(actualNameservers) != len(hostNameservers) { @@ -1373,24 +1373,24 @@ // test with file tmpResolvConf := []byte("search example.com\nnameserver 12.34.56.78\nnameserver 127.0.0.1") - if err := os.WriteFile("/etc/resolv.conf", tmpResolvConf, 0644); err != nil { + if err := os.WriteFile("@TERMUX_PREFIX@/etc/resolv.conf", tmpResolvConf, 0644); err != nil { c.Fatal(err) } // put the old resolvconf back defer func() { - if err := os.WriteFile("/etc/resolv.conf", origResolvConf, 0644); err != nil { + if err := os.WriteFile("@TERMUX_PREFIX@/etc/resolv.conf", origResolvConf, 0644); err != nil { c.Fatal(err) } }() - resolvConf, err := os.ReadFile("/etc/resolv.conf") + resolvConf, err := os.ReadFile("@TERMUX_PREFIX@/etc/resolv.conf") if os.IsNotExist(err) { - c.Fatalf("/etc/resolv.conf does not exist") + c.Fatalf("@TERMUX_PREFIX@/etc/resolv.conf does not exist") } hostSearch = resolvconf.GetSearchDomains(resolvConf) - out, _ = dockerCmd(c, "run", "busybox", "cat", "/etc/resolv.conf") + out, _ = dockerCmd(c, "run", "busybox", "cat", "@TERMUX_PREFIX@/etc/resolv.conf") if actualNameservers = resolvconf.GetNameservers([]byte(out), resolvconf.IP); actualNameservers[0] != "12.34.56.78" || len(actualNameservers) != 1 { c.Fatalf("expected '12.34.56.78', but has: %v", actualNameservers) } @@ -1428,8 +1428,8 @@ } // Test if container resolv.conf gets updated the next time it restarts -// if host /etc/resolv.conf has changed. This only applies if the container -// uses the host's /etc/resolv.conf and does not have any dns options provided. +// if host @TERMUX_PREFIX@/etc/resolv.conf has changed. This only applies if the container +// uses the host's @TERMUX_PREFIX@/etc/resolv.conf and does not have any dns options provided. func (s *DockerCLIRunSuite) TestRunResolvconfUpdate(c *testing.T) { // Not applicable on Windows as testing unix specific functionality testRequires(c, testEnv.IsLocalDaemon, DaemonIsLinux) @@ -1439,7 +1439,7 @@ tmpLocalhostResolvConf := []byte("nameserver 127.0.0.1") // take a copy of resolv.conf for restoring after test completes - resolvConfSystem, err := os.ReadFile("/etc/resolv.conf") + resolvConfSystem, err := os.ReadFile("@TERMUX_PREFIX@/etc/resolv.conf") if err != nil { c.Fatal(err) } @@ -1447,17 +1447,17 @@ // This test case is meant to test monitoring resolv.conf when it is // a regular file not a bind mounc. So we unmount resolv.conf and replace // it with a file containing the original settings. - mounted, err := mountinfo.Mounted("/etc/resolv.conf") + mounted, err := mountinfo.Mounted("@TERMUX_PREFIX@/etc/resolv.conf") if err != nil { c.Fatal(err) } if mounted { - icmd.RunCommand("umount", "/etc/resolv.conf").Assert(c, icmd.Success) + icmd.RunCommand("umount", "@TERMUX_PREFIX@/etc/resolv.conf").Assert(c, icmd.Success) } // cleanup defer func() { - if err := os.WriteFile("/etc/resolv.conf", resolvConfSystem, 0644); err != nil { + if err := os.WriteFile("@TERMUX_PREFIX@/etc/resolv.conf", resolvConfSystem, 0644); err != nil { c.Fatal(err) } }() @@ -1467,7 +1467,7 @@ containerID1 := getIDByName(c, "first") // replace resolv.conf with our temporary copy - if err := os.WriteFile("/etc/resolv.conf", tmpResolvConf, 0644); err != nil { + if err := os.WriteFile("@TERMUX_PREFIX@/etc/resolv.conf", tmpResolvConf, 0644); err != nil { c.Fatal(err) } @@ -1481,16 +1481,16 @@ } /* // make a change to resolv.conf (in this case replacing our tmp copy with orig copy) - if err := os.WriteFile("/etc/resolv.conf", resolvConfSystem, 0644); err != nil { + if err := os.WriteFile("@TERMUX_PREFIX@/etc/resolv.conf", resolvConfSystem, 0644); err != nil { c.Fatal(err) } */ // 2. test that a restarting container does not receive resolv.conf updates // if it modified the container copy of the starting point resolv.conf - dockerCmd(c, "run", "--name=second", "busybox", "sh", "-c", "echo 'search mylittlepony.com' >>/etc/resolv.conf") + dockerCmd(c, "run", "--name=second", "busybox", "sh", "-c", "echo 'search mylittlepony.com' >>@TERMUX_PREFIX@/etc/resolv.conf") containerID2 := getIDByName(c, "second") // make a change to resolv.conf (in this case replacing our tmp copy with orig copy) - if err := os.WriteFile("/etc/resolv.conf", resolvConfSystem, 0644); err != nil { + if err := os.WriteFile("@TERMUX_PREFIX@/etc/resolv.conf", resolvConfSystem, 0644); err != nil { c.Fatal(err) } @@ -1508,7 +1508,7 @@ runningContainerID := strings.TrimSpace(out) // replace resolv.conf - if err := os.WriteFile("/etc/resolv.conf", tmpResolvConf, 0644); err != nil { + if err := os.WriteFile("@TERMUX_PREFIX@/etc/resolv.conf", tmpResolvConf, 0644); err != nil { c.Fatal(err) } @@ -1532,7 +1532,7 @@ // host resolv.conf before updating container's resolv.conf copies // replace resolv.conf with a localhost-only nameserver copy - if err = os.WriteFile("/etc/resolv.conf", tmpLocalhostResolvConf, 0644); err != nil { + if err = os.WriteFile("@TERMUX_PREFIX@/etc/resolv.conf", tmpLocalhostResolvConf, 0644); err != nil { c.Fatal(err) } @@ -1551,7 +1551,7 @@ // of containers' resolv.conf. // Restore the original resolv.conf - if err := os.WriteFile("/etc/resolv.conf", resolvConfSystem, 0644); err != nil { + if err := os.WriteFile("@TERMUX_PREFIX@/etc/resolv.conf", resolvConfSystem, 0644); err != nil { c.Fatal(err) } @@ -1560,11 +1560,11 @@ containerID3 := getIDByName(c, "third") // Create a modified resolv.conf.aside and override resolv.conf with it - if err := os.WriteFile("/etc/resolv.conf.aside", tmpResolvConf, 0644); err != nil { + if err := os.WriteFile("@TERMUX_PREFIX@/etc/resolv.conf.aside", tmpResolvConf, 0644); err != nil { c.Fatal(err) } - err = os.Rename("/etc/resolv.conf.aside", "/etc/resolv.conf") + err = os.Rename("@TERMUX_PREFIX@/etc/resolv.conf.aside", "@TERMUX_PREFIX@/etc/resolv.conf") if err != nil { c.Fatal(err) } @@ -1813,7 +1813,7 @@ testRunWriteSpecialFilesAndNotCommit(c, "writehosts", "/etc/hosts") testRunWriteSpecialFilesAndNotCommit(c, "writehostname", "/etc/hostname") - testRunWriteSpecialFilesAndNotCommit(c, "writeresolv", "/etc/resolv.conf") + testRunWriteSpecialFilesAndNotCommit(c, "writeresolv", "@TERMUX_PREFIX@/etc/resolv.conf") } func testRunWriteSpecialFilesAndNotCommit(c *testing.T, name, path string) { @@ -2153,9 +2153,9 @@ // While Windows supports volumes, it does not support --add-host hence // this test is not applicable on Windows. testRequires(c, DaemonIsLinux) - out, _ := dockerCmd(c, "run", "--dns=127.0.0.1", "-v", "/etc", "busybox", "cat", "/etc/resolv.conf") + out, _ := dockerCmd(c, "run", "--dns=127.0.0.1", "-v", "/etc", "busybox", "cat", "@TERMUX_PREFIX@/etc/resolv.conf") if !strings.Contains(out, "nameserver 127.0.0.1") { - c.Fatal("/etc volume mount hides /etc/resolv.conf") + c.Fatal("/etc volume mount hides @TERMUX_PREFIX@/etc/resolv.conf") } out, _ = dockerCmd(c, "run", "-h=test123", "-v", "/etc", "busybox", "cat", "/etc/hostname") @@ -2665,7 +2665,7 @@ if root := os.Getenv("DOCKER_REMAP_ROOT"); root != "" { testPriv = false } - testReadOnlyFile(c, testPriv, "/file", "/etc/hosts", "/etc/resolv.conf", "/etc/hostname") + testReadOnlyFile(c, testPriv, "/file", "/etc/hosts", "@TERMUX_PREFIX@/etc/resolv.conf", "/etc/hostname") } func (s *DockerCLIRunSuite) TestPermissionsPtsReadonlyRootfs(c *testing.T) { @@ -2723,9 +2723,9 @@ // Not applicable on Windows which does not support either --read-only or --dns. testRequires(c, DaemonIsLinux, UserNamespaceROMount) - out, _ := dockerCmd(c, "run", "--read-only", "--dns", "1.1.1.1", "busybox", "/bin/cat", "/etc/resolv.conf") + out, _ := dockerCmd(c, "run", "--read-only", "--dns", "1.1.1.1", "busybox", "/bin/cat", "@TERMUX_PREFIX@/etc/resolv.conf") if !strings.Contains(out, "1.1.1.1") { - c.Fatal("Expected /etc/resolv.conf to be updated even if --read-only enabled and --dns flag used") + c.Fatal("Expected @TERMUX_PREFIX@/etc/resolv.conf to be updated even if --read-only enabled and --dns flag used") } } @@ -3059,7 +3059,7 @@ c.Fatalf("error modifying permissions of %s: %v", filename, err) } - nwfiles := []string{"/etc/resolv.conf", "/etc/hosts", "/etc/hostname"} + nwfiles := []string{"@TERMUX_PREFIX@/etc/resolv.conf", "/etc/hosts", "/etc/hostname"} for i := range nwfiles { actual, _ := dockerCmd(c, "run", "-v", filename+":"+nwfiles[i], "busybox", "cat", nwfiles[i]) @@ -3081,7 +3081,7 @@ c.Fatalf("error modifying permissions of %s: %v", filename, err) } - nwfiles := []string{"/etc/resolv.conf", "/etc/hosts", "/etc/hostname"} + nwfiles := []string{"@TERMUX_PREFIX@/etc/resolv.conf", "/etc/hosts", "/etc/hostname"} for i := range nwfiles { _, exitCode, err := dockerCmdWithError("run", "-v", filename+":"+nwfiles[i]+":ro", "busybox", "touch", nwfiles[i]) @@ -3103,7 +3103,7 @@ c.Fatalf("error modifying permissions of %s: %v", filename, err) } - nwfiles := []string{"/etc/resolv.conf", "/etc/hosts", "/etc/hostname"} + nwfiles := []string{"@TERMUX_PREFIX@/etc/resolv.conf", "/etc/hosts", "/etc/hostname"} for i := range nwfiles { _, exitCode := dockerCmd(c, "run", "-v", filename+":"+nwfiles[i], "--read-only", "busybox", "touch", nwfiles[i]) @@ -3891,30 +3891,30 @@ expectedOutput := "nameserver 127.0.0.1" expectedWarning := "Localhost DNS setting" - cli.DockerCmd(c, "run", "--dns=127.0.0.1", "--net=host", "busybox", "cat", "/etc/resolv.conf").Assert(c, icmd.Expected{ + cli.DockerCmd(c, "run", "--dns=127.0.0.1", "--net=host", "busybox", "cat", "@TERMUX_PREFIX@/etc/resolv.conf").Assert(c, icmd.Expected{ Out: expectedOutput, Err: expectedWarning, }) expectedOutput = "nameserver 1.2.3.4" - cli.DockerCmd(c, "run", "--dns=1.2.3.4", "--net=host", "busybox", "cat", "/etc/resolv.conf").Assert(c, icmd.Expected{ + cli.DockerCmd(c, "run", "--dns=1.2.3.4", "--net=host", "busybox", "cat", "@TERMUX_PREFIX@/etc/resolv.conf").Assert(c, icmd.Expected{ Out: expectedOutput, }) expectedOutput = "search example.com" - cli.DockerCmd(c, "run", "--dns-search=example.com", "--net=host", "busybox", "cat", "/etc/resolv.conf").Assert(c, icmd.Expected{ + cli.DockerCmd(c, "run", "--dns-search=example.com", "--net=host", "busybox", "cat", "@TERMUX_PREFIX@/etc/resolv.conf").Assert(c, icmd.Expected{ Out: expectedOutput, }) expectedOutput = "options timeout:3" - cli.DockerCmd(c, "run", "--dns-opt=timeout:3", "--net=host", "busybox", "cat", "/etc/resolv.conf").Assert(c, icmd.Expected{ + cli.DockerCmd(c, "run", "--dns-opt=timeout:3", "--net=host", "busybox", "cat", "@TERMUX_PREFIX@/etc/resolv.conf").Assert(c, icmd.Expected{ Out: expectedOutput, }) expectedOutput1 := "nameserver 1.2.3.4" expectedOutput2 := "search example.com" expectedOutput3 := "options timeout:3" - out := cli.DockerCmd(c, "run", "--dns=1.2.3.4", "--dns-search=example.com", "--dns-opt=timeout:3", "--net=host", "busybox", "cat", "/etc/resolv.conf").Combined() + out := cli.DockerCmd(c, "run", "--dns=1.2.3.4", "--dns-search=example.com", "--dns-opt=timeout:3", "--net=host", "busybox", "cat", "@TERMUX_PREFIX@/etc/resolv.conf").Combined() assert.Assert(c, strings.Contains(out, expectedOutput1), "Expected '%s', but got %q", expectedOutput1, out) assert.Assert(c, strings.Contains(out, expectedOutput2), "Expected '%s', but got %q", expectedOutput2, out) assert.Assert(c, strings.Contains(out, expectedOutput3), "Expected '%s', but got %q", expectedOutput3, out) diff -ur ../src.orig/moby/integration-cli/docker_cli_swarm_test.go ./moby/integration-cli/docker_cli_swarm_test.go --- ../src.orig/moby/integration-cli/docker_cli_swarm_test.go 2023-10-15 10:26:02.758011348 +0000 +++ ./moby/integration-cli/docker_cli_swarm_test.go 2023-10-15 10:27:36.251675521 +0000 @@ -944,7 +944,7 @@ expectedOutput1 := "nameserver 1.2.3.4" expectedOutput2 := "search example.com" expectedOutput3 := "options timeout:3" - out, err = d.Cmd("exec", id, "cat", "/etc/resolv.conf") + out, err = d.Cmd("exec", id, "cat", "@TERMUX_PREFIX@/etc/resolv.conf") assert.NilError(c, err, out) assert.Assert(c, strings.Contains(out, expectedOutput1), "Expected '%s', but got %q", expectedOutput1, out) assert.Assert(c, strings.Contains(out, expectedOutput2), "Expected '%s', but got %q", expectedOutput2, out) diff -ur ../src.orig/moby/libnetwork/libnetwork_linux_test.go ./moby/libnetwork/libnetwork_linux_test.go --- ../src.orig/moby/libnetwork/libnetwork_linux_test.go 2023-08-29 19:14:17.000000000 +0000 +++ ./moby/libnetwork/libnetwork_linux_test.go 2023-10-15 10:27:36.148341825 +0000 @@ -558,13 +558,13 @@ tmpResolvConf := []byte("search pommesfrites.fr\nnameserver 12.34.56.78\nnameserver 2001:4860:4860::8888\n") expectedResolvConf := []byte("search pommesfrites.fr\nnameserver 127.0.0.11\nnameserver 2001:4860:4860::8888\noptions ndots:0\n") // take a copy of resolv.conf for restoring after test completes - resolvConfSystem, err := os.ReadFile("/etc/resolv.conf") + resolvConfSystem, err := os.ReadFile("@TERMUX_PREFIX@/etc/resolv.conf") if err != nil { t.Fatal(err) } // cleanup defer func() { - if err := os.WriteFile("/etc/resolv.conf", resolvConfSystem, 0644); err != nil { + if err := os.WriteFile("@TERMUX_PREFIX@/etc/resolv.conf", resolvConfSystem, 0644); err != nil { t.Fatal(err) } }() @@ -592,7 +592,7 @@ t.Fatal(err) } - if err := os.WriteFile("/etc/resolv.conf", tmpResolvConf, 0644); err != nil { + if err := os.WriteFile("@TERMUX_PREFIX@/etc/resolv.conf", tmpResolvConf, 0644); err != nil { t.Fatal(err) } @@ -635,13 +635,13 @@ tmpResolvConf := []byte("search localhost.net\nnameserver 127.0.0.1\nnameserver 2001:4860:4860::8888\n") // take a copy of resolv.conf for restoring after test completes - resolvConfSystem, err := os.ReadFile("/etc/resolv.conf") + resolvConfSystem, err := os.ReadFile("@TERMUX_PREFIX@/etc/resolv.conf") if err != nil { t.Fatal(err) } // cleanup defer func() { - if err := os.WriteFile("/etc/resolv.conf", resolvConfSystem, 0644); err != nil { + if err := os.WriteFile("@TERMUX_PREFIX@/etc/resolv.conf", resolvConfSystem, 0644); err != nil { t.Fatal(err) } }() @@ -652,7 +652,7 @@ t.Fatal(err) } - if err := os.WriteFile("/etc/resolv.conf", tmpResolvConf, 0644); err != nil { + if err := os.WriteFile("@TERMUX_PREFIX@/etc/resolv.conf", tmpResolvConf, 0644); err != nil { t.Fatal(err) } @@ -662,7 +662,7 @@ sb, err := controller.NewSandbox(containerID, libnetwork.OptionUseDefaultSandbox(), libnetwork.OptionResolvConfPath(resolvConfPath), - libnetwork.OptionOriginResolvConfPath("/etc/resolv.conf")) + libnetwork.OptionOriginResolvConfPath("@TERMUX_PREFIX@/etc/resolv.conf")) if err != nil { t.Fatal(err) } @@ -713,13 +713,13 @@ tmpResolvConf3 := []byte("search pommesfrites.fr\nnameserver 113.34.56.78\n") // take a copy of resolv.conf for restoring after test completes - resolvConfSystem, err := os.ReadFile("/etc/resolv.conf") + resolvConfSystem, err := os.ReadFile("@TERMUX_PREFIX@/etc/resolv.conf") if err != nil { t.Fatal(err) } // cleanup defer func() { - if err := os.WriteFile("/etc/resolv.conf", resolvConfSystem, 0644); err != nil { + if err := os.WriteFile("@TERMUX_PREFIX@/etc/resolv.conf", resolvConfSystem, 0644); err != nil { t.Fatal(err) } }() @@ -744,7 +744,7 @@ t.Fatal(err) } - if err := os.WriteFile("/etc/resolv.conf", tmpResolvConf1, 0644); err != nil { + if err := os.WriteFile("@TERMUX_PREFIX@/etc/resolv.conf", tmpResolvConf1, 0644); err != nil { t.Fatal(err) } @@ -791,7 +791,7 @@ t.Fatal(err) } - if err := os.WriteFile("/etc/resolv.conf", tmpResolvConf2, 0644); err != nil { + if err := os.WriteFile("@TERMUX_PREFIX@/etc/resolv.conf", tmpResolvConf2, 0644); err != nil { t.Fatal(err) } diff -ur ../src.orig/moby/libnetwork/netutils/utils_linux.go ./moby/libnetwork/netutils/utils_linux.go --- ../src.orig/moby/libnetwork/netutils/utils_linux.go 2023-08-29 19:14:17.000000000 +0000 +++ ./moby/libnetwork/netutils/utils_linux.go 2023-10-15 10:27:36.148341825 +0000 @@ -64,7 +64,7 @@ // overlap with existing interfaces in the system func FindAvailableNetwork(list []*net.IPNet) (*net.IPNet, error) { // We don't check for an error here, because we don't really care if we - // can't read /etc/resolv.conf. So instead we skip the append if resolvConf + // can't read @TERMUX_PREFIX@/etc/resolv.conf. So instead we skip the append if resolvConf // is nil. It either doesn't exist, or we can't read it for some reason. var nameservers []string if rc, err := os.ReadFile(resolvconf.Path()); err == nil { diff -ur ../src.orig/moby/libnetwork/resolvconf/resolvconf.go ./moby/libnetwork/resolvconf/resolvconf.go --- ../src.orig/moby/libnetwork/resolvconf/resolvconf.go 2023-08-29 19:14:17.000000000 +0000 +++ ./moby/libnetwork/resolvconf/resolvconf.go 2023-10-15 10:27:36.141675134 +0000 @@ -1,4 +1,4 @@ -// Package resolvconf provides utility code to query and update DNS configuration in /etc/resolv.conf +// Package resolvconf provides utility code to query and update DNS configuration in @TERMUX_PREFIX@/etc/resolv.conf package resolvconf import ( @@ -13,7 +13,7 @@ const ( // defaultPath is the default path to the resolv.conf that contains information to resolve DNS. See Path(). - defaultPath = "/etc/resolv.conf" + defaultPath = "@TERMUX_PREFIX@/etc/resolv.conf" // alternatePath is a path different from defaultPath, that may be used to resolve DNS. See Path(). alternatePath = "/run/systemd/resolve/resolv.conf" ) @@ -32,15 +32,15 @@ // Path returns the path to the resolv.conf file that libnetwork should use. // -// When /etc/resolv.conf contains 127.0.0.53 as the only nameserver, then +// When @TERMUX_PREFIX@/etc/resolv.conf contains 127.0.0.53 as the only nameserver, then // it is assumed systemd-resolved manages DNS. Because inside the container 127.0.0.53 // is not a valid DNS server, Path() returns /run/systemd/resolve/resolv.conf // which is the resolv.conf that systemd-resolved generates and manages. -// Otherwise Path() returns /etc/resolv.conf. +// Otherwise Path() returns @TERMUX_PREFIX@/etc/resolv.conf. // // Errors are silenced as they will inevitably resurface at future open/read calls. // -// More information at https://www.freedesktop.org/software/systemd/man/systemd-resolved.service.html#/etc/resolv.conf +// More information at https://www.freedesktop.org/software/systemd/man/systemd-resolved.service.html#@TERMUX_PREFIX@/etc/resolv.conf func Path() string { detectSystemdResolvConfOnce.Do(func() { candidateResolvConf, err := os.ReadFile(defaultPath) @@ -91,7 +91,7 @@ Hash []byte } -// Get returns the contents of /etc/resolv.conf and its hash +// Get returns the contents of @TERMUX_PREFIX@/etc/resolv.conf and its hash func Get() (*File, error) { return GetSpecific(Path()) } @@ -146,7 +146,7 @@ return output } -// GetNameservers returns nameservers (if any) listed in /etc/resolv.conf +// GetNameservers returns nameservers (if any) listed in @TERMUX_PREFIX@/etc/resolv.conf func GetNameservers(resolvConf []byte, kind int) []string { var nameservers []string for _, line := range getLines(resolvConf, []byte("#")) { @@ -166,7 +166,7 @@ } // GetNameserversAsCIDR returns nameservers (if any) listed in -// /etc/resolv.conf as CIDR blocks (e.g., "1.2.3.4/32") +// @TERMUX_PREFIX@/etc/resolv.conf as CIDR blocks (e.g., "1.2.3.4/32") // This function's output is intended for net.ParseCIDR func GetNameserversAsCIDR(resolvConf []byte) []string { var nameservers []string @@ -183,7 +183,7 @@ return nameservers } -// GetSearchDomains returns search domains (if any) listed in /etc/resolv.conf +// GetSearchDomains returns search domains (if any) listed in @TERMUX_PREFIX@/etc/resolv.conf // If more than one search line is encountered, only the contents of the last // one is returned. func GetSearchDomains(resolvConf []byte) []string { @@ -198,7 +198,7 @@ return domains } -// GetOptions returns options (if any) listed in /etc/resolv.conf +// GetOptions returns options (if any) listed in @TERMUX_PREFIX@/etc/resolv.conf // If more than one options line is encountered, only the contents of the last // one is returned. func GetOptions(resolvConf []byte) []string { diff -ur ../src.orig/moby/libnetwork/sandbox_dns_unix.go ./moby/libnetwork/sandbox_dns_unix.go --- ../src.orig/moby/libnetwork/sandbox_dns_unix.go 2023-08-29 19:14:17.000000000 +0000 +++ ./moby/libnetwork/sandbox_dns_unix.go 2023-10-15 10:27:36.148341825 +0000 @@ -232,7 +232,7 @@ if !os.IsNotExist(err) { return err } - // No /etc/resolv.conf found: we'll use the default resolvers (Google's Public DNS). + // No @TERMUX_PREFIX@/etc/resolv.conf found: we'll use the default resolvers (Google's Public DNS). logrus.WithField("path", originResolvConfPath).Infof("no resolv.conf found, falling back to defaults") } diff -ur ../src.orig/moby/libnetwork/sandbox.go ./moby/libnetwork/sandbox.go --- ../src.orig/moby/libnetwork/sandbox.go 2023-08-29 19:14:17.000000000 +0000 +++ ./moby/libnetwork/sandbox.go 2023-10-15 10:27:36.145008480 +0000 @@ -79,7 +79,7 @@ IP string } -// These are the container configs used to customize container /etc/resolv.conf file. +// These are the container configs used to customize container @TERMUX_PREFIX@/etc/resolv.conf file. type resolvConfPathConfig struct { resolvConfPath string originResolvConfPath string diff -ur ../src.orig/moby/plugin/v2/plugin_linux.go ./moby/plugin/v2/plugin_linux.go --- ../src.orig/moby/plugin/v2/plugin_linux.go 2023-10-15 10:26:02.764678039 +0000 +++ ./moby/plugin/v2/plugin_linux.go 2023-10-15 10:27:35.285005456 +0000 @@ -50,12 +50,12 @@ }) if p.PluginObj.Config.Network.Type != "" { - // TODO: if net == bridge, use libnetwork controller to create a new plugin-specific bridge, bind mount /etc/hosts and /etc/resolv.conf look at the docker code (allocateNetwork, initialize) + // TODO: if net == bridge, use libnetwork controller to create a new plugin-specific bridge, bind mount /etc/hosts and @TERMUX_PREFIX@/etc/resolv.conf look at the docker code (allocateNetwork, initialize) if p.PluginObj.Config.Network.Type == "host" { oci.RemoveNamespace(&s, specs.LinuxNamespaceType("network")) } etcHosts := "/etc/hosts" - resolvConf := "/etc/resolv.conf" + resolvConf := "@TERMUX_PREFIX@/etc/resolv.conf" mounts = append(mounts, types.PluginMount{ Source: &etcHosts, diff -ur ../src.orig/moby/vendor/github.com/containerd/containerd/oci/spec_opts.go ./moby/vendor/github.com/containerd/containerd/oci/spec_opts.go --- ../src.orig/moby/vendor/github.com/containerd/containerd/oci/spec_opts.go 2023-10-15 10:26:02.768011385 +0000 +++ ./moby/vendor/github.com/containerd/containerd/oci/spec_opts.go 2023-10-15 10:27:35.995007952 +0000 @@ -505,12 +505,12 @@ return nil } -// WithHostResolvconf bind-mounts the host's /etc/resolv.conf into the container as readonly +// WithHostResolvconf bind-mounts the host's @TERMUX_PREFIX@/etc/resolv.conf into the container as readonly func WithHostResolvconf(_ context.Context, _ Client, _ *containers.Container, s *Spec) error { s.Mounts = append(s.Mounts, specs.Mount{ - Destination: "/etc/resolv.conf", + Destination: "@TERMUX_PREFIX@/etc/resolv.conf", Type: "bind", - Source: "/etc/resolv.conf", + Source: "@TERMUX_PREFIX@/etc/resolv.conf", Options: []string{"rbind", "ro"}, }) return nil diff -ur ../src.orig/moby/vendor/github.com/containerd/containerd/rootfs/init_linux.go ./moby/vendor/github.com/containerd/containerd/rootfs/init_linux.go --- ../src.orig/moby/vendor/github.com/containerd/containerd/rootfs/init_linux.go 2023-08-29 19:14:17.000000000 +0000 +++ ./moby/vendor/github.com/containerd/containerd/rootfs/init_linux.go 2023-10-15 10:27:35.961674502 +0000 @@ -114,7 +114,7 @@ createDirectory("/proc", uid, gid), createDirectory("/sys", uid, gid), createDirectory("/etc", uid, gid), - touchFile("/etc/resolv.conf", uid, gid), + touchFile("@TERMUX_PREFIX@/etc/resolv.conf", uid, gid), touchFile("/etc/hosts", uid, gid), touchFile("/etc/hostname", uid, gid), symlink("/proc/mounts", "/etc/mtab"), diff -ur ../src.orig/moby/vendor/github.com/hashicorp/memberlist/config.go ./moby/vendor/github.com/hashicorp/memberlist/config.go --- ../src.orig/moby/vendor/github.com/hashicorp/memberlist/config.go 2023-08-29 19:14:17.000000000 +0000 +++ ./moby/vendor/github.com/hashicorp/memberlist/config.go 2023-10-15 10:27:35.821674009 +0000 @@ -209,7 +209,7 @@ Alive AliveDelegate // DNSConfigPath points to the system's DNS config file, usually located - // at /etc/resolv.conf. It can be overridden via config for easier testing. + // at @TERMUX_PREFIX@/etc/resolv.conf. It can be overridden via config for easier testing. DNSConfigPath string // LogOutput is the writer where logs should be sent. If this is not @@ -317,7 +317,7 @@ SecretKey: nil, Keyring: nil, - DNSConfigPath: "/etc/resolv.conf", + DNSConfigPath: "@TERMUX_PREFIX@/etc/resolv.conf", HandoffQueueDepth: 1024, UDPBufferSize: 1400, diff -ur ../src.orig/moby/vendor/github.com/miekg/dns/clientconfig.go ./moby/vendor/github.com/miekg/dns/clientconfig.go --- ../src.orig/moby/vendor/github.com/miekg/dns/clientconfig.go 2023-08-29 19:14:17.000000000 +0000 +++ ./moby/vendor/github.com/miekg/dns/clientconfig.go 2023-10-15 10:27:36.031674748 +0000 @@ -8,7 +8,7 @@ "strings" ) -// ClientConfig wraps the contents of the /etc/resolv.conf file. +// ClientConfig wraps the contents of the @TERMUX_PREFIX@/etc/resolv.conf file. type ClientConfig struct { Servers []string // servers to use Search []string // suffixes to append to local name diff -ur ../src.orig/moby/vendor/github.com/moby/buildkit/executor/oci/spec_unix.go ./moby/vendor/github.com/moby/buildkit/executor/oci/spec_unix.go --- ../src.orig/moby/vendor/github.com/moby/buildkit/executor/oci/spec_unix.go 2023-08-29 19:14:17.000000000 +0000 +++ ./moby/vendor/github.com/moby/buildkit/executor/oci/spec_unix.go 2023-10-15 10:27:35.918341016 +0000 @@ -25,7 +25,7 @@ return []oci.SpecOpts{ // https://github.com/moby/buildkit/issues/429 withRemovedMount("/run"), - withROBind(resolvConf, "/etc/resolv.conf"), + withROBind(resolvConf, "@TERMUX_PREFIX@/etc/resolv.conf"), withROBind(hostsFile, "/etc/hosts"), withCGroup(), }, nil diff -ur ../src.orig/moby/vendor/github.com/moby/buildkit/executor/stubs.go ./moby/vendor/github.com/moby/buildkit/executor/stubs.go --- ../src.orig/moby/vendor/github.com/moby/buildkit/executor/stubs.go 2023-08-29 19:14:17.000000000 +0000 +++ ./moby/vendor/github.com/moby/buildkit/executor/stubs.go 2023-10-15 10:27:35.918341016 +0000 @@ -12,7 +12,7 @@ ) func MountStubsCleaner(dir string, mounts []Mount, recursive bool) func() { - names := []string{"/etc/resolv.conf", "/etc/hosts"} + names := []string{"@TERMUX_PREFIX@/etc/resolv.conf", "/etc/hosts"} for _, m := range mounts { names = append(names, m.Dest)