From b3d6e69d8e01e0fcaf8409935ebe8ebf95d546c3 Mon Sep 17 00:00:00 2001 From: DaanDeMeyer Date: Sat, 5 Jul 2025 16:09:38 +0200 Subject: [PATCH] Do not try to install packages that are listed in RemovePackages= This allows using RemovePackages= in mkosi.local.conf to prevent certain packages listed in the regular configuration from being installed in the first place. We also add RemovePackages= to the cache manifest because it now affects the cached images. --- mkosi/__init__.py | 21 ++++++++++++--------- mkosi/config.py | 1 + 2 files changed, 13 insertions(+), 9 deletions(-) diff --git a/mkosi/__init__.py b/mkosi/__init__.py index c4a3564a2..415e2b6a0 100644 --- a/mkosi/__init__.py +++ b/mkosi/__init__.py @@ -244,18 +244,23 @@ def remove_files(context: Context) -> None: t.rmdir() +def finalize_packages(config: Config) -> list[str]: + s = set(config.remove_packages) + return [p for p in config.packages if p not in s] + + def install_distribution(context: Context) -> None: + packages = finalize_packages(context.config) + if context.config.base_trees: - if not context.config.packages: + if not packages: return with complete_step(f"Installing extra packages for {context.config.distribution.pretty_name()}"): - context.config.distribution.package_manager(context.config).install( - context, context.config.packages - ) + context.config.distribution.package_manager(context.config).install(context, packages) else: if context.config.overlay or context.config.output_format.is_extension_image(): - if context.config.packages: + if packages: die( "Cannot install packages in extension images without a base tree", hint="Configure a base tree with the BaseTrees= setting", @@ -290,10 +295,8 @@ def install_distribution(context: Context) -> None: with umask(~0o600): (context.root / "boot/loader/entries.srel").write_text("type1\n") - if context.config.packages: - context.config.distribution.package_manager(context.config).install( - context, context.config.packages - ) + if packages: + context.config.distribution.package_manager(context.config).install(context, packages) for f in ( "var/lib/systemd/random-seed", diff --git a/mkosi/config.py b/mkosi/config.py index b30e94a0b..70406282c 100644 --- a/mkosi/config.py +++ b/mkosi/config.py @@ -2329,6 +2329,7 @@ class Config: ), "packages": sorted(self.packages), "build_packages": sorted(self.build_packages), + "remove_packages": sorted(self.remove_packages), "package_directories": [ (p.name, p.stat().st_mtime_ns) for d in self.package_directories -- 2.47.2