From f928c2ef3497cde3a5b5ec37c1302f530610a269 Mon Sep 17 00:00:00 2001 From: Rudi Heitbaum Date: Sun, 5 Feb 2023 09:37:23 +0000 Subject: [PATCH 1/6] libassuan: initial package --- .../addon-depends/podman/libassuan/package.mk | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 packages/addons/addon-depends/podman/libassuan/package.mk diff --git a/packages/addons/addon-depends/podman/libassuan/package.mk b/packages/addons/addon-depends/podman/libassuan/package.mk new file mode 100644 index 0000000000..b9519ddcfe --- /dev/null +++ b/packages/addons/addon-depends/podman/libassuan/package.mk @@ -0,0 +1,19 @@ +# SPDX-License-Identifier: GPL-2.0-only +# Copyright (C) 2023-present Team LibreELEC (https://libreelec.tv) + +PKG_NAME="libassuan" +PKG_VERSION="2.5.7" +PKG_SHA256="0103081ffc27838a2e50479153ca105e873d3d65d8a9593282e9c94c7e6afb76" +PKG_LICENSE="LGPLv2.1+" +PKG_SITE="https://gnupg.org/software/libassuan/index.html" +PKG_URL="https://www.gnupg.org/ftp/gcrypt/libassuan/libassuan-${PKG_VERSION}.tar.bz2" +PKG_DEPENDS_TARGET="toolchain libgpg-error" +PKG_LONGDESC="Libassuan is a small library implementing the so-called Assuan protocol" +PKG_TOOLCHAIN="autotools" +PKG_BUILD_FLAGS="-sysroot" + +PKG_CONFIGURE_OPTS_TARGET="--enable-static \ + --disable-shared \ + --with-gnu-ld \ + --with-pic \ + --with-libgpg-error-prefix=${SYSROOT_PREFIX}/usr" From 8b757f201f381790cf39d1b6dcc98dcf6ffe7d1c Mon Sep 17 00:00:00 2001 From: Rudi Heitbaum Date: Sun, 5 Feb 2023 09:36:58 +0000 Subject: [PATCH 2/6] gpgme: initial package --- licenses/gpgme.txt | 38 +++++++++++++++++++ .../addon-depends/podman/gpgme/package.mk | 30 +++++++++++++++ 2 files changed, 68 insertions(+) create mode 100644 licenses/gpgme.txt create mode 100644 packages/addons/addon-depends/podman/gpgme/package.mk diff --git a/licenses/gpgme.txt b/licenses/gpgme.txt new file mode 100644 index 0000000000..acfd614714 --- /dev/null +++ b/licenses/gpgme.txt @@ -0,0 +1,38 @@ +Additional license notices for GPGME. -*- org -*- + +This file contains the copying permission notices for various files in +the GPGME distribution which are not covered by the GNU Lesser +General Public License (LGPL) or the GNU General Public License (GPL). + +These notices all require that a copy of the notice be included +in the accompanying documentation and be distributed with binary +distributions of the code, so be sure to include this file along +with any binary distributions derived from the GNU C Library. + +* MIT License + + For files: + - cJSON.c, cJSON.h + +#+begin_quote + Copyright (c) 2009 Dave Gamble + + Permission is hereby granted, free of charge, to any person obtaining + a opy of this software and associated documentation files (the + "Software"), to eal in the Software without restriction, including + without limitation the ights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions: + + The above copyright notice and this permission notice shall be + included in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE + LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + OF CONTRACT, TORT OR OTHERWISE, ARISING ROM, OUT OF OR IN CONNECTION + WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +#+end_quote diff --git a/packages/addons/addon-depends/podman/gpgme/package.mk b/packages/addons/addon-depends/podman/gpgme/package.mk new file mode 100644 index 0000000000..416b58a8d6 --- /dev/null +++ b/packages/addons/addon-depends/podman/gpgme/package.mk @@ -0,0 +1,30 @@ +# SPDX-License-Identifier: GPL-2.0-only +# Copyright (C) 2023-present Team LibreELEC (https://libreelec.tv) + +PKG_NAME="gpgme" +PKG_VERSION="1.23.2" +PKG_SHA256="9499e8b1f33cccb6815527a1bc16049d35a6198a6c5fae0185f2bd561bce5224" +PKG_LICENSE="gpgme" +PKG_SITE="https://gnupg.org/software/gpgme/index.html" +PKG_URL="https://gnupg.org/ftp/gcrypt/gpgme/gpgme-${PKG_VERSION}.tar.bz2" +PKG_DEPENDS_TARGET="toolchain libassuan libgpg-error" +PKG_LONGDESC="GnuPG Made Easy (GPGME) is a library designed to make access to GnuPG easier for applications" +PKG_TOOLCHAIN="autotools" +PKG_BUILD_FLAGS="-sysroot" + +PKG_CONFIGURE_OPTS_TARGET="--enable-languages=cl \ + --disable-static \ + --enable-shared \ + --disable-glibtest \ + --disable-gpgconf-test \ + --disable-gpg-test \ + --disable-gpgsm-test \ + --disable-g13-test \ + --with-pic \ + --with-libgpg-error-prefix=${SYSROOT_PREFIX}/usr \ + --with-libassuan-prefix=$(get_install_dir libassuan)/usr" + +pre_configure_target() { + CFLAGS="${CFLAGS} -I$(get_install_dir libassuan)/usr/include" + LDFLAGS="${LDFLAGS} -L$(get_install_dir libassuan)/usr/lib" +} From c9683fa5240594eab7d2f4a685b469ca5ad9e358 Mon Sep 17 00:00:00 2001 From: Rudi Heitbaum Date: Sun, 5 Feb 2023 14:08:47 +0000 Subject: [PATCH 3/6] netavark: initial package --- .../addons/addon-depends/podman/netavark/package.mk | 11 +++++++++++ .../netavark/patches/netavark-0001-no-docs.patch | 10 ++++++++++ 2 files changed, 21 insertions(+) create mode 100644 packages/addons/addon-depends/podman/netavark/package.mk create mode 100644 packages/addons/addon-depends/podman/netavark/patches/netavark-0001-no-docs.patch diff --git a/packages/addons/addon-depends/podman/netavark/package.mk b/packages/addons/addon-depends/podman/netavark/package.mk new file mode 100644 index 0000000000..3f3bc30ca4 --- /dev/null +++ b/packages/addons/addon-depends/podman/netavark/package.mk @@ -0,0 +1,11 @@ +# SPDX-License-Identifier: GPL-2.0-only +# Copyright (C) 2023-present Team LibreELEC (https://libreelec.tv) + +PKG_NAME="netavark" +PKG_VERSION="1.10.3" +PKG_SHA256="fdc3010cb221f0fcef0302f57ef6f4d9168a61f9606238a3e1ed4d2e348257b7" +PKG_LICENSE="Apache-2.0" +PKG_SITE="https://github.com/containers/netavark" +PKG_URL="https://github.com/containers/netavark/archive/v${PKG_VERSION}.tar.gz" +PKG_DEPENDS_TARGET="toolchain cargo:host protobuf:host" +PKG_LONGDESC="Container network stack" diff --git a/packages/addons/addon-depends/podman/netavark/patches/netavark-0001-no-docs.patch b/packages/addons/addon-depends/podman/netavark/patches/netavark-0001-no-docs.patch new file mode 100644 index 0000000000..4257c35490 --- /dev/null +++ b/packages/addons/addon-depends/podman/netavark/patches/netavark-0001-no-docs.patch @@ -0,0 +1,10 @@ +--- a/Makefile 2023-02-05 14:03:46.260848926 +0000 ++++ b/Makefile 2023-02-05 14:03:51.737539552 +0000 +@@ -73,7 +73,6 @@ + .PHONY: install + install: $(NV_UNIT_FILES) + install ${SELINUXOPT} -D -m0755 bin/netavark $(DESTDIR)/$(LIBEXECPODMAN)/netavark +- $(MAKE) -C docs install + install ${SELINUXOPT} -m 755 -d ${DESTDIR}${SYSTEMDDIR} + install ${SELINUXOPT} -m 644 contrib/systemd/system/netavark-dhcp-proxy.socket ${DESTDIR}${SYSTEMDDIR}/netavark-dhcp-proxy.socket + install ${SELINUXOPT} -m 644 contrib/systemd/system/netavark-dhcp-proxy.service ${DESTDIR}${SYSTEMDDIR}/netavark-dhcp-proxy.service From 74ad82b4a7513be84a8901db4d9c54ae1fbc5e07 Mon Sep 17 00:00:00 2001 From: Rudi Heitbaum Date: Sun, 5 Feb 2023 10:55:13 +0000 Subject: [PATCH 4/6] conmon: initial package --- .../addon-depends/podman/conmon/package.mk | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 packages/addons/addon-depends/podman/conmon/package.mk diff --git a/packages/addons/addon-depends/podman/conmon/package.mk b/packages/addons/addon-depends/podman/conmon/package.mk new file mode 100644 index 0000000000..75574d8816 --- /dev/null +++ b/packages/addons/addon-depends/podman/conmon/package.mk @@ -0,0 +1,19 @@ +# SPDX-License-Identifier: GPL-2.0-only +# Copyright (C) 2023-present Team LibreELEC (https://libreelec.tv) + +PKG_NAME="conmon" +PKG_VERSION="2.1.10" +PKG_SHA256="455fabcbd4a5a5dc5e05374a71b62dc0b08ee865c2ba398e9dc9acac1ea1836a" +PKG_LICENSE="Apache-2.0" +PKG_SITE="https://github.com/containers/conmon" +PKG_URL="https://github.com/containers/conmon/archive/v${PKG_VERSION}.tar.gz" +PKG_DEPENDS_TARGET="toolchain glib libseccomp systemd" +PKG_LONGDESC="An OCI container runtime monitor" + +# Git commit of the matching release https://github.com/containers/conmon +export PKG_GIT_COMMIT="2dcd736e46ded79a53339462bc251694b150f870" + +pre_configure_target() { + export PKG_CONFIG_PATH="$(get_install_dir libseccomp)/usr/lib/pkgconfig:${PKG_CONFIG_PATH}" + export GIT_COMMIT=${PKG_GIT_COMMIT} +} From 79562db355cfedba14af84aa204f16015dbbb403 Mon Sep 17 00:00:00 2001 From: Rudi Heitbaum Date: Sun, 5 Feb 2023 09:36:17 +0000 Subject: [PATCH 5/6] podman-bin: initial package --- .../podman/podman-bin/makepatch.sh | 14 + .../podman/podman-bin/package.mk | 43 + .../patches/podman-0001-path-changes.patch | 42 + .../patches/podman-0002-path-changes.patch | 997 ++++++++++++++++++ 4 files changed, 1096 insertions(+) create mode 100755 packages/addons/addon-depends/podman/podman-bin/makepatch.sh create mode 100644 packages/addons/addon-depends/podman/podman-bin/package.mk create mode 100644 packages/addons/addon-depends/podman/podman-bin/patches/podman-0001-path-changes.patch create mode 100644 packages/addons/addon-depends/podman/podman-bin/patches/podman-0002-path-changes.patch diff --git a/packages/addons/addon-depends/podman/podman-bin/makepatch.sh b/packages/addons/addon-depends/podman/podman-bin/makepatch.sh new file mode 100755 index 0000000000..dab746886e --- /dev/null +++ b/packages/addons/addon-depends/podman/podman-bin/makepatch.sh @@ -0,0 +1,14 @@ +tar xvf ../sources/podman-bin/podman-bin-5.0.0.tar.gz +mv podman-5.0.0 a +tar xvf ../sources/podman-bin/podman-bin-5.0.0.tar.gz +mv podman-5.0.0 b + +cd b +find . -name "*.go" -print | \ + xargs sed -i \ + -e '/^\W*\/\// ! s#/etc/containers#/storage/.kodi/addons/service.system.podman/etc/containers#g' \ + -e '/^\W*\/\// ! s#/usr/share/containers#/storage/.kodi/userdata/addon_data/service.system.podman/podman/etc/containers#g' \ + -e '/^\W*\/\// ! s#/var/lib/containers#/storage/.kodi/userdata/addon_data/service.system.podman/podman#g' + +cd .. +diff -Nur a b > podman-0002-path-changes.patch diff --git a/packages/addons/addon-depends/podman/podman-bin/package.mk b/packages/addons/addon-depends/podman/podman-bin/package.mk new file mode 100644 index 0000000000..696aff8da2 --- /dev/null +++ b/packages/addons/addon-depends/podman/podman-bin/package.mk @@ -0,0 +1,43 @@ +# SPDX-License-Identifier: GPL-2.0-only +# Copyright (C) 2023-present Team LibreELEC (https://libreelec.tv) + +PKG_NAME="podman-bin" +PKG_VERSION="5.0.0" +PKG_SHA256="818db636955a1eeec4dcb586d18783ab86a8afd07e3f4adaf25920b3697316c9" +PKG_LICENSE="Apache-2.0" +PKG_SITE="https://podman.io/" +PKG_URL="https://github.com/containers/podman/archive/v${PKG_VERSION}.tar.gz" +PKG_DEPENDS_TARGET="toolchain go:host gpgme libassuan libseccomp systemd" +PKG_LONGDESC="Podman: A tool for managing OCI containers and pods." +PKG_TOOLCHAIN="manual" + +# Git commit of the matching release https://github.com/containers/podman +export PKG_GIT_COMMIT="cfc5b8e0fd4c4a305d33f28d9bf69febd886ed22" + +PKG_PODMAN_BUILDTAGS="exclude_graphdriver_devicemapper \ + exclude_graphdriver_btrfs \ + seccomp \ + systemd" + +configure_target() { + export PKG_CONFIG_PATH="$(get_install_dir libassuan)/usr/lib/pkgconfig:$(get_install_dir gpgme)/usr/lib/pkgconfig:$(get_install_dir libseccomp)/usr/lib/pkgconfig:${PKG_CONFIG_PATH}" + + go_configure + + # used for podman commit + export GIT_COMMIT=${PKG_GIT_COMMIT} +} + +make_target() { + make BUILDTAGS="${PKG_PODMAN_BUILDTAGS}" \ + CGO_CPPFLAGS="-I$(get_install_dir gpgme)/usr/include" \ + GO="${GOLANG}" \ + PREFIX=/storage/.kodi/addons/service.system.podman \ + HELPER_BINARIES_DIR=/storage/.kodi/addons/service.system.podman/bin \ + EXTRA_LDFLAGS="-X github.com/containers/image/v5/sysregistries.systemRegistriesConfPath=/storage/.kodi/userdata/addon_data/service.system.podman/podman/etc/containers/registries.conf -X github.com/containers/image/v5/sysregistries.systemRegistriesConfDirectoryPath=/storage/.kodi/userdata/addon_data/service.system.podman/podman/etc/containers/registries.conf.d -X github.com/containers/image/v5/signature.systemDefaultPolicyPath=/storage/.kodi/addons/service.system.podman/etc/containers/policy.json -extldflags=-L$(get_install_dir gpgme)/usr/lib" \ + binaries +} + +makeinstall_target() { + : +} diff --git a/packages/addons/addon-depends/podman/podman-bin/patches/podman-0001-path-changes.patch b/packages/addons/addon-depends/podman/podman-bin/patches/podman-0001-path-changes.patch new file mode 100644 index 0000000000..5f037ba540 --- /dev/null +++ b/packages/addons/addon-depends/podman/podman-bin/patches/podman-0001-path-changes.patch @@ -0,0 +1,42 @@ +diff --git a/pkg/rootless/rootless_linux.c b/pkg/rootless/rootless_linux.c +index 7e8b3f78a..1a27842fd 100644 +--- a/pkg/rootless/rootless_linux.c ++++ b/pkg/rootless/rootless_linux.c +@@ -20,8 +20,8 @@ + #include + #include + +-#define ETC_PREEXEC_HOOKS "/etc/containers/pre-exec-hooks" +-#define LIBEXECPODMAN "/usr/libexec/podman" ++#define ETC_PREEXEC_HOOKS "/storage/.kodi/addons/service.system.podman/etc/containers/pre-exec-hooks" ++#define LIBEXECPODMAN "/storage/.kodi/addons/service.system.podman/libexec" + + #ifndef TEMP_FAILURE_RETRY + #define TEMP_FAILURE_RETRY(expression) \ +diff --git a/vendor/github.com/containers/common/pkg/config/config_linux.go b/vendor/github.com/containers/common/pkg/config/config_linux.go +index 4ce5d0320..531de9ceb 100644 +--- a/vendor/github.com/containers/common/pkg/config/config_linux.go ++++ b/vendor/github.com/containers/common/pkg/config/config_linux.go +@@ -6,10 +6,10 @@ import ( + + const ( + // OverrideContainersConfig holds the default config path overridden by the root user +- OverrideContainersConfig = "/etc/" + _configPath ++ OverrideContainersConfig = "/storage/.kodi/addons/service.system.podman/etc/" + _configPath + + // DefaultContainersConfig holds the default containers config path +- DefaultContainersConfig = "/usr/share/" + _configPath ++ DefaultContainersConfig = "/storage/.kodi/userdata/addon_data/service.system.podman/podman/etc/" + _configPath + + // DefaultSignaturePolicyPath is the default value for the + // policy.json file. +@@ -21,8 +21,5 @@ func ifRootlessConfigPath() (string, error) { + } + + var defaultHelperBinariesDir = []string{ +- "/usr/local/libexec/podman", +- "/usr/local/lib/podman", +- "/usr/libexec/podman", +- "/usr/lib/podman", ++ "/storage/.kodi/addons/service.system.podman/bin", + } diff --git a/packages/addons/addon-depends/podman/podman-bin/patches/podman-0002-path-changes.patch b/packages/addons/addon-depends/podman/podman-bin/patches/podman-0002-path-changes.patch new file mode 100644 index 0000000000..89eefcd57b --- /dev/null +++ b/packages/addons/addon-depends/podman/podman-bin/patches/podman-0002-path-changes.patch @@ -0,0 +1,997 @@ +diff -Nur a/pkg/api/handlers/libpod/swagger_spec.go b/pkg/api/handlers/libpod/swagger_spec.go +--- a/pkg/api/handlers/libpod/swagger_spec.go 2024-03-19 09:47:46.000000000 +0000 ++++ b/pkg/api/handlers/libpod/swagger_spec.go 2024-03-20 11:56:21.227611985 +0000 +@@ -10,7 +10,7 @@ + ) + + // DefaultPodmanSwaggerSpec provides the default path to the podman swagger spec file +-const DefaultPodmanSwaggerSpec = "/usr/share/containers/podman/swagger.yaml" ++const DefaultPodmanSwaggerSpec = "/storage/.kodi/userdata/addon_data/service.system.podman/podman/etc/containers/podman/swagger.yaml" + + func ServeSwagger(w http.ResponseWriter, r *http.Request) { + path := DefaultPodmanSwaggerSpec +diff -Nur a/pkg/machine/define/config.go b/pkg/machine/define/config.go +--- a/pkg/machine/define/config.go 2024-03-19 09:47:46.000000000 +0000 ++++ b/pkg/machine/define/config.go 2024-03-20 11:56:21.260945621 +0000 +@@ -2,7 +2,7 @@ + + import "os" + +-const UserCertsTargetPath = "/etc/containers/certs.d" ++const UserCertsTargetPath = "/storage/.kodi/addons/service.system.podman/etc/containers/certs.d" + const DefaultIdentityName = "machine" + + var ( +diff -Nur a/pkg/machine/ignition/ignition.go b/pkg/machine/ignition/ignition.go +--- a/pkg/machine/ignition/ignition.go 2024-03-19 09:47:46.000000000 +0000 ++++ b/pkg/machine/ignition/ignition.go 2024-03-20 11:56:21.270945712 +0000 +@@ -365,7 +365,7 @@ + files = append(files, File{ + Node: Node{ + Group: GetNodeGrp("root"), +- Path: "/etc/containers/podman-machine", ++ Path: "/storage/.kodi/addons/service.system.podman/etc/containers/podman-machine", + User: GetNodeUsr("root"), + }, + FileEmbedded1: FileEmbedded1{ +diff -Nur a/pkg/machine/wsl/machine.go b/pkg/machine/wsl/machine.go +--- a/pkg/machine/wsl/machine.go 2024-03-19 09:47:46.000000000 +0000 ++++ b/pkg/machine/wsl/machine.go 2024-03-20 11:56:21.267612349 +0000 +@@ -179,7 +179,7 @@ + return fmt.Errorf("could not configure systemd settings for guest OS: %w", err) + } + +- if err := wslPipe(containersConf, dist, "sh", "-c", "cat > /etc/containers/containers.conf"); err != nil { ++ if err := wslPipe(containersConf, dist, "sh", "-c", "cat > /storage/.kodi/addons/service.system.podman/etc/containers/containers.conf"); err != nil { + return fmt.Errorf("could not create containers.conf for guest OS: %w", err) + } + +@@ -191,7 +191,7 @@ + return err + } + +- if err := wslInvoke(dist, "sh", "-c", "echo wsl > /etc/containers/podman-machine"); err != nil { ++ if err := wslInvoke(dist, "sh", "-c", "echo wsl > /storage/.kodi/addons/service.system.podman/etc/containers/podman-machine"); err != nil { + return fmt.Errorf("could not create podman-machine file for guest OS: %w", err) + } + +@@ -264,7 +264,7 @@ + } + + func configureRegistries(dist string) error { +- cmd := "cat > /etc/containers/registries.conf.d/999-podman-machine.conf" ++ cmd := "cat > /storage/.kodi/addons/service.system.podman/etc/containers/registries.conf.d/999-podman-machine.conf" + if err := wslPipe(registriesConf, dist, "sh", "-c", cmd); err != nil { + return fmt.Errorf("could not configure registries on guest OS: %w", err) + } +diff -Nur a/pkg/systemd/generate/containers_test.go b/pkg/systemd/generate/containers_test.go +--- a/pkg/systemd/generate/containers_test.go 2024-03-19 09:47:46.000000000 +0000 ++++ b/pkg/systemd/generate/containers_test.go 2024-03-20 11:56:21.234278713 +0000 +@@ -1045,7 +1045,7 @@ + StopTimeout: 22, + PodmanVersion: "CI", + EnvVariable: define.EnvVariable, +- GraphRoot: "/var/lib/containers/storage", ++ GraphRoot: "/storage/.kodi/userdata/addon_data/service.system.podman/podman/storage", + RunRoot: "/var/run/containers/storage", + }, + goodID, +@@ -1063,7 +1063,7 @@ + StopTimeout: 22, + PodmanVersion: "CI", + EnvVariable: define.EnvVariable, +- GraphRoot: "/var/lib/containers/storage", ++ GraphRoot: "/storage/.kodi/userdata/addon_data/service.system.podman/podman/storage", + RunRoot: "/var/run/containers/storage", + }, + goodIDNoHeaderInfo, +@@ -1081,7 +1081,7 @@ + StopTimeout: 10, + PodmanVersion: "CI", + EnvVariable: define.EnvVariable, +- GraphRoot: "/var/lib/containers/storage", ++ GraphRoot: "/storage/.kodi/userdata/addon_data/service.system.podman/podman/storage", + RunRoot: "/var/run/containers/storage", + }, + goodName, +@@ -1100,7 +1100,7 @@ + PodmanVersion: "CI", + Wants: []string{"a.service", "b.service", "c.target"}, + EnvVariable: define.EnvVariable, +- GraphRoot: "/var/lib/containers/storage", ++ GraphRoot: "/storage/.kodi/userdata/addon_data/service.system.podman/podman/storage", + RunRoot: "/var/run/containers/storage", + }, + goodNameCustomWants, +@@ -1119,7 +1119,7 @@ + PodmanVersion: "CI", + After: []string{"a.service", "b.service", "c.target"}, + EnvVariable: define.EnvVariable, +- GraphRoot: "/var/lib/containers/storage", ++ GraphRoot: "/storage/.kodi/userdata/addon_data/service.system.podman/podman/storage", + RunRoot: "/var/run/containers/storage", + }, + goodNameCustomAfter, +@@ -1138,7 +1138,7 @@ + PodmanVersion: "CI", + Requires: []string{"a.service", "b.service", "c.target"}, + EnvVariable: define.EnvVariable, +- GraphRoot: "/var/lib/containers/storage", ++ GraphRoot: "/storage/.kodi/userdata/addon_data/service.system.podman/podman/storage", + RunRoot: "/var/run/containers/storage", + }, + goodNameCustomRequires, +@@ -1159,7 +1159,7 @@ + After: []string{"a.service", "b.service", "c.target"}, + Requires: []string{"a.service", "b.service", "c.target"}, + EnvVariable: define.EnvVariable, +- GraphRoot: "/var/lib/containers/storage", ++ GraphRoot: "/storage/.kodi/userdata/addon_data/service.system.podman/podman/storage", + RunRoot: "/var/run/containers/storage", + }, + goodNameCustomDependencies, +@@ -1178,7 +1178,7 @@ + PodmanVersion: "CI", + BoundToServices: []string{"pod", "a", "b", "c"}, + EnvVariable: define.EnvVariable, +- GraphRoot: "/var/lib/containers/storage", ++ GraphRoot: "/storage/.kodi/userdata/addon_data/service.system.podman/podman/storage", + RunRoot: "/var/run/containers/storage", + }, + goodNameBoundTo, +@@ -1197,7 +1197,7 @@ + PodmanVersion: "CI", + CreateCommand: []string{"I'll get stripped", "container", "run", "--name", "jadda-jadda", "--hostname", "hello-world", "awesome-image:latest", "command", "arg1", "...", "argN", "foo=arg \"with \" space"}, + EnvVariable: define.EnvVariable, +- GraphRoot: "/var/lib/containers/storage", ++ GraphRoot: "/storage/.kodi/userdata/addon_data/service.system.podman/podman/storage", + RunRoot: "/var/run/containers/storage", + }, + goodWithNameAndGeneric, +@@ -1216,7 +1216,7 @@ + PodmanVersion: "CI", + CreateCommand: []string{"I'll get stripped", "container", "run", "--sdnotify=container", "--name", "jadda-jadda", "--hostname", "hello-world", "awesome-image:latest", "command", "arg1", "...", "argN", "foo=arg \"with \" space"}, + EnvVariable: define.EnvVariable, +- GraphRoot: "/var/lib/containers/storage", ++ GraphRoot: "/storage/.kodi/userdata/addon_data/service.system.podman/podman/storage", + RunRoot: "/var/run/containers/storage", + }, + goodWithNameAndSdnotify, +@@ -1235,7 +1235,7 @@ + PodmanVersion: "CI", + CreateCommand: []string{"I'll get stripped", "container", "run", "--sdnotify", "container", "--name", "jadda-jadda", "--hostname", "hello-world", "awesome-image:latest", "command", "arg1", "...", "argN", "foo=arg \"with \" space"}, + EnvVariable: define.EnvVariable, +- GraphRoot: "/var/lib/containers/storage", ++ GraphRoot: "/storage/.kodi/userdata/addon_data/service.system.podman/podman/storage", + RunRoot: "/var/run/containers/storage", + }, + strings.ReplaceAll(goodWithNameAndSdnotify, "--sdnotify=container", "--sdnotify container"), +@@ -1254,7 +1254,7 @@ + PodmanVersion: "CI", + CreateCommand: []string{"I'll get stripped", "container", "run", "--sdnotify=ignore", "--name", "jadda-jadda", "--hostname", "hello-world", "awesome-image:latest", "command", "arg1", "...", "argN", "foo=arg \"with \" space"}, + EnvVariable: define.EnvVariable, +- GraphRoot: "/var/lib/containers/storage", ++ GraphRoot: "/storage/.kodi/userdata/addon_data/service.system.podman/podman/storage", + RunRoot: "/var/run/containers/storage", + }, + goodWithNameAndSdnotifyIgnore, +@@ -1273,7 +1273,7 @@ + PodmanVersion: "CI", + CreateCommand: []string{"I'll get stripped", "container", "run", "--sdnotify", "ignore", "--name", "jadda-jadda", "--hostname", "hello-world", "awesome-image:latest", "command", "arg1", "...", "argN", "foo=arg \"with \" space"}, + EnvVariable: define.EnvVariable, +- GraphRoot: "/var/lib/containers/storage", ++ GraphRoot: "/storage/.kodi/userdata/addon_data/service.system.podman/podman/storage", + RunRoot: "/var/run/containers/storage", + }, + goodWithNameAndSdnotifyIgnore, +@@ -1292,7 +1292,7 @@ + PodmanVersion: "CI", + CreateCommand: []string{"I'll get stripped", "run", "-d", "--name", "jadda-jadda", "--hostname", "hello-world", "awesome-image:latest", "command", "arg1", "...", "argN"}, + EnvVariable: define.EnvVariable, +- GraphRoot: "/var/lib/containers/storage", ++ GraphRoot: "/storage/.kodi/userdata/addon_data/service.system.podman/podman/storage", + RunRoot: "/var/run/containers/storage", + }, + goodWithExplicitShortDetachParam, +@@ -1311,7 +1311,7 @@ + PodmanVersion: "CI", + CreateCommand: []string{"I'll get stripped", "run", "-d", "--name", "jadda-jadda", "--hostname", "hello-world", "awesome-image:latest", "command", "arg1", "...", "argN"}, + EnvVariable: define.EnvVariable, +- GraphRoot: "/var/lib/containers/storage", ++ GraphRoot: "/storage/.kodi/userdata/addon_data/service.system.podman/podman/storage", + RunRoot: "/var/run/containers/storage", + Pod: &podInfo{ + PodIDFile: "%t/pod-foobar.pod-id-file", +@@ -1333,7 +1333,7 @@ + PodmanVersion: "CI", + CreateCommand: []string{"I'll get stripped", "run", "--detach", "--name", "jadda-jadda", "--hostname", "hello-world", "awesome-image:latest", "command", "arg1", "...", "argN"}, + EnvVariable: define.EnvVariable, +- GraphRoot: "/var/lib/containers/storage", ++ GraphRoot: "/storage/.kodi/userdata/addon_data/service.system.podman/podman/storage", + RunRoot: "/var/run/containers/storage", + }, + goodNameNewDetach, +@@ -1352,7 +1352,7 @@ + PodmanVersion: "CI", + CreateCommand: []string{"I'll get stripped", "run", "awesome-image:latest"}, + EnvVariable: define.EnvVariable, +- GraphRoot: "/var/lib/containers/storage", ++ GraphRoot: "/storage/.kodi/userdata/addon_data/service.system.podman/podman/storage", + RunRoot: "/var/run/containers/storage", + }, + goodIDNew, +@@ -1371,7 +1371,7 @@ + PodmanVersion: "CI", + CreateCommand: []string{"I'll get stripped", "run", "--detach=true", "awesome-image:latest"}, + EnvVariable: define.EnvVariable, +- GraphRoot: "/var/lib/containers/storage", ++ GraphRoot: "/storage/.kodi/userdata/addon_data/service.system.podman/podman/storage", + RunRoot: "/var/run/containers/storage", + }, + genGoodNewDetach("--detach=true"), +@@ -1390,7 +1390,7 @@ + PodmanVersion: "CI", + CreateCommand: []string{"I'll get stripped", "run", "--detach=false", "awesome-image:latest"}, + EnvVariable: define.EnvVariable, +- GraphRoot: "/var/lib/containers/storage", ++ GraphRoot: "/storage/.kodi/userdata/addon_data/service.system.podman/podman/storage", + RunRoot: "/var/run/containers/storage", + }, + genGoodNewDetach("-d"), +@@ -1409,7 +1409,7 @@ + PodmanVersion: "CI", + CreateCommand: []string{"I'll get stripped", "run", "--name", "test", "-p", "80:80", "--detach=false", "awesome-image:latest", "somecmd", "--detach=false"}, + EnvVariable: define.EnvVariable, +- GraphRoot: "/var/lib/containers/storage", ++ GraphRoot: "/storage/.kodi/userdata/addon_data/service.system.podman/podman/storage", + RunRoot: "/var/run/containers/storage", + }, + goodNameNewDetachFalseWithCmd, +@@ -1428,7 +1428,7 @@ + PodmanVersion: "CI", + CreateCommand: []string{"I'll get stripped", "run", "--name", "test", "-p", "80:80", "--detach=false", "--detach=false", "awesome-image:latest", "somecmd", "--detach=false"}, + EnvVariable: define.EnvVariable, +- GraphRoot: "/var/lib/containers/storage", ++ GraphRoot: "/storage/.kodi/userdata/addon_data/service.system.podman/podman/storage", + RunRoot: "/var/run/containers/storage", + }, + goodNameNewDetachFalseWithCmd, +@@ -1447,7 +1447,7 @@ + PodmanVersion: "CI", + CreateCommand: []string{"I'll get stripped", "run", "-dti", "awesome-image:latest"}, + EnvVariable: define.EnvVariable, +- GraphRoot: "/var/lib/containers/storage", ++ GraphRoot: "/storage/.kodi/userdata/addon_data/service.system.podman/podman/storage", + RunRoot: "/var/run/containers/storage", + }, + genGoodNewDetach("-dti"), +@@ -1466,7 +1466,7 @@ + PodmanVersion: "CI", + CreateCommand: []string{"I'll get stripped", "--events-backend", "none", "--runroot", "/root", "run", "awesome-image:latest"}, + EnvVariable: define.EnvVariable, +- GraphRoot: "/var/lib/containers/storage", ++ GraphRoot: "/storage/.kodi/userdata/addon_data/service.system.podman/podman/storage", + RunRoot: "/var/run/containers/storage", + }, + goodNewRootFlags, +@@ -1485,7 +1485,7 @@ + PodmanVersion: "CI", + CreateCommand: []string{"I'll get stripped", "container", "create", "awesome-image:latest"}, + EnvVariable: define.EnvVariable, +- GraphRoot: "/var/lib/containers/storage", ++ GraphRoot: "/storage/.kodi/userdata/addon_data/service.system.podman/podman/storage", + RunRoot: "/var/run/containers/storage", + }, + goodContainerCreate, +@@ -1504,7 +1504,7 @@ + PodmanVersion: "CI", + CreateCommand: []string{"I'll get stripped", "create", "--name", "test", "--log-driver=journald", "--log-opt=tag={{.Name}}", "awesome-image:latest"}, + EnvVariable: define.EnvVariable, +- GraphRoot: "/var/lib/containers/storage", ++ GraphRoot: "/storage/.kodi/userdata/addon_data/service.system.podman/podman/storage", + RunRoot: "/var/run/containers/storage", + }, + goodNewWithJournaldTag, +@@ -1523,7 +1523,7 @@ + PodmanVersion: "CI", + CreateCommand: []string{"I'll get stripped", "create", "--name", "test", "awesome-image:latest", "sh", "-c", "kill $$ && echo %\\"}, + EnvVariable: define.EnvVariable, +- GraphRoot: "/var/lib/containers/storage", ++ GraphRoot: "/storage/.kodi/userdata/addon_data/service.system.podman/podman/storage", + RunRoot: "/var/run/containers/storage", + }, + goodNewWithSpecialChars, +@@ -1540,7 +1540,7 @@ + PIDFile: "/var/run/containers/storage/overlay-containers/639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401/userdata/conmon.pid", + StopTimeout: 10, + PodmanVersion: "CI", +- GraphRoot: "/var/lib/containers/storage", ++ GraphRoot: "/storage/.kodi/userdata/addon_data/service.system.podman/podman/storage", + RunRoot: "/var/run/containers/storage", + CreateCommand: []string{"I'll get stripped", "create", "--cgroups=foo", "--conmon-pidfile=foo", "--cidfile=foo", "awesome-image:latest", "podman", "run", "--cgroups=foo", "--conmon-pidfile=foo", "--cidfile=foo", "alpine"}, + EnvVariable: define.EnvVariable, +@@ -1559,7 +1559,7 @@ + PIDFile: "/var/run/containers/storage/overlay-containers/639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401/userdata/conmon.pid", + StopTimeout: 10, + PodmanVersion: "CI", +- GraphRoot: "/var/lib/containers/storage", ++ GraphRoot: "/storage/.kodi/userdata/addon_data/service.system.podman/podman/storage", + RunRoot: "/var/run/containers/storage", + CreateCommand: []string{"I'll get stripped", "create", "--cgroups=foo", "--conmon-pidfile=foo", "--cidfile=foo", "--pod", "test", "awesome-image:latest", "podman", "run", "--cgroups=foo", "--conmon-pidfile=foo", "--cidfile=foo", "--pod-id-file", "/tmp/pod-foobar.pod-id-file", "alpine"}, + EnvVariable: define.EnvVariable, +@@ -1581,7 +1581,7 @@ + PIDFile: "/var/run/containers/storage/overlay-containers/639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401/userdata/conmon.pid", + StopTimeout: 10, + PodmanVersion: "CI", +- GraphRoot: "/var/lib/containers/storage", ++ GraphRoot: "/storage/.kodi/userdata/addon_data/service.system.podman/podman/storage", + RunRoot: "/var/run/containers/storage", + CreateCommand: []string{"I'll get stripped", "create", "--env", "FOO", "--env=BAR", "--env=MYENV=2", "-e", "USER", "awesome-image:latest"}, + containerEnv: []string{"FOO=abc", "BAR=my test", "USER=%a", "MYENV=2"}, +@@ -1601,7 +1601,7 @@ + PIDFile: "/run/containers/storage/overlay-containers/639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401/userdata/conmon.pid", + StopTimeout: 10, + PodmanVersion: "CI", +- GraphRoot: "/var/lib/containers/storage", ++ GraphRoot: "/storage/.kodi/userdata/addon_data/service.system.podman/podman/storage", + RunRoot: "/var/run/containers/storage", + EnvVariable: define.EnvVariable, + AdditionalEnvVariables: []string{"FOO=abc", "BAR=my test", "USER=%a"}, +@@ -1620,7 +1620,7 @@ + PIDFile: "/var/run/containers/storage/overlay-containers/639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401/userdata/conmon.pid", + StopTimeout: 10, + PodmanVersion: "CI", +- GraphRoot: "/var/lib/containers/storage", ++ GraphRoot: "/storage/.kodi/userdata/addon_data/service.system.podman/podman/storage", + RunRoot: "/var/run/containers/storage", + CreateCommand: []string{"I'll get stripped", "create", "--restart", "on-failure:42", "awesome-image:latest"}, + EnvVariable: define.EnvVariable, +@@ -1639,7 +1639,7 @@ + PIDFile: "/var/run/containers/storage/overlay-containers/639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401/userdata/conmon.pid", + StopTimeout: 10, + PodmanVersion: "CI", +- GraphRoot: "/var/lib/containers/storage", ++ GraphRoot: "/storage/.kodi/userdata/addon_data/service.system.podman/podman/storage", + RunRoot: "/var/run/containers/storage", + CreateCommand: []string{"I'll get stripped", "create", "-h", "hostname", "awesome-image:latest"}, + EnvVariable: define.EnvVariable, +@@ -1658,7 +1658,7 @@ + PIDFile: "/run/containers/storage/overlay-containers/639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401/userdata/conmon.pid", + StopTimeout: 10, + PodmanVersion: "CI", +- GraphRoot: "/var/lib/containers/storage", ++ GraphRoot: "/storage/.kodi/userdata/addon_data/service.system.podman/podman/storage", + RunRoot: "/var/run/containers/storage", + CreateCommand: []string{"I'll get stripped", "create", "--restart", "on-failure:42", "awesome-image:latest"}, + }, +@@ -1677,7 +1677,7 @@ + StopTimeout: 10, + PodmanVersion: "CI", + EnvVariable: define.EnvVariable, +- GraphRoot: "/var/lib/containers/storage", ++ GraphRoot: "/storage/.kodi/userdata/addon_data/service.system.podman/podman/storage", + RunRoot: "/var/run/containers/storage", + }, + goodNameEmptyContainerPrefix, +@@ -1695,7 +1695,7 @@ + StopTimeout: 10, + PodmanVersion: "CI", + EnvVariable: define.EnvVariable, +- GraphRoot: "/var/lib/containers/storage", ++ GraphRoot: "/storage/.kodi/userdata/addon_data/service.system.podman/podman/storage", + RunRoot: "/var/run/containers/storage", + RestartSec: 15, + }, +diff -Nur a/pkg/systemd/generate/pods_test.go b/pkg/systemd/generate/pods_test.go +--- a/pkg/systemd/generate/pods_test.go 2024-03-19 09:47:46.000000000 +0000 ++++ b/pkg/systemd/generate/pods_test.go 2024-03-20 11:56:21.234278713 +0000 +@@ -485,7 +485,7 @@ + PIDFile: "/run/containers/storage/overlay-containers/639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401/userdata/conmon.pid", + StopTimeout: 42, + PodmanVersion: "CI", +- GraphRoot: "/var/lib/containers/storage", ++ GraphRoot: "/storage/.kodi/userdata/addon_data/service.system.podman/podman/storage", + RunRoot: "/var/run/containers/storage", + RequiredServices: []string{"container-1", "container-2"}, + CreateCommand: []string{"podman", "pod", "create", "--name", "foo", "bar=arg with space"}, +@@ -503,7 +503,7 @@ + PIDFile: "/run/containers/storage/overlay-containers/639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401/userdata/conmon.pid", + StopTimeout: 42, + PodmanVersion: "CI", +- GraphRoot: "/var/lib/containers/storage", ++ GraphRoot: "/storage/.kodi/userdata/addon_data/service.system.podman/podman/storage", + RunRoot: "/var/run/containers/storage", + RequiredServices: []string{"container-1", "container-2"}, + Wants: []string{"a.service", "b.service", "c.target"}, +@@ -524,7 +524,7 @@ + PIDFile: "/run/containers/storage/overlay-containers/639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401/userdata/conmon.pid", + StopTimeout: 42, + PodmanVersion: "CI", +- GraphRoot: "/var/lib/containers/storage", ++ GraphRoot: "/storage/.kodi/userdata/addon_data/service.system.podman/podman/storage", + RunRoot: "/var/run/containers/storage", + RequiredServices: []string{"container-1", "container-2"}, + After: []string{"a.service", "b.service", "c.target"}, +@@ -545,7 +545,7 @@ + PIDFile: "/run/containers/storage/overlay-containers/639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401/userdata/conmon.pid", + StopTimeout: 42, + PodmanVersion: "CI", +- GraphRoot: "/var/lib/containers/storage", ++ GraphRoot: "/storage/.kodi/userdata/addon_data/service.system.podman/podman/storage", + RunRoot: "/var/run/containers/storage", + RequiredServices: []string{"container-1", "container-2"}, + Requires: []string{"a.service", "b.service", "c.target"}, +@@ -566,7 +566,7 @@ + PIDFile: "/run/containers/storage/overlay-containers/639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401/userdata/conmon.pid", + StopTimeout: 42, + PodmanVersion: "CI", +- GraphRoot: "/var/lib/containers/storage", ++ GraphRoot: "/storage/.kodi/userdata/addon_data/service.system.podman/podman/storage", + RunRoot: "/var/run/containers/storage", + RequiredServices: []string{"container-1", "container-2"}, + Wants: []string{"a.service", "b.service", "c.target"}, +@@ -591,7 +591,7 @@ + PIDFile: "/run/containers/storage/overlay-containers/639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401/userdata/conmon.pid", + StopTimeout: 10, + PodmanVersion: "CI", +- GraphRoot: "/var/lib/containers/storage", ++ GraphRoot: "/storage/.kodi/userdata/addon_data/service.system.podman/podman/storage", + RunRoot: "/var/run/containers/storage", + CreateCommand: []string{"podman", "pod", "create", "foo"}, + }, +@@ -608,7 +608,7 @@ + PIDFile: "/run/containers/storage/overlay-containers/639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401/userdata/conmon.pid", + StopTimeout: 42, + PodmanVersion: "CI", +- GraphRoot: "/var/lib/containers/storage", ++ GraphRoot: "/storage/.kodi/userdata/addon_data/service.system.podman/podman/storage", + RunRoot: "/var/run/containers/storage", + RequiredServices: []string{"container-1", "container-2"}, + CreateCommand: []string{"podman", "pod", "create", "--name", "foo", "bar=arg with space"}, +@@ -627,7 +627,7 @@ + PIDFile: "/run/containers/storage/overlay-containers/639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401/userdata/conmon.pid", + StopTimeout: 42, + PodmanVersion: "CI", +- GraphRoot: "/var/lib/containers/storage", ++ GraphRoot: "/storage/.kodi/userdata/addon_data/service.system.podman/podman/storage", + RunRoot: "/var/run/containers/storage", + RequiredServices: []string{"container-1", "container-2"}, + CreateCommand: []string{"podman", "pod", "create", "--name", "foo", "bar=arg with space"}, +@@ -645,7 +645,7 @@ + PIDFile: "/run/containers/storage/overlay-containers/639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401/userdata/conmon.pid", + StopTimeout: 42, + PodmanVersion: "CI", +- GraphRoot: "/var/lib/containers/storage", ++ GraphRoot: "/storage/.kodi/userdata/addon_data/service.system.podman/podman/storage", + RunRoot: "/var/run/containers/storage", + RequiredServices: []string{"container-1", "container-2"}, + CreateCommand: []string{"podman", "--events-backend", "none", "--runroot", "/root", "pod", "create", "--name", "foo", "bar=arg with space"}, +@@ -663,7 +663,7 @@ + PIDFile: "/run/containers/storage/overlay-containers/639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401/userdata/conmon.pid", + StopTimeout: 10, + PodmanVersion: "CI", +- GraphRoot: "/var/lib/containers/storage", ++ GraphRoot: "/storage/.kodi/userdata/addon_data/service.system.podman/podman/storage", + RunRoot: "/var/run/containers/storage", + RequiredServices: []string{"container-1", "container-2"}, + CreateCommand: []string{"podman", "pod", "create", "--name", "foo", "bar=arg with space"}, +@@ -681,7 +681,7 @@ + PIDFile: "/run/containers/storage/overlay-containers/639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401/userdata/conmon.pid", + StopTimeout: 10, + PodmanVersion: "CI", +- GraphRoot: "/var/lib/containers/storage", ++ GraphRoot: "/storage/.kodi/userdata/addon_data/service.system.podman/podman/storage", + RunRoot: "/var/run/containers/storage", + RequiredServices: []string{"container-1", "container-2"}, + CreateCommand: []string{"podman", "--events-backend", "none", "--runroot", "/root", "pod", "create", "--name", "foo", "bar=arg with space"}, +@@ -699,7 +699,7 @@ + PIDFile: "/run/containers/storage/overlay-containers/639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401/userdata/conmon.pid", + StopTimeout: 10, + PodmanVersion: "CI", +- GraphRoot: "/var/lib/containers/storage", ++ GraphRoot: "/storage/.kodi/userdata/addon_data/service.system.podman/podman/storage", + RunRoot: "/var/run/containers/storage", + RequiredServices: []string{"container-1", "container-2"}, + CreateCommand: []string{"podman", "pod", "create", "--name", "foo", "--replace=false"}, +@@ -717,7 +717,7 @@ + PIDFile: "/run/containers/storage/overlay-containers/639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401/userdata/conmon.pid", + StopTimeout: 10, + PodmanVersion: "CI", +- GraphRoot: "/var/lib/containers/storage", ++ GraphRoot: "/storage/.kodi/userdata/addon_data/service.system.podman/podman/storage", + RunRoot: "/var/run/containers/storage", + RequiredServices: []string{"container-1", "container-2"}, + CreateCommand: []string{"podman", "pod", "create", "--name", "foo", "--label", "key={{someval}}", "--exit-policy=continue"}, +@@ -735,7 +735,7 @@ + PIDFile: "/run/containers/storage/overlay-containers/639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401/userdata/conmon.pid", + StopTimeout: 10, + PodmanVersion: "CI", +- GraphRoot: "/var/lib/containers/storage", ++ GraphRoot: "/storage/.kodi/userdata/addon_data/service.system.podman/podman/storage", + RunRoot: "/var/run/containers/storage", + RequiredServices: []string{"container-1", "container-2"}, + CreateCommand: []string{"podman", "pod", "create", "--infra-conmon-pidfile", "/tmp/pod-123abc.pid", "--pod-id-file", "/tmp/pod-123abc.pod-id", "--name", "foo", "bar=arg with space"}, +@@ -753,7 +753,7 @@ + PIDFile: "/run/containers/storage/overlay-containers/639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401/userdata/conmon.pid", + StopTimeout: 42, + PodmanVersion: "CI", +- GraphRoot: "/var/lib/containers/storage", ++ GraphRoot: "/storage/.kodi/userdata/addon_data/service.system.podman/podman/storage", + RunRoot: "/var/run/containers/storage", + RequiredServices: []string{"container-1", "container-2"}, + CreateCommand: []string{"podman", "pod", "create", "--name", "foo", "bar=arg with space"}, +diff -Nur a/pkg/systemd/quadlet/quadlet.go b/pkg/systemd/quadlet/quadlet.go +--- a/pkg/systemd/quadlet/quadlet.go 2024-03-19 09:47:46.000000000 +0000 ++++ b/pkg/systemd/quadlet/quadlet.go 2024-03-20 11:56:21.237612076 +0000 +@@ -20,9 +20,9 @@ + // but it is causing bloat + autoUpdateLabel = "io.containers.autoupdate" + // Directory for global Quadlet files (sysadmin owned) +- UnitDirAdmin = "/etc/containers/systemd" ++ UnitDirAdmin = "/storage/.kodi/addons/service.system.podman/etc/containers/systemd" + // Directory for global Quadlet files (distro owned) +- UnitDirDistro = "/usr/share/containers/systemd" ++ UnitDirDistro = "/storage/.kodi/userdata/addon_data/service.system.podman/podman/etc/containers/systemd" + + // Names of commonly used systemd/quadlet group names + ContainerGroup = "Container" +diff -Nur a/pkg/trust/registries.go b/pkg/trust/registries.go +--- a/pkg/trust/registries.go 2024-03-19 09:47:46.000000000 +0000 ++++ b/pkg/trust/registries.go 2024-03-20 11:56:21.260945621 +0000 +@@ -28,7 +28,7 @@ + } + + // systemRegistriesDirPath is the path to registries.d. +-const systemRegistriesDirPath = "/etc/containers/registries.d" ++const systemRegistriesDirPath = "/storage/.kodi/addons/service.system.podman/etc/containers/registries.d" + + // userRegistriesDir is the path to the per user registries.d. + var userRegistriesDir = filepath.FromSlash(".config/containers/registries.d") +diff -Nur a/test/e2e/common_test.go b/test/e2e/common_test.go +--- a/test/e2e/common_test.go 2024-03-19 09:47:46.000000000 +0000 ++++ b/test/e2e/common_test.go 2024-03-20 11:56:21.417613710 +0000 +@@ -293,7 +293,7 @@ + } + + networkBackend := Netavark +- networkConfigDir := "/etc/containers/networks" ++ networkConfigDir := "/storage/.kodi/addons/service.system.podman/etc/containers/networks" + if isRootless() { + networkConfigDir = filepath.Join(root, "etc", "networks") + } +diff -Nur a/test/e2e/create_test.go b/test/e2e/create_test.go +--- a/test/e2e/create_test.go 2024-03-19 09:47:46.000000000 +0000 ++++ b/test/e2e/create_test.go 2024-03-20 11:56:21.420947074 +0000 +@@ -351,7 +351,7 @@ + session.WaitWithDefaultTimeout() + Expect(session).To(ExitWithError()) + +- session = podmanTest.Podman([]string{"create", "-q", "--pull=always", "--signature-policy", "/etc/containers/policy.json", ALPINE}) ++ session = podmanTest.Podman([]string{"create", "-q", "--pull=always", "--signature-policy", "/storage/.kodi/addons/service.system.podman/etc/containers/policy.json", ALPINE}) + session.WaitWithDefaultTimeout() + if IsRemote() { + Expect(session).To(ExitWithError()) +diff -Nur a/test/e2e/import_test.go b/test/e2e/import_test.go +--- a/test/e2e/import_test.go 2024-03-19 09:47:46.000000000 +0000 ++++ b/test/e2e/import_test.go 2024-03-20 11:56:21.407613619 +0000 +@@ -173,7 +173,7 @@ + importImage.WaitWithDefaultTimeout() + Expect(importImage).To(ExitWithError()) + +- result := podmanTest.Podman([]string{"import", "-q", "--signature-policy", "/etc/containers/policy.json", outfile}) ++ result := podmanTest.Podman([]string{"import", "-q", "--signature-policy", "/storage/.kodi/addons/service.system.podman/etc/containers/policy.json", outfile}) + result.WaitWithDefaultTimeout() + if IsRemote() { + Expect(result).To(ExitWithError()) +diff -Nur a/test/e2e/load_test.go b/test/e2e/load_test.go +--- a/test/e2e/load_test.go 2024-03-19 09:47:46.000000000 +0000 ++++ b/test/e2e/load_test.go 2024-03-20 11:56:21.407613619 +0000 +@@ -83,7 +83,7 @@ + rmi.WaitWithDefaultTimeout() + Expect(rmi).Should(ExitCleanly()) + +- result := podmanTest.Podman([]string{"load", "-q", "--signature-policy", "/etc/containers/policy.json", "-i", outfile}) ++ result := podmanTest.Podman([]string{"load", "-q", "--signature-policy", "/storage/.kodi/addons/service.system.podman/etc/containers/policy.json", "-i", outfile}) + result.WaitWithDefaultTimeout() + if IsRemote() { + Expect(result).To(ExitWithError()) +diff -Nur a/test/e2e/push_test.go b/test/e2e/push_test.go +--- a/test/e2e/push_test.go 2024-03-19 09:47:46.000000000 +0000 ++++ b/test/e2e/push_test.go 2024-03-20 11:56:21.410946983 +0000 +@@ -196,11 +196,11 @@ + // Ideally, this should set SystemContext.RegistriesDirPath, but Podman currently doesn’t + // expose that as an option. So, for now, modify /etc/directly, and skip testing sigstore if + // we don’t have permission to do so. +- systemRegistriesDAddition := "/etc/containers/registries.d/podman-test-only-temporary-addition.yaml" ++ systemRegistriesDAddition := "/storage/.kodi/addons/service.system.podman/etc/containers/registries.d/podman-test-only-temporary-addition.yaml" + cmd := exec.Command("cp", "testdata/sigstore-registries.d-fragment.yaml", systemRegistriesDAddition) + output, err := cmd.CombinedOutput() + if err != nil { +- GinkgoWriter.Printf("Skipping sigstore tests because /etc/containers/registries.d isn’t writable: %s\n", string(output)) ++ GinkgoWriter.Printf("Skipping sigstore tests because /storage/.kodi/addons/service.system.podman/etc/containers/registries.d isn’t writable: %s\n", string(output)) + } else { + defer func() { + err := os.Remove(systemRegistriesDAddition) +@@ -268,16 +268,16 @@ + }) + + It("podman push to local registry with authorization", func() { +- SkipIfRootless("/etc/containers/certs.d not writable") ++ SkipIfRootless("/storage/.kodi/addons/service.system.podman/etc/containers/certs.d not writable") + if podmanTest.Host.Arch == "ppc64le" { + Skip("No registry image for ppc64le") + } + authPath := filepath.Join(podmanTest.TempDir, "auth") + err = os.Mkdir(authPath, os.ModePerm) + Expect(err).ToNot(HaveOccurred()) +- err = os.MkdirAll("/etc/containers/certs.d/localhost:5004", os.ModePerm) ++ err = os.MkdirAll("/storage/.kodi/addons/service.system.podman/etc/containers/certs.d/localhost:5004", os.ModePerm) + Expect(err).ToNot(HaveOccurred()) +- defer os.RemoveAll("/etc/containers/certs.d/localhost:5004") ++ defer os.RemoveAll("/storage/.kodi/addons/service.system.podman/etc/containers/certs.d/localhost:5004") + + cwd, _ := os.Getwd() + certPath := filepath.Join(cwd, "../", "certs") +@@ -317,7 +317,7 @@ + Expect(push).Should(Exit(0)) + Expect(push.ErrorToString()).To(ContainSubstring("Writing manifest to image destination")) + +- setup := SystemExec("cp", []string{filepath.Join(certPath, "domain.crt"), "/etc/containers/certs.d/localhost:5004/ca.crt"}) ++ setup := SystemExec("cp", []string{filepath.Join(certPath, "domain.crt"), "/storage/.kodi/addons/service.system.podman/etc/containers/certs.d/localhost:5004/ca.crt"}) + Expect(setup).Should(ExitCleanly()) + + push = podmanTest.Podman([]string{"push", "--creds=podmantest:wrongpasswd", ALPINE, "localhost:5004/credstest"}) +diff -Nur a/test/e2e/run_test.go b/test/e2e/run_test.go +--- a/test/e2e/run_test.go 2024-03-19 09:47:46.000000000 +0000 ++++ b/test/e2e/run_test.go 2024-03-20 11:56:21.404280256 +0000 +@@ -117,7 +117,7 @@ + session.WaitWithDefaultTimeout() + Expect(session).To(ExitWithError()) + +- session = podmanTest.Podman([]string{"run", "--pull=always", "--signature-policy", "/etc/containers/policy.json", ALPINE}) ++ session = podmanTest.Podman([]string{"run", "--pull=always", "--signature-policy", "/storage/.kodi/addons/service.system.podman/etc/containers/policy.json", ALPINE}) + session.WaitWithDefaultTimeout() + if IsRemote() { + Expect(session).To(ExitWithError()) +diff -Nur a/test/e2e/save_test.go b/test/e2e/save_test.go +--- a/test/e2e/save_test.go 2024-03-19 09:47:46.000000000 +0000 ++++ b/test/e2e/save_test.go 2024-03-20 11:56:21.400946892 +0000 +@@ -27,7 +27,7 @@ + SkipIfRemote("--signature-policy N/A for remote") + outfile := filepath.Join(podmanTest.TempDir, "alpine.tar") + +- save := podmanTest.Podman([]string{"save", "-q", "--signature-policy", "/etc/containers/policy.json", "-o", outfile, ALPINE}) ++ save := podmanTest.Podman([]string{"save", "-q", "--signature-policy", "/storage/.kodi/addons/service.system.podman/etc/containers/policy.json", "-o", outfile, ALPINE}) + save.WaitWithDefaultTimeout() + Expect(save).Should(ExitCleanly()) + }) +@@ -152,12 +152,12 @@ + Expect(err).ToNot(HaveOccurred()) + + defaultYaml := filepath.Join(podmanTest.TempDir, "default.yaml") +- cmd = exec.Command("cp", "/etc/containers/registries.d/default.yaml", defaultYaml) ++ cmd = exec.Command("cp", "/storage/.kodi/addons/service.system.podman/etc/containers/registries.d/default.yaml", defaultYaml) + if err = cmd.Run(); err != nil { + Skip("no signature store to verify") + } + defer func() { +- cmd = exec.Command("cp", defaultYaml, "/etc/containers/registries.d/default.yaml") ++ cmd = exec.Command("cp", defaultYaml, "/storage/.kodi/addons/service.system.podman/etc/containers/registries.d/default.yaml") + err := cmd.Run() + Expect(err).ToNot(HaveOccurred()) + }() +@@ -169,10 +169,10 @@ + + sigstore := ` + default-docker: +- sigstore: file:///var/lib/containers/sigstore +- sigstore-staging: file:///var/lib/containers/sigstore ++ sigstore: file:///storage/.kodi/userdata/addon_data/service.system.podman/podman/sigstore ++ sigstore-staging: file:///storage/.kodi/userdata/addon_data/service.system.podman/podman/sigstore + ` +- Expect(os.WriteFile("/etc/containers/registries.d/default.yaml", []byte(sigstore), 0755)).To(Succeed()) ++ Expect(os.WriteFile("/storage/.kodi/addons/service.system.podman/etc/containers/registries.d/default.yaml", []byte(sigstore), 0755)).To(Succeed()) + + pushedImage := fmt.Sprintf("localhost:%d/alpine", port) + session = podmanTest.Podman([]string{"tag", ALPINE, pushedImage}) +diff -Nur a/test/e2e/system_reset_test.go b/test/e2e/system_reset_test.go +--- a/test/e2e/system_reset_test.go 2024-03-19 09:47:46.000000000 +0000 ++++ b/test/e2e/system_reset_test.go 2024-03-20 11:56:21.400946892 +0000 +@@ -43,7 +43,7 @@ + Expect(session).Should(ExitCleanly()) + + Expect(session.ErrorToString()).To(Not(ContainSubstring("Failed to add pause process"))) +- Expect(session.ErrorToString()).To(Not(ContainSubstring("/usr/share/containers/storage.conf"))) ++ Expect(session.ErrorToString()).To(Not(ContainSubstring("/storage/.kodi/userdata/addon_data/service.system.podman/podman/etc/containers/storage.conf"))) + + session = podmanTest.Podman([]string{"images", "-n"}) + session.WaitWithDefaultTimeout() +diff -Nur a/vendor/github.com/containers/common/libnetwork/network/interface_freebsd.go b/vendor/github.com/containers/common/libnetwork/network/interface_freebsd.go +--- a/vendor/github.com/containers/common/libnetwork/network/interface_freebsd.go 2024-03-19 09:47:46.000000000 +0000 ++++ b/vendor/github.com/containers/common/libnetwork/network/interface_freebsd.go 2024-03-20 11:56:22.294288333 +0000 +@@ -4,7 +4,7 @@ + // cniConfigDir is the directory where cni configuration is found + cniConfigDir = "/usr/local/etc/cni/net.d/" + // netavarkConfigDir is the config directory for the rootful network files +- netavarkConfigDir = "/usr/local/etc/containers/networks" ++ netavarkConfigDir = "/usr/local/storage/.kodi/addons/service.system.podman/etc/containers/networks" + // netavarkRunDir is the run directory for the rootful temporary network files such as the ipam db + netavarkRunDir = "/var/run/containers/networks" + ) +diff -Nur a/vendor/github.com/containers/common/libnetwork/network/interface_linux.go b/vendor/github.com/containers/common/libnetwork/network/interface_linux.go +--- a/vendor/github.com/containers/common/libnetwork/network/interface_linux.go 2024-03-19 09:47:46.000000000 +0000 ++++ b/vendor/github.com/containers/common/libnetwork/network/interface_linux.go 2024-03-20 11:56:22.294288333 +0000 +@@ -4,7 +4,7 @@ + // cniConfigDir is the directory where cni configuration is found + cniConfigDir = "/etc/cni/net.d/" + // netavarkConfigDir is the config directory for the rootful network files +- netavarkConfigDir = "/etc/containers/networks" ++ netavarkConfigDir = "/storage/.kodi/addons/service.system.podman/etc/containers/networks" + // netavarkRunDir is the run directory for the rootful temporary network files such as the ipam db + netavarkRunDir = "/run/containers/networks" + ) +diff -Nur a/vendor/github.com/containers/common/pkg/config/config_darwin.go b/vendor/github.com/containers/common/pkg/config/config_darwin.go +--- a/vendor/github.com/containers/common/pkg/config/config_darwin.go 2024-03-19 09:47:46.000000000 +0000 ++++ b/vendor/github.com/containers/common/pkg/config/config_darwin.go 2024-03-20 11:56:22.290954970 +0000 +@@ -9,7 +9,7 @@ + + // DefaultSignaturePolicyPath is the default value for the + // policy.json file. +- DefaultSignaturePolicyPath = "/etc/containers/policy.json" ++ DefaultSignaturePolicyPath = "/storage/.kodi/addons/service.system.podman/etc/containers/policy.json" + ) + + var defaultHelperBinariesDir = []string{ +diff -Nur a/vendor/github.com/containers/common/pkg/config/config_freebsd.go b/vendor/github.com/containers/common/pkg/config/config_freebsd.go +--- a/vendor/github.com/containers/common/pkg/config/config_freebsd.go 2024-03-19 09:47:46.000000000 +0000 ++++ b/vendor/github.com/containers/common/pkg/config/config_freebsd.go 2024-03-20 11:56:22.290954970 +0000 +@@ -9,7 +9,7 @@ + + // DefaultSignaturePolicyPath is the default value for the + // policy.json file. +- DefaultSignaturePolicyPath = "/usr/local/etc/containers/policy.json" ++ DefaultSignaturePolicyPath = "/usr/local/storage/.kodi/addons/service.system.podman/etc/containers/policy.json" + ) + + var defaultHelperBinariesDir = []string{ +diff -Nur a/vendor/github.com/containers/common/pkg/config/config_linux.go b/vendor/github.com/containers/common/pkg/config/config_linux.go +--- a/vendor/github.com/containers/common/pkg/config/config_linux.go 2024-03-19 09:47:46.000000000 +0000 ++++ b/vendor/github.com/containers/common/pkg/config/config_linux.go 2024-03-20 11:56:22.290954970 +0000 +@@ -13,7 +13,7 @@ + + // DefaultSignaturePolicyPath is the default value for the + // policy.json file. +- DefaultSignaturePolicyPath = "/etc/containers/policy.json" ++ DefaultSignaturePolicyPath = "/storage/.kodi/addons/service.system.podman/etc/containers/policy.json" + ) + + func selinuxEnabled() bool { +diff -Nur a/vendor/github.com/containers/common/pkg/config/config_windows.go b/vendor/github.com/containers/common/pkg/config/config_windows.go +--- a/vendor/github.com/containers/common/pkg/config/config_windows.go 2024-03-19 09:47:46.000000000 +0000 ++++ b/vendor/github.com/containers/common/pkg/config/config_windows.go 2024-03-20 11:56:22.290954970 +0000 +@@ -11,7 +11,7 @@ + + // DefaultSignaturePolicyPath is the default value for the + // policy.json file. +- DefaultSignaturePolicyPath = "/etc/containers/policy.json" ++ DefaultSignaturePolicyPath = "/storage/.kodi/addons/service.system.podman/etc/containers/policy.json" + + // Mount type for mounting host dir + _typeBind = "bind" +diff -Nur a/vendor/github.com/containers/common/pkg/config/default.go b/vendor/github.com/containers/common/pkg/config/default.go +--- a/vendor/github.com/containers/common/pkg/config/default.go 2024-03-19 09:47:46.000000000 +0000 ++++ b/vendor/github.com/containers/common/pkg/config/default.go 2024-03-20 11:56:22.290954970 +0000 +@@ -22,7 +22,7 @@ + + const ( + // _defaultGraphRoot points to the default path of the graph root. +- _defaultGraphRoot = "/var/lib/containers/storage" ++ _defaultGraphRoot = "/storage/.kodi/userdata/addon_data/service.system.podman/podman/storage" + + // _defaultTransport is a prefix that we apply to an image name to check + // docker hub first for the image. +@@ -73,7 +73,7 @@ + // ErrInvalidArg indicates that an invalid argument was passed. + ErrInvalidArg = errors.New("invalid argument") + // DefaultHooksDirs defines the default hooks directory. +- DefaultHooksDirs = []string{"/usr/share/containers/oci/hooks.d"} ++ DefaultHooksDirs = []string{"/storage/.kodi/userdata/addon_data/service.system.podman/podman/etc/containers/oci/hooks.d"} + // DefaultCapabilities is the default for the default_capabilities option in the containers.conf file. + DefaultCapabilities = []string{ + "CAP_CHOWN", +diff -Nur a/vendor/github.com/containers/common/pkg/hooks/hooks.go b/vendor/github.com/containers/common/pkg/hooks/hooks.go +--- a/vendor/github.com/containers/common/pkg/hooks/hooks.go 2024-03-19 09:47:46.000000000 +0000 ++++ b/vendor/github.com/containers/common/pkg/hooks/hooks.go 2024-03-20 11:56:22.284288242 +0000 +@@ -20,10 +20,10 @@ + + const ( + // DefaultDir is the default directory containing system hook configuration files. +- DefaultDir = "/usr/share/containers/oci/hooks.d" ++ DefaultDir = "/storage/.kodi/userdata/addon_data/service.system.podman/podman/etc/containers/oci/hooks.d" + + // OverrideDir is the directory for hook configuration files overriding the default entries. +- OverrideDir = "/etc/containers/oci/hooks.d" ++ OverrideDir = "/storage/.kodi/addons/service.system.podman/etc/containers/oci/hooks.d" + ) + + // Manager provides an opaque interface for managing CRI-O hooks. +diff -Nur a/vendor/github.com/containers/common/pkg/machine/machine.go b/vendor/github.com/containers/common/pkg/machine/machine.go +--- a/vendor/github.com/containers/common/pkg/machine/machine.go 2024-03-19 09:47:46.000000000 +0000 ++++ b/vendor/github.com/containers/common/pkg/machine/machine.go 2024-03-20 11:56:22.294288333 +0000 +@@ -12,7 +12,7 @@ + } + + const ( +- markerFile = "/etc/containers/podman-machine" ++ markerFile = "/storage/.kodi/addons/service.system.podman/etc/containers/podman-machine" + Wsl = "wsl" + Qemu = "qemu" + AppleHV = "applehv" +diff -Nur a/vendor/github.com/containers/common/pkg/subscriptions/subscriptions.go b/vendor/github.com/containers/common/pkg/subscriptions/subscriptions.go +--- a/vendor/github.com/containers/common/pkg/subscriptions/subscriptions.go 2024-03-19 09:47:46.000000000 +0000 ++++ b/vendor/github.com/containers/common/pkg/subscriptions/subscriptions.go 2024-03-20 11:56:22.287621606 +0000 +@@ -18,10 +18,10 @@ + var ( + // DefaultMountsFile holds the default mount paths in the form + // "host_path:container_path" +- DefaultMountsFile = "/usr/share/containers/mounts.conf" ++ DefaultMountsFile = "/storage/.kodi/userdata/addon_data/service.system.podman/podman/etc/containers/mounts.conf" + // OverrideMountsFile holds the default mount paths in the form + // "host_path:container_path" overridden by the user +- OverrideMountsFile = "/etc/containers/mounts.conf" ++ OverrideMountsFile = "/storage/.kodi/addons/service.system.podman/etc/containers/mounts.conf" + // UserOverrideMountsFile holds the default mount paths in the form + // "host_path:container_path" overridden by the rootless user + UserOverrideMountsFile = filepath.Join(os.Getenv("HOME"), ".config/containers/mounts.conf") +diff -Nur a/vendor/github.com/containers/image/v5/docker/registries_d.go b/vendor/github.com/containers/image/v5/docker/registries_d.go +--- a/vendor/github.com/containers/image/v5/docker/registries_d.go 2024-03-19 09:47:46.000000000 +0000 ++++ b/vendor/github.com/containers/image/v5/docker/registries_d.go 2024-03-20 11:56:22.267621424 +0000 +@@ -34,7 +34,7 @@ + var defaultUserDockerDir = filepath.FromSlash(".local/share/containers/sigstore") + + // defaultDockerDir is the default lookaside directory for root +-var defaultDockerDir = "/var/lib/containers/sigstore" ++var defaultDockerDir = "/storage/.kodi/userdata/addon_data/service.system.podman/podman/sigstore" + + // registryConfiguration is one of the files in registriesDirPath configuring lookaside locations, or the result of merging them all. + // NOTE: Keep this in sync with docs/registries.d.md! +diff -Nur a/vendor/github.com/containers/image/v5/pkg/blobinfocache/default.go b/vendor/github.com/containers/image/v5/pkg/blobinfocache/default.go +--- a/vendor/github.com/containers/image/v5/pkg/blobinfocache/default.go 2024-03-19 09:47:46.000000000 +0000 ++++ b/vendor/github.com/containers/image/v5/pkg/blobinfocache/default.go 2024-03-20 11:56:22.257621333 +0000 +@@ -17,7 +17,7 @@ + // If the format changes in an incompatible way, increase the version number. + blobInfoCacheFilename = "blob-info-cache-v1.sqlite" + // systemBlobInfoCacheDir is the directory containing the blob info cache (in blobInfocacheFilename) for root-running processes. +- systemBlobInfoCacheDir = "/var/lib/containers/cache" ++ systemBlobInfoCacheDir = "/storage/.kodi/userdata/addon_data/service.system.podman/podman/cache" + ) + + // blobInfoCacheDir returns a path to a blob info cache appropriate for sys and euid. +diff -Nur a/vendor/github.com/containers/image/v5/pkg/sysregistriesv2/paths_common.go b/vendor/github.com/containers/image/v5/pkg/sysregistriesv2/paths_common.go +--- a/vendor/github.com/containers/image/v5/pkg/sysregistriesv2/paths_common.go 2024-03-19 09:47:46.000000000 +0000 ++++ b/vendor/github.com/containers/image/v5/pkg/sysregistriesv2/paths_common.go 2024-03-20 11:56:22.254287971 +0000 +@@ -5,8 +5,8 @@ + + // builtinRegistriesConfPath is the path to the registry configuration file. + // DO NOT change this, instead see systemRegistriesConfPath above. +-const builtinRegistriesConfPath = "/etc/containers/registries.conf" ++const builtinRegistriesConfPath = "/storage/.kodi/addons/service.system.podman/etc/containers/registries.conf" + + // builtinRegistriesConfDirPath is the path to the registry configuration directory. + // DO NOT change this, instead see systemRegistriesConfDirectoryPath above. +-const builtinRegistriesConfDirPath = "/etc/containers/registries.conf.d" ++const builtinRegistriesConfDirPath = "/storage/.kodi/addons/service.system.podman/etc/containers/registries.conf.d" +diff -Nur a/vendor/github.com/containers/image/v5/pkg/sysregistriesv2/paths_freebsd.go b/vendor/github.com/containers/image/v5/pkg/sysregistriesv2/paths_freebsd.go +--- a/vendor/github.com/containers/image/v5/pkg/sysregistriesv2/paths_freebsd.go 2024-03-19 09:47:46.000000000 +0000 ++++ b/vendor/github.com/containers/image/v5/pkg/sysregistriesv2/paths_freebsd.go 2024-03-20 11:56:22.254287971 +0000 +@@ -5,8 +5,8 @@ + + // builtinRegistriesConfPath is the path to the registry configuration file. + // DO NOT change this, instead see systemRegistriesConfPath above. +-const builtinRegistriesConfPath = "/usr/local/etc/containers/registries.conf" ++const builtinRegistriesConfPath = "/usr/local/storage/.kodi/addons/service.system.podman/etc/containers/registries.conf" + + // builtinRegistriesConfDirPath is the path to the registry configuration directory. + // DO NOT change this, instead see systemRegistriesConfDirectoryPath above. +-const builtinRegistriesConfDirPath = "/usr/local/etc/containers/registries.conf.d" ++const builtinRegistriesConfDirPath = "/usr/local/storage/.kodi/addons/service.system.podman/etc/containers/registries.conf.d" +diff -Nur a/vendor/github.com/containers/image/v5/signature/policy_paths_common.go b/vendor/github.com/containers/image/v5/signature/policy_paths_common.go +--- a/vendor/github.com/containers/image/v5/signature/policy_paths_common.go 2024-03-19 09:47:46.000000000 +0000 ++++ b/vendor/github.com/containers/image/v5/signature/policy_paths_common.go 2024-03-20 11:56:22.257621333 +0000 +@@ -5,4 +5,4 @@ + + // builtinDefaultPolicyPath is the policy path used for DefaultPolicy(). + // DO NOT change this, instead see systemDefaultPolicyPath above. +-const builtinDefaultPolicyPath = "/etc/containers/policy.json" ++const builtinDefaultPolicyPath = "/storage/.kodi/addons/service.system.podman/etc/containers/policy.json" +diff -Nur a/vendor/github.com/containers/image/v5/signature/policy_paths_freebsd.go b/vendor/github.com/containers/image/v5/signature/policy_paths_freebsd.go +--- a/vendor/github.com/containers/image/v5/signature/policy_paths_freebsd.go 2024-03-19 09:47:46.000000000 +0000 ++++ b/vendor/github.com/containers/image/v5/signature/policy_paths_freebsd.go 2024-03-20 11:56:22.257621333 +0000 +@@ -5,4 +5,4 @@ + + // builtinDefaultPolicyPath is the policy path used for DefaultPolicy(). + // DO NOT change this, instead see systemDefaultPolicyPath above. +-const builtinDefaultPolicyPath = "/usr/local/etc/containers/policy.json" ++const builtinDefaultPolicyPath = "/usr/local/storage/.kodi/addons/service.system.podman/etc/containers/policy.json" +diff -Nur a/vendor/github.com/containers/storage/types/options_darwin.go b/vendor/github.com/containers/storage/types/options_darwin.go +--- a/vendor/github.com/containers/storage/types/options_darwin.go 2024-03-19 09:47:46.000000000 +0000 ++++ b/vendor/github.com/containers/storage/types/options_darwin.go 2024-03-20 11:56:22.227621061 +0000 +@@ -4,11 +4,11 @@ + // these are default path for run and graph root for rootful users + // for rootless path is constructed via getRootlessStorageOpts + defaultRunRoot string = "/run/containers/storage" +- defaultGraphRoot string = "/var/lib/containers/storage" +- SystemConfigFile = "/usr/share/containers/storage.conf" ++ defaultGraphRoot string = "/storage/.kodi/userdata/addon_data/service.system.podman/podman/storage" ++ SystemConfigFile = "/storage/.kodi/userdata/addon_data/service.system.podman/podman/etc/containers/storage.conf" + ) + +-var defaultOverrideConfigFile = "/etc/containers/storage.conf" ++var defaultOverrideConfigFile = "/storage/.kodi/addons/service.system.podman/etc/containers/storage.conf" + + // canUseRootlessOverlay returns true if the overlay driver can be used for rootless containers + func canUseRootlessOverlay(home, runhome string) bool { +diff -Nur a/vendor/github.com/containers/storage/types/options_freebsd.go b/vendor/github.com/containers/storage/types/options_freebsd.go +--- a/vendor/github.com/containers/storage/types/options_freebsd.go 2024-03-19 09:47:46.000000000 +0000 ++++ b/vendor/github.com/containers/storage/types/options_freebsd.go 2024-03-20 11:56:22.227621061 +0000 +@@ -10,7 +10,7 @@ + + // defaultConfigFile path to the system wide storage.conf file + var ( +- defaultOverrideConfigFile = "/usr/local/etc/containers/storage.conf" ++ defaultOverrideConfigFile = "/usr/local/storage/.kodi/addons/service.system.podman/etc/containers/storage.conf" + ) + + // canUseRootlessOverlay returns true if the overlay driver can be used for rootless containers +diff -Nur a/vendor/github.com/containers/storage/types/options_linux.go b/vendor/github.com/containers/storage/types/options_linux.go +--- a/vendor/github.com/containers/storage/types/options_linux.go 2024-03-19 09:47:46.000000000 +0000 ++++ b/vendor/github.com/containers/storage/types/options_linux.go 2024-03-20 11:56:22.227621061 +0000 +@@ -12,13 +12,13 @@ + // these are default path for run and graph root for rootful users + // for rootless path is constructed via getRootlessStorageOpts + defaultRunRoot string = "/run/containers/storage" +- defaultGraphRoot string = "/var/lib/containers/storage" +- SystemConfigFile = "/usr/share/containers/storage.conf" ++ defaultGraphRoot string = "/storage/.kodi/userdata/addon_data/service.system.podman/podman/storage" ++ SystemConfigFile = "/storage/.kodi/userdata/addon_data/service.system.podman/podman/etc/containers/storage.conf" + ) + + // defaultConfigFile path to the system wide storage.conf file + var ( +- defaultOverrideConfigFile = "/etc/containers/storage.conf" ++ defaultOverrideConfigFile = "/storage/.kodi/addons/service.system.podman/etc/containers/storage.conf" + ) + + // canUseRootlessOverlay returns true if the overlay driver can be used for rootless containers +diff -Nur a/vendor/github.com/containers/storage/types/options_windows.go b/vendor/github.com/containers/storage/types/options_windows.go +--- a/vendor/github.com/containers/storage/types/options_windows.go 2024-03-19 09:47:46.000000000 +0000 ++++ b/vendor/github.com/containers/storage/types/options_windows.go 2024-03-20 11:56:22.227621061 +0000 +@@ -4,13 +4,13 @@ + // these are default path for run and graph root for rootful users + // for rootless path is constructed via getRootlessStorageOpts + defaultRunRoot string = "/run/containers/storage" +- defaultGraphRoot string = "/var/lib/containers/storage" +- SystemConfigFile = "/usr/share/containers/storage.conf" ++ defaultGraphRoot string = "/storage/.kodi/userdata/addon_data/service.system.podman/podman/storage" ++ SystemConfigFile = "/storage/.kodi/userdata/addon_data/service.system.podman/podman/etc/containers/storage.conf" + ) + + // defaultConfigFile path to the system wide storage.conf file + var ( +- defaultOverrideConfigFile = "/etc/containers/storage.conf" ++ defaultOverrideConfigFile = "/storage/.kodi/addons/service.system.podman/etc/containers/storage.conf" + ) + + // canUseRootlessOverlay returns true if the overlay driver can be used for rootless containers +diff -Nur a/vendor/github.com/opencontainers/selinux/go-selinux/selinux_linux.go b/vendor/github.com/opencontainers/selinux/go-selinux/selinux_linux.go +--- a/vendor/github.com/opencontainers/selinux/go-selinux/selinux_linux.go 2024-03-19 09:47:46.000000000 +0000 ++++ b/vendor/github.com/opencontainers/selinux/go-selinux/selinux_linux.go 2024-03-20 11:56:22.077619701 +0000 +@@ -23,7 +23,7 @@ + + const ( + minSensLen = 2 +- contextFile = "/usr/share/containers/selinux/contexts" ++ contextFile = "/storage/.kodi/userdata/addon_data/service.system.podman/podman/etc/containers/selinux/contexts" + selinuxDir = "/etc/selinux/" + selinuxUsersDir = "contexts/users" + defaultContexts = "contexts/default_contexts" From 1400c1e2f0e47dcdce4779705bf9e8b6348e36f7 Mon Sep 17 00:00:00 2001 From: Rudi Heitbaum Date: Sun, 5 Feb 2023 10:56:14 +0000 Subject: [PATCH 6/6] podman: initial addon release (1) ~# CONTAINERS_REGISTRIES_CONF=/storage/.kodi/userdata/addon_data/service.system.podman/podman/etc/containers/registries.conf podman run --rm ubuntu Resolving "ubuntu" using unqualified-search registries (/storage/.kodi/userdata/addon_data/service.system.podman/podman/etc/containers/registries.conf) Trying to pull docker.io/library/ubuntu:latest... Getting image source signatures Copying blob 677076032cca done Copying config 58db3edaf2 done Writing manifest to image destination Storing signatures ~# podman run --rm -it ubuntu bash root@c28e9b6dd0c3:/# more /etc/os-release PRETTY_NAME="Ubuntu 22.04.1 LTS" NAME="Ubuntu" VERSION_ID="22.04" VERSION="22.04.1 LTS (Jammy Jellyfish)" VERSION_CODENAME=jammy ID=ubuntu ID_LIKE=debian HOME_URL="https://www.ubuntu.com/" SUPPORT_URL="https://help.ubuntu.com/" BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/" PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy" UBUNTU_CODENAME=jammy root@c28e9b6dd0c3:/# --- packages/addons/service/podman/changelog.txt | 1 + packages/addons/service/podman/icon/icon.png | Bin 0 -> 45646 bytes packages/addons/service/podman/package.mk | 44 +++++++++++++++++++ 3 files changed, 45 insertions(+) create mode 100644 packages/addons/service/podman/changelog.txt create mode 100644 packages/addons/service/podman/icon/icon.png create mode 100644 packages/addons/service/podman/package.mk diff --git a/packages/addons/service/podman/changelog.txt b/packages/addons/service/podman/changelog.txt new file mode 100644 index 0000000000..927b2407d4 --- /dev/null +++ b/packages/addons/service/podman/changelog.txt @@ -0,0 +1 @@ +initial release diff --git a/packages/addons/service/podman/icon/icon.png b/packages/addons/service/podman/icon/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..9e76aff5afdb9c47b760c7d77b70e86a0713f824 GIT binary patch literal 45646 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�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�lr{lNXGO(+DzfBNS1Ce~>;Jd+9dKD3+uNkv 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 literal 0 HcmV?d00001 diff --git a/packages/addons/service/podman/package.mk b/packages/addons/service/podman/package.mk new file mode 100644 index 0000000000..494a781595 --- /dev/null +++ b/packages/addons/service/podman/package.mk @@ -0,0 +1,44 @@ +# SPDX-License-Identifier: GPL-2.0-only +# Copyright (C) 2023-present Team LibreELEC (https://libreelec.tv) + +PKG_NAME="podman" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="Apache-2.0" +PKG_SITE="https://podman.io" +PKG_DEPENDS_TARGET="conmon gpgme podman-bin libseccomp netavark runc" +PKG_SECTION="service/system" +PKG_LONGDESC="Podman is a daemonless container engine for developing, managing, and running OCI Containers." +PKG_TOOLCHAIN="manual" + +PKG_IS_ADDON="yes" +PKG_ADDON_NAME="Podman" +PKG_ADDON_TYPE="xbmc.service" + +addon() { + mkdir -p ${ADDON_BUILD}/${PKG_ADDON_ID}/{bin,lib.private} + + # conmon + cp -P $(get_install_dir conmon)/usr/lib/podman/conmon ${ADDON_BUILD}/${PKG_ADDON_ID}/bin + + # gpgme + cp -L $(get_install_dir gpgme)/usr/lib/libgpgme.so.11 ${ADDON_BUILD}/${PKG_ADDON_ID}/lib.private + + # libseccomp + cp -L $(get_install_dir libseccomp)/usr/lib/libseccomp.so.2 ${ADDON_BUILD}/${PKG_ADDON_ID}/lib.private + + # netavark + cp -P $(get_install_dir netavark)/usr/local/libexec/podman/netavark ${ADDON_BUILD}/${PKG_ADDON_ID}/bin + + # podman + cp -P $(get_build_dir podman-bin)/bin/podman ${ADDON_BUILD}/${PKG_ADDON_ID}/bin + patchelf --add-rpath '$ORIGIN/../lib.private' ${ADDON_BUILD}/${PKG_ADDON_ID}/bin/podman + cp -P $(get_build_dir podman-bin)/bin/podman-remote ${ADDON_BUILD}/${PKG_ADDON_ID}/bin/podman-remote + + # runc + cp -P $(get_build_dir runc)/bin/runc ${ADDON_BUILD}/${PKG_ADDON_ID}/bin/runc +} + +post_install_addon() { + : +}