# when updating this patch just create it from scratch using this command # # find . -name "*.go" -print | xargs sed -i 's/\/etc\/docker/\/storage\/.kodi\/userdata\/addon_data\/service.system.docker\/config/g' # # diff -Naur a/cmd/dockerd/daemon_unix.go b/cmd/dockerd/daemon_unix.go --- a/cmd/dockerd/daemon_unix.go 2024-09-06 09:57:40.000000000 +0000 +++ b/cmd/dockerd/daemon_unix.go 2024-09-10 06:47:41.951753985 +0000 @@ -23,7 +23,7 @@ func getDefaultDaemonConfigDir() (string, error) { if !honorXDG { - return "/etc/docker", nil + return "/storage/.kodi/userdata/addon_data/service.system.docker/config", nil } // NOTE: CLI uses ~/.docker while the daemon uses ~/.config/docker, because // ~/.docker was not designed to store daemon configurations. diff -Naur a/cmd/dockerd/options.go b/cmd/dockerd/options.go --- a/cmd/dockerd/options.go 2024-09-06 09:57:40.000000000 +0000 +++ b/cmd/dockerd/options.go 2024-09-10 06:47:41.951753985 +0000 @@ -39,7 +39,7 @@ // // - DOCKER_CONFIG only affects TLS certificates, but does not change the // location for the actual *daemon configuration* (which defaults to - // "/etc/docker/daemon.json"). + // "/storage/.kodi/userdata/addon_data/service.system.docker/config/daemon.json"). // - If no value is set, configDir uses "~/.docker/" as default, but does // not take $XDG_CONFIG_HOME into account (it uses pkg/homedir.Get, which // is not XDG_CONFIG_HOME-aware). @@ -52,7 +52,7 @@ // We should: // // - deprecate DOCKER_CONFIG for the daemon - // - decide where the TLS certs should live by default ("/etc/docker/"?) + // - decide where the TLS certs should live by default ("/storage/.kodi/userdata/addon_data/service.system.docker/config/"?) // - look at "when" (and when _not_) XDG_CONFIG_HOME should be used. Its // needed for rootless, but perhaps could be used for non-rootless(?) // - When changing the location for TLS config, (ideally) they should diff -Naur a/integration/plugin/authz/authz_plugin_test.go b/integration/plugin/authz/authz_plugin_test.go --- a/integration/plugin/authz/authz_plugin_test.go 2024-09-06 09:57:40.000000000 +0000 +++ b/integration/plugin/authz/authz_plugin_test.go 2024-09-10 06:47:41.908420295 +0000 @@ -56,15 +56,15 @@ ctrl = &authorizationController{} - err := os.MkdirAll("/etc/docker/plugins", 0o755) + err := os.MkdirAll("/storage/.kodi/userdata/addon_data/service.system.docker/config/plugins", 0o755) assert.NilError(t, err) - fileName := fmt.Sprintf("/etc/docker/plugins/%s.spec", testAuthZPlugin) + fileName := fmt.Sprintf("/storage/.kodi/userdata/addon_data/service.system.docker/config/plugins/%s.spec", testAuthZPlugin) err = os.WriteFile(fileName, []byte(server.URL), 0o644) assert.NilError(t, err) t.Cleanup(func() { - err := os.RemoveAll("/etc/docker/plugins") + err := os.RemoveAll("/storage/.kodi/userdata/addon_data/service.system.docker/config/plugins") assert.NilError(t, err) ctrl = nil }) diff -Naur a/integration/plugin/graphdriver/external_test.go b/integration/plugin/graphdriver/external_test.go --- a/integration/plugin/graphdriver/external_test.go 2024-09-06 09:57:40.000000000 +0000 +++ b/integration/plugin/graphdriver/external_test.go 2024-09-10 06:47:41.908420295 +0000 @@ -88,7 +88,7 @@ sserver.Close() jserver.Close() - err := os.RemoveAll("/etc/docker/plugins") + err := os.RemoveAll("/storage/.kodi/userdata/addon_data/service.system.docker/config/plugins") assert.NilError(t, err) } @@ -352,10 +352,10 @@ respond(w, &graphDriverResponse{Size: size}) }) - err = os.MkdirAll("/etc/docker/plugins", 0o755) + err = os.MkdirAll("/storage/.kodi/userdata/addon_data/service.system.docker/config/plugins", 0o755) assert.NilError(t, err) - specFile := "/etc/docker/plugins/" + name + "." + ext + specFile := "/storage/.kodi/userdata/addon_data/service.system.docker/config/plugins/" + name + "." + ext err = os.WriteFile(specFile, b, 0o644) assert.NilError(t, err) } diff -Naur a/integration-cli/docker_cli_external_volume_driver_test.go b/integration-cli/docker_cli_external_volume_driver_test.go --- a/integration-cli/docker_cli_external_volume_driver_test.go 2024-09-06 09:57:40.000000000 +0000 +++ b/integration-cli/docker_cli_external_volume_driver_test.go 2024-09-10 06:47:42.278423345 +0000 @@ -262,10 +262,10 @@ send(w, `{"Capabilities": { "Scope": "global" }}`) }) - err := os.MkdirAll("/etc/docker/plugins", 0o755) + err := os.MkdirAll("/storage/.kodi/userdata/addon_data/service.system.docker/config/plugins", 0o755) assert.NilError(c, err) - err = os.WriteFile("/etc/docker/plugins/"+name+".spec", []byte(s.Server.URL), 0o644) + err = os.WriteFile("/storage/.kodi/userdata/addon_data/service.system.docker/config/plugins/"+name+".spec", []byte(s.Server.URL), 0o644) assert.NilError(c, err) return s } @@ -273,7 +273,7 @@ func (s *DockerExternalVolumeSuite) TearDownSuite(ctx context.Context, c *testing.T) { s.volumePlugin.Close() - err := os.RemoveAll("/etc/docker/plugins") + err := os.RemoveAll("/storage/.kodi/userdata/addon_data/service.system.docker/config/plugins") assert.NilError(c, err) } @@ -367,7 +367,7 @@ // Make sure a request to use a down driver doesn't block other requests func (s *DockerExternalVolumeSuite) TestExternalVolumeDriverLookupNotBlocked(c *testing.T) { - specPath := "/etc/docker/plugins/down-driver.spec" + specPath := "/storage/.kodi/userdata/addon_data/service.system.docker/config/plugins/down-driver.spec" err := os.WriteFile(specPath, []byte("tcp://127.0.0.7:9999"), 0o644) assert.NilError(c, err) defer os.RemoveAll(specPath) diff -Naur a/integration-cli/docker_cli_network_unix_test.go b/integration-cli/docker_cli_network_unix_test.go --- a/integration-cli/docker_cli_network_unix_test.go 2024-09-06 09:57:40.000000000 +0000 +++ b/integration-cli/docker_cli_network_unix_test.go 2024-09-10 06:47:42.278423345 +0000 @@ -225,14 +225,14 @@ } }) - err := os.MkdirAll("/etc/docker/plugins", 0o755) + err := os.MkdirAll("/storage/.kodi/userdata/addon_data/service.system.docker/config/plugins", 0o755) assert.NilError(t, err) - fileName := fmt.Sprintf("/etc/docker/plugins/%s.spec", netDrv) + fileName := fmt.Sprintf("/storage/.kodi/userdata/addon_data/service.system.docker/config/plugins/%s.spec", netDrv) err = os.WriteFile(fileName, []byte(url), 0o644) assert.NilError(t, err) - ipamFileName := fmt.Sprintf("/etc/docker/plugins/%s.spec", ipamDrv) + ipamFileName := fmt.Sprintf("/storage/.kodi/userdata/addon_data/service.system.docker/config/plugins/%s.spec", ipamDrv) err = os.WriteFile(ipamFileName, []byte(url), 0o644) assert.NilError(t, err) } @@ -244,7 +244,7 @@ s.server.Close() - err := os.RemoveAll("/etc/docker/plugins") + err := os.RemoveAll("/storage/.kodi/userdata/addon_data/service.system.docker/config/plugins") assert.NilError(c, err) } diff -Naur a/integration-cli/docker_cli_swarm_test.go b/integration-cli/docker_cli_swarm_test.go --- a/integration-cli/docker_cli_swarm_test.go 2024-09-06 09:57:40.000000000 +0000 +++ b/integration-cli/docker_cli_swarm_test.go 2024-09-10 06:47:42.281756705 +0000 @@ -823,14 +823,14 @@ } }) - err := os.MkdirAll("/etc/docker/plugins", 0o755) + err := os.MkdirAll("/storage/.kodi/userdata/addon_data/service.system.docker/config/plugins", 0o755) assert.NilError(t, err) - fileName := fmt.Sprintf("/etc/docker/plugins/%s.spec", netDrv) + fileName := fmt.Sprintf("/storage/.kodi/userdata/addon_data/service.system.docker/config/plugins/%s.spec", netDrv) err = os.WriteFile(fileName, []byte(url), 0o644) assert.NilError(t, err) - ipamFileName := fmt.Sprintf("/etc/docker/plugins/%s.spec", ipamDrv) + ipamFileName := fmt.Sprintf("/storage/.kodi/userdata/addon_data/service.system.docker/config/plugins/%s.spec", ipamDrv) err = os.WriteFile(ipamFileName, []byte(url), 0o644) assert.NilError(t, err) } @@ -843,7 +843,7 @@ setupRemoteGlobalNetworkPlugin(c, mux, s.server.URL, globalNetworkPlugin, globalIPAMPlugin) defer func() { s.server.Close() - err := os.RemoveAll("/etc/docker/plugins") + err := os.RemoveAll("/storage/.kodi/userdata/addon_data/service.system.docker/config/plugins") assert.NilError(c, err) }() diff -Naur a/libnetwork/drivers/remote/driver_test.go b/libnetwork/drivers/remote/driver_test.go --- a/libnetwork/drivers/remote/driver_test.go 2024-09-06 09:57:40.000000000 +0000 +++ b/libnetwork/drivers/remote/driver_test.go 2024-09-10 06:47:42.268423262 +0000 @@ -42,7 +42,7 @@ } func setupPlugin(t *testing.T, name string, mux *http.ServeMux) func() { - specPath := "/etc/docker/plugins" + specPath := "/storage/.kodi/userdata/addon_data/service.system.docker/config/plugins" if runtime.GOOS == "windows" { specPath = filepath.Join(os.Getenv("programdata"), "docker", "plugins") } diff -Naur a/libnetwork/ipams/remote/remote_test.go b/libnetwork/ipams/remote/remote_test.go --- a/libnetwork/ipams/remote/remote_test.go 2024-09-06 09:57:40.000000000 +0000 +++ b/libnetwork/ipams/remote/remote_test.go 2024-09-10 06:47:42.261756541 +0000 @@ -38,7 +38,7 @@ } func setupPlugin(t *testing.T, name string, mux *http.ServeMux) func() { - specPath := "/etc/docker/plugins" + specPath := "/storage/.kodi/userdata/addon_data/service.system.docker/config/plugins" if runtime.GOOS == "windows" { specPath = filepath.Join(os.Getenv("programdata"), "docker", "plugins") } diff -Naur a/libnetwork/libnetwork_unix_test.go b/libnetwork/libnetwork_unix_test.go --- a/libnetwork/libnetwork_unix_test.go 2024-09-06 09:57:40.000000000 +0000 +++ b/libnetwork/libnetwork_unix_test.go 2024-09-10 06:47:42.271756623 +0000 @@ -2,4 +2,4 @@ package libnetwork_test -var specPath = "/etc/docker/plugins" +var specPath = "/storage/.kodi/userdata/addon_data/service.system.docker/config/plugins" diff -Naur a/pkg/plugins/discovery.go b/pkg/plugins/discovery.go --- a/pkg/plugins/discovery.go 2024-09-06 09:57:40.000000000 +0000 +++ b/pkg/plugins/discovery.go 2024-09-10 06:47:41.915087017 +0000 @@ -128,12 +128,12 @@ // // On Unix in non-rootless mode: // -// - "/etc/docker/plugins" +// - "/storage/.kodi/userdata/addon_data/service.system.docker/config/plugins" // - "/usr/lib/docker/plugins" // // On Unix in rootless-mode: // -// - "$XDG_CONFIG_HOME/docker/plugins" (or "/etc/docker/plugins" if $XDG_CONFIG_HOME is not set) +// - "$XDG_CONFIG_HOME/docker/plugins" (or "/storage/.kodi/userdata/addon_data/service.system.docker/config/plugins" if $XDG_CONFIG_HOME is not set) // - "$HOME/.local/lib/docker/plugins" (pr "/usr/lib/docker/plugins" if $HOME is set) func SpecsPaths() []string { return specsPaths() diff -Naur a/pkg/plugins/discovery_unix.go b/pkg/plugins/discovery_unix.go --- a/pkg/plugins/discovery_unix.go 2024-09-06 09:57:40.000000000 +0000 +++ b/pkg/plugins/discovery_unix.go 2024-09-10 06:47:41.915087017 +0000 @@ -12,7 +12,7 @@ if configHome, err := homedir.GetConfigHome(); err != nil { return filepath.Join(configHome, "docker/plugins") } - return "/etc/docker/plugins" + return "/storage/.kodi/userdata/addon_data/service.system.docker/config/plugins" } func rootlessLibPluginsPath() string { @@ -27,5 +27,5 @@ if rootless.RunningWithRootlessKit() { return []string{rootlessConfigPluginsPath(), rootlessLibPluginsPath()} } - return []string{"/etc/docker/plugins", "/usr/lib/docker/plugins"} + return []string{"/storage/.kodi/userdata/addon_data/service.system.docker/config/plugins", "/usr/lib/docker/plugins"} } diff -Naur a/pkg/plugins/plugins.go b/pkg/plugins/plugins.go --- a/pkg/plugins/plugins.go 2024-09-06 09:57:40.000000000 +0000 +++ b/pkg/plugins/plugins.go 2024-09-10 06:47:41.915087017 +0000 @@ -4,7 +4,7 @@ // Docker discovers plugins by looking for them in the plugin directory whenever // a user or container tries to use one by name. UNIX domain socket files must // be located under /run/docker/plugins, whereas spec files can be located -// either under /etc/docker/plugins or /usr/lib/docker/plugins. This is handled +// either under /storage/.kodi/userdata/addon_data/service.system.docker/config/plugins or /usr/lib/docker/plugins. This is handled // by the Registry interface, which lets you list all plugins or get a plugin by // its name if it exists. // diff -Naur a/registry/config_unix.go b/registry/config_unix.go --- a/registry/config_unix.go 2024-09-06 09:57:40.000000000 +0000 +++ b/registry/config_unix.go 2024-09-10 06:47:42.275089984 +0000 @@ -5,7 +5,7 @@ // defaultCertsDir is the platform-specific default directory where certificates // are stored. On Linux, it may be overridden through certsDir, for example, when // running in rootless mode. -const defaultCertsDir = "/etc/docker/certs.d" +const defaultCertsDir = "/storage/.kodi/userdata/addon_data/service.system.docker/config/certs.d" // cleanPath is used to ensure that a directory name is valid on the target // platform. It will be passed in something *similar* to a URL such as diff -Naur a/registry/search_endpoint_v1.go b/registry/search_endpoint_v1.go --- a/registry/search_endpoint_v1.go 2024-09-06 09:57:40.000000000 +0000 +++ b/registry/search_endpoint_v1.go 2024-09-10 06:47:42.278423345 +0000 @@ -54,7 +54,7 @@ if endpoint.IsSecure { // If registry is secure and HTTPS failed, show user the error and tell them about `--insecure-registry` // in case that's what they need. DO NOT accept unknown CA certificates, and DO NOT fall back to HTTP. - return nil, invalidParamf("invalid registry endpoint %s: %v. If this private registry supports only HTTP or HTTPS with an unknown CA certificate, please add `--insecure-registry %s` to the daemon's arguments. In the case of HTTPS, if you have access to the registry's CA certificate, no need for the flag; simply place the CA certificate at /etc/docker/certs.d/%s/ca.crt", endpoint, err, endpoint.URL.Host, endpoint.URL.Host) + return nil, invalidParamf("invalid registry endpoint %s: %v. If this private registry supports only HTTP or HTTPS with an unknown CA certificate, please add `--insecure-registry %s` to the daemon's arguments. In the case of HTTPS, if you have access to the registry's CA certificate, no need for the flag; simply place the CA certificate at /storage/.kodi/userdata/addon_data/service.system.docker/config/certs.d/%s/ca.crt", endpoint, err, endpoint.URL.Host, endpoint.URL.Host) } // registry is insecure and HTTPS failed, fallback to HTTP.