From 8da789e8af466370f0f91b5a2a40fce3d623e22a Mon Sep 17 00:00:00 2001 From: Daan De Meyer Date: Thu, 6 Apr 2023 13:24:46 +0200 Subject: [PATCH] Drop --base-packages option It's not necessary anymore now that we don't install any packages by default anymore. --- NEWS.md | 2 ++ mkosi.md | 22 ---------------------- mkosi/__init__.py | 5 ----- mkosi/backend.py | 18 ------------------ mkosi/config.py | 22 ---------------------- mkosi/distributions/arch.py | 7 ++----- mkosi/distributions/centos.py | 7 ++----- mkosi/distributions/debian.py | 16 +++------------- mkosi/distributions/fedora.py | 13 ++----------- mkosi/distributions/mageia.py | 7 ++----- mkosi/distributions/openmandriva.py | 7 ++----- mkosi/distributions/opensuse.py | 9 ++------- 12 files changed, 17 insertions(+), 118 deletions(-) diff --git a/NEWS.md b/NEWS.md index dc0849ec3..fb96b5a39 100644 --- a/NEWS.md +++ b/NEWS.md @@ -62,6 +62,8 @@ extra/skeleton trees are defined. - mkosi doesn't install any default packages anymore aside from the base filesystem layout package. In practice, this means systemd and other basic tools have to be installed explicitly from now on. +- Removed `--base-packages` as it's not needed anymore since we don't install any packages by default anymore + aside from the base filesystem layout package. - Removed `--qcow2` option in favor of supporting only raw disk images as the disk image output format. - Removed `--bmap` option as it can be trivially added manually by utilizing a finalize script. - The `never` value for `--with-network` was spun of into its own custom option `--cache-only`. diff --git a/mkosi.md b/mkosi.md index 2b7d0bc09..03ad23775 100644 --- a/mkosi.md +++ b/mkosi.md @@ -509,28 +509,6 @@ a boolean argument: either "1", "yes", or "true" to enable, or "0", ### [Content] Section -`BasePackages=`, `--base-packages` - -: Takes a boolean or the special value `conditional`. If true, - automatically install packages to ensure basic functionality, as - appropriate for the given image type. For example, `systemd` is - always included, `systemd-udev` and `dracut` if the image is - bootable, and so on. - -: If false, only packages specified with `Packages=` will be - installed. - -: If `conditional`, the list of packages to install will be extended - with boolean dependencies - (c.f. https://rpm.org/user_doc/boolean_dependencies.html), to - install specific packages when *other* packages are in the list. For - example, `systemd-udev` may be automatically included if the image - is bootable and `systemd` is installed. With this, various "base" - packages still need to be specified if they should be included, but - the corresponding "extension" packages will be added automatically - when appropriate. This feature depends on support in the package - manager, so it is not implemented for all distributions. - `Packages=`, `--package=`, `-p` : Install the specified distribution packages (i.e. RPM, DEB, …) in the diff --git a/mkosi/__init__.py b/mkosi/__init__.py index 6aa218885..9e4e41f32 100644 --- a/mkosi/__init__.py +++ b/mkosi/__init__.py @@ -1217,11 +1217,6 @@ def load_args(args: argparse.Namespace) -> MkosiConfig: if args.repo_dirs and not (is_dnf_distribution(args.distribution) or args.distribution == Distribution.arch): die("--repo-dir is only supported on DNF based distributions and Arch") - # If we are building a sysext we don't want to add base packages to the - # extension image, as they will already be in the base image. - if args.base_image is not None: - args.base_packages = False - if args.qemu_kvm is True and not qemu_check_kvm_support(): die("Sorry, the host machine does not support KVM acceleration.") diff --git a/mkosi/backend.py b/mkosi/backend.py index 49c3d28da..fc3e4e534 100644 --- a/mkosi/backend.py +++ b/mkosi/backend.py @@ -230,7 +230,6 @@ class MkosiConfig: tar_strip_selinux_context: bool incremental: bool cache_initrd: bool - base_packages: Union[str, bool] packages: list[str] remove_packages: list[str] with_docs: bool @@ -452,23 +451,6 @@ def safe_tar_extract(tar: tarfile.TarFile, path: Path=Path("."), *, numeric_owne tar.extractall(path, members=members, numeric_owner=numeric_owner) -def add_packages( - config: MkosiConfig, packages: list[str], *names: str, conditional: Optional[str] = None -) -> None: - - """Add packages in @names to @packages, if enabled by --base-packages. - - If @conditional is specified, rpm-specific syntax for boolean - dependencies will be used to include @names if @conditional is - satisfied. - """ - assert config.base_packages is True or config.base_packages is False or config.base_packages == "conditional" - - if config.base_packages is True or (config.base_packages == "conditional" and conditional): - for name in names: - packages.append(f"({name} if {conditional})" if conditional else name) - - def sort_packages(packages: Iterable[str]) -> list[str]: """Sorts packages: normal first, paths second, conditional third""" diff --git a/mkosi/config.py b/mkosi/config.py index 0c4487f8a..207abcfd4 100644 --- a/mkosi/config.py +++ b/mkosi/config.py @@ -105,16 +105,6 @@ def config_parse_compression(dest: str, value: Optional[str], namespace: argpars return parse_boolean(value) if value else None -def config_parse_base_packages(dest: str, value: Optional[str], namespace: argparse.Namespace) -> Union[bool, str]: - if dest in namespace: - return getattr(namespace, dest) # type: ignore - - if value == "conditional": - return value - - return parse_boolean(value) if value else False - - def config_default_release(namespace: argparse.Namespace) -> Any: # If we encounter Release in [Match] and no distribution has been set yet, configure the default # distribution as well since the default release depends on the selected distribution. @@ -477,12 +467,6 @@ class MkosiConfigParser: section="Output", parse=config_make_list_parser(delimiter=",", parse=make_path_parser(required=False)), ), - MkosiConfigSetting( - dest="base_packages", - section="Content", - parse=config_parse_base_packages, - default=True, - ), MkosiConfigSetting( dest="packages", section="Content", @@ -1036,12 +1020,6 @@ class MkosiConfigParser: ) group = parser.add_argument_group("Content options") - group.add_argument( - "--base-packages", - metavar="OPTION", - help="Automatically inject basic packages in the system (systemd, kernel, …)", - action=action, - ) group.add_argument( "-p", "--package", metavar="PACKAGE", diff --git a/mkosi/distributions/arch.py b/mkosi/distributions/arch.py index f5d1bd00a..df7ffbb10 100644 --- a/mkosi/distributions/arch.py +++ b/mkosi/distributions/arch.py @@ -3,7 +3,7 @@ from collections.abc import Sequence from textwrap import dedent -from mkosi.backend import MkosiState, add_packages, sort_packages +from mkosi.backend import MkosiState, sort_packages from mkosi.distributions import DistributionInstaller from mkosi.log import complete_step from mkosi.run import run_with_apivfs @@ -86,10 +86,7 @@ def install_arch(state: MkosiState) -> None: for d in state.config.repo_dirs: f.write(f"Include = {d}/*\n") - packages = state.config.packages.copy() - add_packages(state.config, packages, "filesystem") - - invoke_pacman(state, packages) + invoke_pacman(state, ["filesystem", *state.config.packages]) def invoke_pacman(state: MkosiState, packages: Sequence[str]) -> None: diff --git a/mkosi/distributions/centos.py b/mkosi/distributions/centos.py index 0487fa309..938518663 100644 --- a/mkosi/distributions/centos.py +++ b/mkosi/distributions/centos.py @@ -4,7 +4,7 @@ import shutil from collections.abc import Sequence from pathlib import Path -from mkosi.backend import Distribution, MkosiConfig, MkosiState, add_packages +from mkosi.backend import Distribution, MkosiConfig, MkosiState from mkosi.distributions import DistributionInstaller from mkosi.distributions.fedora import Repo, invoke_dnf, setup_dnf from mkosi.log import complete_step, die @@ -94,10 +94,7 @@ class CentosInstaller(DistributionInstaller): else: env = {} - packages = state.config.packages.copy() - add_packages(state.config, packages, "filesystem") - - invoke_dnf(state, "install", packages, env) + invoke_dnf(state, "install", ["filesystem", *state.config.packages], env) syslog = state.root.joinpath("etc/systemd/system/syslog.service") if release <= 8 and syslog.is_symlink(): diff --git a/mkosi/distributions/debian.py b/mkosi/distributions/debian.py index ab1b90d11..ca83ccdd5 100644 --- a/mkosi/distributions/debian.py +++ b/mkosi/distributions/debian.py @@ -7,7 +7,7 @@ from collections.abc import Iterable, Sequence from pathlib import Path from textwrap import dedent -from mkosi.backend import MkosiState, add_packages +from mkosi.backend import MkosiState from mkosi.distributions import DistributionInstaller from mkosi.install import install_skeleton_trees from mkosi.run import run, run_with_apivfs @@ -67,12 +67,6 @@ class DebianInstaller(DistributionInstaller): # Pretend we're lxc so debootstrap skips its mknod check. run_with_apivfs(state, cmdline, env=dict(container="lxc")) - # Install extra packages via the secondary APT run, because it is smarter and can deal better with any - # conflicts. dbus and libpam-systemd are optional dependencies for systemd in debian so we include them - # explicitly. - packages = state.config.packages.copy() - add_packages(state.config, packages, "base-files") - # Debian policy is to start daemons by default. The policy-rc.d script can be used choose which ones to # start. Let's install one that denies all daemon startups. # See https://people.debian.org/~hmh/invokerc.d-policyrc.d-specification.txt for more information. @@ -124,7 +118,8 @@ class DebianInstaller(DistributionInstaller): # Ensure /efi exists so that the ESP is mounted there, and we never run dpkg -i on vfat state.root.joinpath("efi").mkdir(mode=0o755, exist_ok=True) - invoke_apt(state, "get", "install", ["--assume-yes", "--no-install-recommends", *packages]) + invoke_apt(state, "get", "install", + ["--assume-yes", "--no-install-recommends", "base-files", *state.config.packages]) # Now clean up and add the real repositories, so that the image is ready if state.config.local_mirror: @@ -266,8 +261,3 @@ def invoke_apt( ) return run_with_apivfs(state, cmdline, stdout=stdout, env=env) - - -def add_apt_package_if_exists(state: MkosiState, packages: list[str], package: str) -> None: - if invoke_apt(state, "cache", "search", ["--names-only", f"^{package}$"], stdout=subprocess.PIPE).stdout.strip(): - add_packages(state.config, packages, package) diff --git a/mkosi/distributions/fedora.py b/mkosi/distributions/fedora.py index 426ba500e..4dd5615a8 100644 --- a/mkosi/distributions/fedora.py +++ b/mkosi/distributions/fedora.py @@ -9,13 +9,7 @@ from pathlib import Path from textwrap import dedent from typing import Any, NamedTuple, Optional -from mkosi.backend import ( - Distribution, - MkosiState, - add_packages, - detect_distribution, - sort_packages, -) +from mkosi.backend import Distribution, MkosiState, detect_distribution, sort_packages from mkosi.distributions import DistributionInstaller from mkosi.log import MkosiPrinter, complete_step, warn from mkosi.remove import unlink_try_hard @@ -96,10 +90,7 @@ def install_fedora(state: MkosiState) -> None: setup_dnf(state, repos) - packages = state.config.packages.copy() - add_packages(state.config, packages, "filesystem") - - invoke_dnf(state, "install", packages) + invoke_dnf(state, "install", ["filesystem", *state.config.packages]) # Fedora defaults to sssd authselect profile, let's override it with the minimal profile if it exists and # extend it with the with-homed feature if we can find it. diff --git a/mkosi/distributions/mageia.py b/mkosi/distributions/mageia.py index 2d5b01ac5..a6c8b45d7 100644 --- a/mkosi/distributions/mageia.py +++ b/mkosi/distributions/mageia.py @@ -3,7 +3,7 @@ from collections.abc import Sequence from pathlib import Path -from mkosi.backend import MkosiState, add_packages +from mkosi.backend import MkosiState from mkosi.distributions import DistributionInstaller from mkosi.distributions.fedora import Repo, invoke_dnf, setup_dnf from mkosi.log import complete_step @@ -57,7 +57,4 @@ def install_mageia(state: MkosiState) -> None: setup_dnf(state, repos) - packages = state.config.packages.copy() - add_packages(state.config, packages, "filesystem") - - invoke_dnf(state, "install", packages) + invoke_dnf(state, "install", ["filesystem", *state.config.packages]) diff --git a/mkosi/distributions/openmandriva.py b/mkosi/distributions/openmandriva.py index c5549cc50..b9ea3b7c4 100644 --- a/mkosi/distributions/openmandriva.py +++ b/mkosi/distributions/openmandriva.py @@ -3,7 +3,7 @@ from collections.abc import Sequence from pathlib import Path -from mkosi.backend import MkosiState, add_packages +from mkosi.backend import MkosiState from mkosi.distributions import DistributionInstaller from mkosi.distributions.fedora import Repo, invoke_dnf, setup_dnf from mkosi.log import complete_step @@ -58,7 +58,4 @@ def install_openmandriva(state: MkosiState) -> None: setup_dnf(state, repos) - packages = state.config.packages.copy() - add_packages(state.config, packages, "filesystem") - - invoke_dnf(state, "install", packages) + invoke_dnf(state, "install", ["filesystem", *state.config.packages]) diff --git a/mkosi/distributions/opensuse.py b/mkosi/distributions/opensuse.py index 75232376d..054dd29b6 100644 --- a/mkosi/distributions/opensuse.py +++ b/mkosi/distributions/opensuse.py @@ -5,7 +5,7 @@ from collections.abc import Sequence from pathlib import Path from textwrap import dedent -from mkosi.backend import MkosiState, add_packages, patch_file +from mkosi.backend import MkosiState, patch_file from mkosi.distributions import DistributionInstaller from mkosi.log import complete_step from mkosi.run import run, run_with_apivfs @@ -166,12 +166,7 @@ def install_opensuse(state: MkosiState) -> None: zypper_init(state) zypper_init_repositories(state) - packages = state.config.packages.copy() - - if state.config.base_image is None: - add_packages(state.config, packages, "filesystem") - - zypper_install(state, packages) + zypper_install(state, ["filesystem", *state.config.packages]) zypper_finalize_repositories(state) if state.config.base_image is not None: -- 2.47.2