]> git.ipfire.org Git - thirdparty/mkosi.git/commitdiff
Decouple local repository from package directory
authorDaan De Meyer <daan.j.demeyer@gmail.com>
Tue, 9 Jul 2024 12:08:02 +0000 (14:08 +0200)
committerDaan De Meyer <daan.j.demeyer@gmail.com>
Tue, 9 Jul 2024 12:23:51 +0000 (14:23 +0200)
In preparation for the next commit, let's decouple the location of
the local repository from the location of the package directory where
scripts can look for packages.

mkosi/__init__.py
mkosi/context.py
mkosi/distributions/debian.py
mkosi/installer/__init__.py
mkosi/installer/apt.py
mkosi/installer/dnf.py
mkosi/installer/pacman.py
mkosi/installer/zypper.py

index 16c9913dae5ec74757fbb5930814c692ae1bace7..0bbb42c1503a153682fd02290a1fb8f9594b209c 100644 (file)
@@ -591,6 +591,7 @@ def run_prepare_scripts(context: Context, build: bool) -> None:
                             Mount(json, "/work/config.json", ro=True),
                             Mount(context.root, "/buildroot"),
                             Mount(context.artifacts, "/work/artifacts"),
+                            Mount(context.repository, "/work/packages"),
                             *context.config.distribution.package_manager(context.config).mounts(context),
                         ],
                         options=["--dir", "/work/src", "--chdir", "/work/src"],
@@ -673,6 +674,7 @@ def run_build_scripts(context: Context) -> None:
                             Mount(context.install_dir, "/work/dest"),
                             Mount(context.staging, "/work/out"),
                             Mount(context.artifacts, "/work/artifacts"),
+                            Mount(context.repository, "/work/packages"),
                             *(
                                 [Mount(context.config.build_dir, "/work/build")]
                                 if context.config.build_dir
@@ -750,6 +752,7 @@ def run_postinst_scripts(context: Context) -> None:
                             Mount(context.root, "/buildroot"),
                             Mount(context.staging, "/work/out"),
                             Mount(context.artifacts, "/work/artifacts"),
+                            Mount(context.repository, "/work/packages"),
                             *context.config.distribution.package_manager(context.config).mounts(context),
                         ],
                         options=["--dir", "/work/src", "--chdir", "/work/src"],
@@ -816,6 +819,7 @@ def run_finalize_scripts(context: Context) -> None:
                             Mount(context.root, "/buildroot"),
                             Mount(context.staging, "/work/out"),
                             Mount(context.artifacts, "/work/artifacts"),
+                            Mount(context.repository, "/work/packages"),
                             *context.config.distribution.package_manager(context.config).mounts(context),
                         ],
                         options=["--dir", "/work/src", "--chdir", "/work/src"],
@@ -1655,7 +1659,7 @@ def install_package_directories(context: Context) -> None:
     with complete_step("Copying in extra packages…"):
         for d in context.config.package_directories:
             for p in itertools.chain(*(d.glob(glob) for glob in PACKAGE_GLOBS)):
-                shutil.copy(p, context.packages, follow_symlinks=True)
+                shutil.copy(p, context.repository, follow_symlinks=True)
 
     if context.want_local_repo():
         with complete_step("Building local package repository"):
@@ -1830,7 +1834,7 @@ def build_default_initrd(context: Context) -> Path:
         context.config,
         resources=context.resources,
         output_dir=context.workspace,
-        package_dir=context.packages,
+        package_dir=context.repository,
     )
 
     assert config.output_dir
index cf4d20322867a92594103cf3829eabbace3fb13e..2bbec125858836784399de5fe6624dff570e41f1 100644 (file)
@@ -44,7 +44,7 @@ class Context:
 
         self.staging.mkdir()
         self.pkgmngr.mkdir()
-        self.packages.mkdir()
+        self.repository.mkdir()
         self.artifacts.mkdir()
         self.install_dir.mkdir()
 
@@ -61,8 +61,8 @@ class Context:
         return self.workspace / "pkgmngr"
 
     @property
-    def packages(self) -> Path:
-        return self.workspace / "packages"
+    def repository(self) -> Path:
+        return self.workspace / "repository"
 
     @property
     def artifacts(self) -> Path:
@@ -117,4 +117,4 @@ class Context:
         )
 
     def want_local_repo(self) -> bool:
-        return any(self.packages.iterdir())
+        return any(self.repository.iterdir())
index 492eaed0bbffee6e20f5a1082ddc61524b6a28e9..95c7afa5f66a4ddb412e3b213b0008b1441f885f 100644 (file)
@@ -161,12 +161,12 @@ class Installer(DistributionInstaller):
 
         for deb in essential:
             # If a deb path is in the form of "/var/cache/apt/<deb>", we transform it to the corresponding path in
-            # mkosi's package cache directory. If it's relative to /work/packages, we transform it to the corresponding
+            # mkosi's package cache directory. If it's relative to /repository, we transform it to the corresponding
             # path in mkosi's local package repository. Otherwise, we use the path as is.
             if Path(deb).is_relative_to("/var/cache"):
                 path = context.config.package_cache_dir_or_default() / Path(deb).relative_to("/var")
-            elif Path(deb).is_relative_to("/work/packages"):
-                path = context.packages / Path(deb).relative_to("/work/packages")
+            elif Path(deb).is_relative_to("/repository"):
+                path = context.repository / Path(deb).relative_to("/repository")
             else:
                 path = Path(deb)
 
index b79f89cf41a105dbbab5f2aba63d4a30c1735dc1..94eaf920d1526e4f560c11476644f9e55c13c92f 100644 (file)
@@ -54,7 +54,7 @@ class PackageManager:
     def mounts(cls, context: Context) -> list[Mount]:
         mounts = [
             *finalize_crypto_mounts(context.config),
-            Mount(context.packages, "/work/packages"),
+            Mount(context.repository, "/repository"),
         ]
 
         if context.config.local_mirror and (mirror := startswith(context.config.local_mirror, "file://")):
index 41415d806eb6d93a76a887536014d750162599bc..91a97b1406a63fb2c08a5d8261249e0e4174083e 100644 (file)
@@ -237,7 +237,7 @@ class Apt(PackageManager):
 
     @classmethod
     def createrepo(cls, context: Context) -> None:
-        if not (conf := context.packages / "conf/distributions").exists():
+        if not (conf := context.repository / "conf/distributions").exists():
             conf.parent.mkdir(exist_ok=True)
             conf.write_text(
                 textwrap.dedent(
@@ -258,13 +258,13 @@ class Apt(PackageManager):
                 "--ignore=extension",
                 "includedeb",
                 "mkosi",
-                *(d.name for d in context.packages.glob("*.deb")),
-                *(d.name for d in context.packages.glob("*.ddeb")),
+                *(d.name for d in context.repository.glob("*.deb")),
+                *(d.name for d in context.repository.glob("*.ddeb")),
             ],
             sandbox=context.sandbox(
                 binary="reprepro",
-                mounts=[Mount(context.packages, context.packages)],
-                options=["--chdir", context.packages],
+                mounts=[Mount(context.repository, context.repository)],
+                options=["--chdir", context.repository],
             ),
         )
 
@@ -274,7 +274,7 @@ class Apt(PackageManager):
                 """\
                 Enabled: yes
                 Types: deb
-                URIs: file:///work/packages
+                URIs: file:///repository
                 Suites: mkosi
                 Components: main
                 Trusted: yes
index 93bc0829f2c53f7496e218b4bdf0423cf5c9c5c8..331909c473a6ea63827ba77b9973cf1b736f2f2b 100644 (file)
@@ -229,15 +229,15 @@ class Dnf(PackageManager):
 
     @classmethod
     def createrepo(cls, context: Context) -> None:
-        run(["createrepo_c", context.packages],
-            sandbox=context.sandbox(binary="createrepo_c", mounts=[Mount(context.packages, context.packages)]))
+        run(["createrepo_c", context.repository],
+            sandbox=context.sandbox(binary="createrepo_c", mounts=[Mount(context.repository, context.repository)]))
 
         (context.pkgmngr / "etc/yum.repos.d/mkosi-local.repo").write_text(
             textwrap.dedent(
                 """\
                 [mkosi]
                 name=mkosi
-                baseurl=file:///work/packages
+                baseurl=file:///repository
                 gpgcheck=0
                 metadata_expire=never
                 priority=10
index 9643b4dbb13354aa11feccd08eaddb06b706125a..b5ff4c52d773207ae6c02fd32446e152a8f56535 100644 (file)
@@ -53,7 +53,7 @@ class Pacman(PackageManager):
             *super().mounts(context),
             # pacman writes downloaded packages to the first writable cache directory. We don't want it to write to our
             # local repository directory so we expose it as a read-only directory to pacman.
-            Mount(context.packages, "/var/cache/pacman/mkosi", ro=True),
+            Mount(context.repository, "/var/cache/pacman/mkosi", ro=True),
         ]
 
         if (context.root / "var/lib/pacman/local").exists():
@@ -198,10 +198,10 @@ class Pacman(PackageManager):
             [
                 "repo-add",
                 "--quiet",
-                context.packages / "mkosi.db.tar",
-                *sorted(context.packages.glob("*.pkg.tar*"), key=lambda p: GenericVersion(Path(p).name))
+                context.repository / "mkosi.db.tar",
+                *sorted(context.repository.glob("*.pkg.tar*"), key=lambda p: GenericVersion(Path(p).name))
             ],
-            sandbox=context.sandbox(binary="repo-add", mounts=[Mount(context.packages, context.packages)]),
+            sandbox=context.sandbox(binary="repo-add", mounts=[Mount(context.repository, context.repository)]),
         )
 
         (context.pkgmngr / "etc/mkosi-local.conf").write_text(
@@ -217,6 +217,6 @@ class Pacman(PackageManager):
 
         # pacman can't sync a single repository, so we go behind its back and do it ourselves.
         shutil.move(
-            context.packages / "mkosi.db.tar",
+            context.repository / "mkosi.db.tar",
             context.package_cache_dir / "lib/pacman/sync/mkosi.db"
         )
index b8022beb3e6c9ba5f2dfd0b9409bbcd653ba19e9..ed8ec527d08ea81297a9feb297820559b4596a4a 100644 (file)
@@ -154,15 +154,15 @@ class Zypper(PackageManager):
 
     @classmethod
     def createrepo(cls, context: Context) -> None:
-        run(["createrepo_c", context.packages],
-            sandbox=context.sandbox(binary="createrepo_c", mounts=[Mount(context.packages, context.packages)]))
+        run(["createrepo_c", context.repository],
+            sandbox=context.sandbox(binary="createrepo_c", mounts=[Mount(context.repository, context.repository)]))
 
         (context.pkgmngr / "etc/zypp/repos.d/mkosi-local.repo").write_text(
             textwrap.dedent(
                 """\
                 [mkosi]
                 name=mkosi
-                baseurl=file:///work/packages
+                baseurl=file:///repository
                 gpgcheck=0
                 autorefresh=0
                 keeppackages=0