]> git.ipfire.org Git - thirdparty/mkosi.git/commitdiff
Implement RemovePackages= for Arch
authorDaan De Meyer <daan.j.demeyer@gmail.com>
Fri, 1 Dec 2023 09:30:42 +0000 (10:30 +0100)
committerDaan De Meyer <daan.j.demeyer@gmail.com>
Fri, 1 Dec 2023 11:43:24 +0000 (12:43 +0100)
mkosi/distributions/arch.py
mkosi/installer/pacman.py

index 35644e1aecf01c9d850457409e5a1bbd7824c450..01cd7dc36367e60faeff57ca6c7aed03d117efa8 100644 (file)
@@ -3,6 +3,7 @@
 from collections.abc import Sequence
 
 from mkosi.architecture import Architecture
+from mkosi.config import ConfigFeature
 from mkosi.distributions import Distribution, DistributionInstaller, PackageType
 from mkosi.installer.pacman import invoke_pacman, setup_pacman
 from mkosi.log import die
@@ -82,7 +83,18 @@ class Installer(DistributionInstaller):
 
     @classmethod
     def install_packages(cls, state: MkosiState, packages: Sequence[str], apivfs: bool = True) -> None:
-        invoke_pacman(state, packages, apivfs=apivfs)
+        options = ["--refresh", "--needed"]
+
+        # If we're generating a bootable image, we'll do so with a prebuilt initramfs, so no need for an
+        # initramfs generator.
+        if state.config.bootable != ConfigFeature.disabled:
+            options += ["--assume-installed", "initramfs"]
+
+        invoke_pacman(state, "--sync", options, packages, apivfs=apivfs)
+
+    @classmethod
+    def remove_packages(cls, state: MkosiState, packages: Sequence[str]) -> None:
+        invoke_pacman(state, "--remove", ["--nosave", "--recursive"], packages)
 
     @staticmethod
     def architecture(arch: Architecture) -> str:
index e96d7e280511187300eb5f8aca0ff44cc6768d24..6e7938cd4e126626d1fd31363f464efed66c0d7e 100644 (file)
@@ -4,7 +4,6 @@ from collections.abc import Sequence
 from pathlib import Path
 
 from mkosi.architecture import Architecture
-from mkosi.config import ConfigFeature
 from mkosi.run import apivfs_cmd, bwrap
 from mkosi.state import MkosiState
 from mkosi.types import PathString
@@ -90,7 +89,7 @@ def pacman_cmd(state: MkosiState) -> list[PathString]:
     with umask(~0o755):
         (state.cache_dir / "pacman/pkg").mkdir(parents=True, exist_ok=True)
 
-    cmdline: list[PathString] = [
+    return [
         "pacman",
         "--config", state.pkgmngr / "etc/pacman.conf",
         "--root", state.root,
@@ -101,18 +100,16 @@ def pacman_cmd(state: MkosiState) -> list[PathString]:
         "--arch", state.config.distribution.architecture(state.config.architecture),
         "--color", "auto",
         "--noconfirm",
-        "--needed",
     ]
 
-    # If we're generating a bootable image, we'll do so with a prebuilt initramfs, so no need for an
-    # initramfs generator.
-    if state.config.bootable != ConfigFeature.disabled:
-        cmdline += ["--assume-installed", "initramfs"]
 
-    return cmdline
-
-
-def invoke_pacman(state: MkosiState, packages: Sequence[str], apivfs: bool = True) -> None:
+def invoke_pacman(
+    state: MkosiState,
+    operation: str,
+    options: Sequence[str] = (),
+    packages: Sequence[str] = (),
+    apivfs: bool = True,
+) -> None:
     cmd = apivfs_cmd(state.root) if apivfs else []
-    bwrap(cmd + pacman_cmd(state) + ["-Sy", *sort_packages(packages)],
+    bwrap(cmd + pacman_cmd(state) + [operation, *options, *sort_packages(packages)],
           network=True, env=state.config.environment)