From: Daan De Meyer Date: Fri, 1 Dec 2023 09:30:42 +0000 (+0100) Subject: Implement RemovePackages= for Arch X-Git-Tag: v20~117 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=e1d59fd9ac7f23a1e7e5ef6ebd5a3ed0d6608c47;p=thirdparty%2Fmkosi.git Implement RemovePackages= for Arch --- diff --git a/mkosi/distributions/arch.py b/mkosi/distributions/arch.py index 35644e1ae..01cd7dc36 100644 --- a/mkosi/distributions/arch.py +++ b/mkosi/distributions/arch.py @@ -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: diff --git a/mkosi/installer/pacman.py b/mkosi/installer/pacman.py index e96d7e280..6e7938cd4 100644 --- a/mkosi/installer/pacman.py +++ b/mkosi/installer/pacman.py @@ -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)