]> git.ipfire.org Git - thirdparty/mkosi.git/commitdiff
Make sure we mount cache and workspace writable when running package managers
authorDaan De Meyer <daan.j.demeyer@gmail.com>
Sat, 5 Aug 2023 11:04:12 +0000 (13:04 +0200)
committerDaan De Meyer <daan.j.demeyer@gmail.com>
Sat, 5 Aug 2023 11:37:19 +0000 (13:37 +0200)
mkosi/distributions/gentoo.py
mkosi/installer/apt.py
mkosi/installer/dnf.py
mkosi/installer/pacman.py
mkosi/installer/zypper.py

index a61627fe7ac7748dc50898c4ea999033a635dbb6..27d5722ba6a9a9642b8769afa7c6ca5f88d09986 100644 (file)
@@ -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)
 
index f090bbc105221abed6f14c17c077b371e5a0c685..4e4bf23b86f8b1ccaaf376078477e95852945b78 100644 (file)
@@ -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)
index 39375158819e22155887ee362af4649ea33ae7ad..1527ce3ea32ea51eb72a4927ced97210e92e2d8f 100644 (file)
@@ -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)
 
index dc4b49826753d2d50dd35d55764e311b13a4365e..ece74c38e29721d574ac400ce655c46612a26d50 100644 (file)
@@ -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)
index 86d62a4f14ce5b03666b2dd28e0187ad7391d96c..1a6d00a9b26490f7e643a8758a12c22f88a15b9d 100644 (file)
@@ -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)