From: Daan De Meyer Date: Tue, 9 Jul 2024 12:08:02 +0000 (+0200) Subject: Decouple local repository from package directory X-Git-Tag: v24~46^2~2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=34f6ea5961a90fc6075ae20a74ffa0e1bf9217b9;p=thirdparty%2Fmkosi.git Decouple local repository from package directory 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. --- diff --git a/mkosi/__init__.py b/mkosi/__init__.py index 16c9913da..0bbb42c15 100644 --- a/mkosi/__init__.py +++ b/mkosi/__init__.py @@ -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 diff --git a/mkosi/context.py b/mkosi/context.py index cf4d20322..2bbec1258 100644 --- a/mkosi/context.py +++ b/mkosi/context.py @@ -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()) diff --git a/mkosi/distributions/debian.py b/mkosi/distributions/debian.py index 492eaed0b..95c7afa5f 100644 --- a/mkosi/distributions/debian.py +++ b/mkosi/distributions/debian.py @@ -161,12 +161,12 @@ class Installer(DistributionInstaller): for deb in essential: # If a deb path is in the form of "/var/cache/apt/", 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) diff --git a/mkosi/installer/__init__.py b/mkosi/installer/__init__.py index b79f89cf4..94eaf920d 100644 --- a/mkosi/installer/__init__.py +++ b/mkosi/installer/__init__.py @@ -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://")): diff --git a/mkosi/installer/apt.py b/mkosi/installer/apt.py index 41415d806..91a97b140 100644 --- a/mkosi/installer/apt.py +++ b/mkosi/installer/apt.py @@ -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 diff --git a/mkosi/installer/dnf.py b/mkosi/installer/dnf.py index 93bc0829f..331909c47 100644 --- a/mkosi/installer/dnf.py +++ b/mkosi/installer/dnf.py @@ -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 diff --git a/mkosi/installer/pacman.py b/mkosi/installer/pacman.py index 9643b4dbb..b5ff4c52d 100644 --- a/mkosi/installer/pacman.py +++ b/mkosi/installer/pacman.py @@ -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" ) diff --git a/mkosi/installer/zypper.py b/mkosi/installer/zypper.py index b8022beb3..ed8ec527d 100644 --- a/mkosi/installer/zypper.py +++ b/mkosi/installer/zypper.py @@ -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