]> git.ipfire.org Git - thirdparty/mkosi.git/commitdiff
Do not try to install packages that are listed in RemovePackages= 3797/head
authorDaanDeMeyer <daan.j.demeyer@gmail.com>
Sat, 5 Jul 2025 14:09:38 +0000 (16:09 +0200)
committerDaanDeMeyer <daan.j.demeyer@gmail.com>
Sat, 5 Jul 2025 20:30:44 +0000 (22:30 +0200)
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
mkosi/config.py

index c4a3564a2258d94417440ec7ff36c2654ffb65ef..415e2b6a040c9c084fc59d87f0af272b239dd221 100644 (file)
@@ -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",
index b30e94a0b561ea0f51646939fa2c4a00461cfe33..70406282c3727e75a1ae01188f6350c93ab6a0f2 100644 (file)
@@ -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