]> git.ipfire.org Git - thirdparty/mkosi.git/commitdiff
Drop --base-packages option 1422/head
authorDaan De Meyer <daan.j.demeyer@gmail.com>
Thu, 6 Apr 2023 11:24:46 +0000 (13:24 +0200)
committerDaan De Meyer <daan.j.demeyer@gmail.com>
Wed, 12 Apr 2023 14:40:23 +0000 (16:40 +0200)
It's not necessary anymore now that we don't install any packages
by default anymore.

12 files changed:
NEWS.md
mkosi.md
mkosi/__init__.py
mkosi/backend.py
mkosi/config.py
mkosi/distributions/arch.py
mkosi/distributions/centos.py
mkosi/distributions/debian.py
mkosi/distributions/fedora.py
mkosi/distributions/mageia.py
mkosi/distributions/openmandriva.py
mkosi/distributions/opensuse.py

diff --git a/NEWS.md b/NEWS.md
index dc0849ec30a66305c7ea0d00fbea939bb63ab96a..fb96b5a39891849e09cb6f6b964d50af763a5247 100644 (file)
--- 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`.
index 2b7d0bc0968eeaac2836b70593f2b7c99f8a2665..03ad23775e9567cda45da532700ad2d478ca4e22 100644 (file)
--- 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
index 6aa218885520c40cd24ff5cdf9cedd58f50a942e..9e4e41f320e57e39b2f1559c1fb4d8b0512d850a 100644 (file)
@@ -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.")
 
index 49c3d28da50271ad760dcd095a9ed8eea2017ad9..fc3e4e534170d274a9ecb14a81d3d0cce85247dc 100644 (file)
@@ -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"""
 
index 0c4487f8a6aa0dddebceaa28ae2bf0814cee02e8..207abcfd4bf8ada2df049b57ac4ef6e539e04995 100644 (file)
@@ -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",
index f5d1bd00aa0c87b7502e673cccf2ebc93cf5d6f8..df7ffbb10c15b0582c80d57c426c200249ea63dd 100644 (file)
@@ -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:
index 0487fa3096515bd3635cbc56b2f47859f485dd05..938518663eb0a0b3d7c6ac3a5c0accf0e595e32f 100644 (file)
@@ -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():
index ab1b90d1192e21a5b3f22728c5a2f8c96ff10fd5..ca83ccdd5bdc97c6e3d3c366d4ee7542ea31066a 100644 (file)
@@ -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)
index 426ba500e5732074f5079168b9ebca2fb7b53bcb..4dd5615a85630c8ba2c014edc524197b76a076f9 100644 (file)
@@ -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.
index 2d5b01ac57d15a482aad6a4c75995f66b9af496b..a6c8b45d795f526e8b0bb8d575abb5905b015192 100644 (file)
@@ -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])
index c5549cc502931c72fe2322d3b5f754270006d497..b9ea3b7c48699325e8d34c8ebb146adda9ba5a1d 100644 (file)
@@ -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])
index 75232376da88d525a7dc4005adeb46086d6118d3..054dd29b6e63b3d489755eda5f796e037bfc4094 100644 (file)
@@ -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: