From: Daan De Meyer Date: Sat, 5 Aug 2023 11:04:12 +0000 (+0200) Subject: Make sure we mount cache and workspace writable when running package managers X-Git-Tag: v15~38 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=bd2379e678f6bb76975e38edc87c0aa596711854;p=thirdparty%2Fmkosi.git Make sure we mount cache and workspace writable when running package managers --- diff --git a/mkosi/distributions/gentoo.py b/mkosi/distributions/gentoo.py index a61627fe7..27d5722ba 100644 --- a/mkosi/distributions/gentoo.py +++ b/mkosi/distributions/gentoo.py @@ -14,7 +14,7 @@ from mkosi.run import apivfs_cmd, bwrap, chroot_cmd, run from mkosi.state import MkosiState from mkosi.tree import copy_tree, rmtree from mkosi.types import PathString -from mkosi.util import sort_packages +from mkosi.util import flatten, sort_packages def invoke_emerge(state: MkosiState, packages: Sequence[str] = (), apivfs: bool = True) -> None: @@ -47,6 +47,7 @@ def invoke_emerge(state: MkosiState, packages: Sequence[str] = (), apivfs: bool "--bind", state.cache_dir / "stage3/var", "/var", "--ro-bind", "/etc/resolv.conf", "/etc/resolv.conf", "--bind", state.cache_dir / "repos", "/var/db/repos", + *flatten(["--bind", str(d), str(d)] for d in (state.config.workspace_dir, state.config.cache_dir) if d), ], env=dict( PKGDIR=str(state.cache_dir / "binpkgs"), @@ -150,7 +151,8 @@ class GentooInstaller(DistributionInstaller): network=True, ) - bwrap(cmd=chroot + ["emerge-webrsync"]) + bwrap(cmd=chroot + ["emerge-webrsync"], + options=flatten(["--bind", d, d] for d in (state.config.workspace_dir, state.config.cache_dir) if d)) invoke_emerge(state, packages=["sys-apps/baselayout"], apivfs=False) diff --git a/mkosi/installer/apt.py b/mkosi/installer/apt.py index f090bbc10..4e4bf23b8 100644 --- a/mkosi/installer/apt.py +++ b/mkosi/installer/apt.py @@ -6,7 +6,7 @@ from collections.abc import Sequence from mkosi.run import apivfs_cmd, bwrap from mkosi.state import MkosiState from mkosi.types import PathString -from mkosi.util import sort_packages +from mkosi.util import flatten, sort_packages def setup_apt(state: MkosiState, repos: Sequence[str]) -> None: @@ -105,4 +105,6 @@ def invoke_apt( apivfs: bool = True, ) -> None: cmd = apivfs_cmd(state.root) if apivfs else [] - bwrap(cmd + apt_cmd(state, command) + [operation, *sort_packages(packages)], env=state.config.environment) + bwrap(cmd + apt_cmd(state, command) + [operation, *sort_packages(packages)], + options=flatten(["--bind", d, d] for d in (state.config.workspace_dir, state.config.cache_dir) if d), + env=state.config.environment) diff --git a/mkosi/installer/dnf.py b/mkosi/installer/dnf.py index 393751588..1527ce3ea 100644 --- a/mkosi/installer/dnf.py +++ b/mkosi/installer/dnf.py @@ -10,7 +10,7 @@ from mkosi.run import apivfs_cmd, bwrap from mkosi.state import MkosiState from mkosi.tree import rmtree from mkosi.types import PathString -from mkosi.util import sort_packages +from mkosi.util import flatten, sort_packages class Repo(NamedTuple): @@ -115,7 +115,9 @@ def dnf_cmd(state: MkosiState) -> list[PathString]: def invoke_dnf(state: MkosiState, command: str, packages: Iterable[str], apivfs: bool = True) -> None: cmd = apivfs_cmd(state.root) if apivfs else [] - bwrap(cmd + dnf_cmd(state) + [command, *sort_packages(packages)], env=state.config.environment) + bwrap(cmd + dnf_cmd(state) + [command, *sort_packages(packages)], + options=flatten(["--bind", d, d] for d in (state.config.workspace_dir, state.config.cache_dir) if d), + env=state.config.environment) fixup_rpmdb_location(state.root) diff --git a/mkosi/installer/pacman.py b/mkosi/installer/pacman.py index dc4b49826..ece74c38e 100644 --- a/mkosi/installer/pacman.py +++ b/mkosi/installer/pacman.py @@ -8,7 +8,7 @@ from mkosi.config import ConfigFeature from mkosi.run import apivfs_cmd, bwrap from mkosi.state import MkosiState from mkosi.types import PathString -from mkosi.util import sort_packages +from mkosi.util import flatten, sort_packages def setup_pacman(state: MkosiState) -> None: @@ -111,4 +111,6 @@ def pacman_cmd(state: MkosiState) -> list[PathString]: def invoke_pacman(state: MkosiState, packages: Sequence[str], apivfs: bool = True) -> None: cmd = apivfs_cmd(state.root) if apivfs else [] - bwrap(cmd + pacman_cmd(state) + ["-Sy", *sort_packages(packages)], env=state.config.environment) + bwrap(cmd + pacman_cmd(state) + ["-Sy", *sort_packages(packages)], + options=flatten(["--bind", d, d] for d in (state.config.workspace_dir, state.config.cache_dir) if d), + env=state.config.environment) diff --git a/mkosi/installer/zypper.py b/mkosi/installer/zypper.py index 86d62a4f1..1a6d00a9b 100644 --- a/mkosi/installer/zypper.py +++ b/mkosi/installer/zypper.py @@ -6,7 +6,7 @@ from mkosi.installer.dnf import Repo, fixup_rpmdb_location from mkosi.run import apivfs_cmd, bwrap from mkosi.state import MkosiState from mkosi.types import PathString -from mkosi.util import sort_packages +from mkosi.util import flatten, sort_packages def setup_zypper(state: MkosiState, repos: Sequence[Repo]) -> None: @@ -69,6 +69,8 @@ def invoke_zypper( apivfs: bool = True, ) -> None: cmd = apivfs_cmd(state.root) if apivfs else [] - bwrap(cmd + zypper_cmd(state) + [verb, *sort_packages(packages), *options], env=state.config.environment) + bwrap(cmd + zypper_cmd(state) + [verb, *sort_packages(packages), *options], + options=flatten(["--bind", d, d] for d in (state.config.workspace_dir, state.config.cache_dir) if d), + env=state.config.environment) fixup_rpmdb_location(state.root)