]> git.ipfire.org Git - thirdparty/mkosi.git/commitdiff
gentoo: leverage cache for artifacts
authorPaymon MARANDI <Paymon MARANDI darwinskernel@gmail.com>
Sat, 13 May 2023 15:05:33 +0000 (11:05 -0400)
committerPaymon MARANDI <darwinskernel@gmail.com>
Fri, 23 Jun 2023 13:31:40 +0000 (09:31 -0400)
this will help to speedup incremental builds as well as initrd
same for syncing ebuild repos distfiles (source file for pkgs)

also resulting image will not include binpkgs and distfiles which would
reduce the size by great deal; this is required for initrd support.

Signed-off-by: Paymon MARANDI <darwinskernel@gmail.com>
mkosi/distributions/gentoo.py

index b455119ceba7d2fb7686ff1682b0d0da29673530..75f0b8a30414c3007a68b4354d8d6375895acd48 100644 (file)
@@ -38,7 +38,13 @@ def invoke_emerge(
     else:
         emerge_default_opts += ["--quiet-build", "--quiet"]
     cmd = ["emerge", *pkgs, *emerge_default_opts, *opts, *actions]
-    run_workspace_command(state.root, cmd, network=True, env=state.environment)
+    bwrap_params = [
+        "--bind", state.cache / "binpkgs", "/var/cache/binpkgs",
+        "--bind", state.cache / "distfiles", "/var/cache/distfiles",
+        "--bind", state.cache / "repos", "/var/db/repos",
+    ]
+    run_workspace_command(state.root, cmd, bwrap_params=bwrap_params,
+                          network=True, env=state.environment)
 
 
 class Gentoo:
@@ -179,6 +185,9 @@ class Gentoo:
             "USE": " ".join(self.portage_use_flags),
         }
 
+        for d in ("binpkgs", "distfiles", "repos"):
+            self.state.cache.joinpath(d).mkdir(exist_ok=True)
+
         self.fetch_fix_stage3()
         self.set_useflags()
         self.mkosi_conf()
@@ -296,7 +305,9 @@ class Gentoo:
         )
 
     def get_snapshot_of_portage_tree(self) -> None:
-        run_workspace_command(self.state.root, ["/usr/bin/emerge-webrsync"], network=True,
+        bwrap_params = ["--bind", self.state.cache / "repos", "/var/db/repos"]
+        run_workspace_command(self.state.root, ["/usr/bin/emerge-webrsync"],
+                              bwrap_params=bwrap_params, network=True,
                               env=self.state.environment)
 
     def update_stage3(self) -> None: