diff --git a/REUSE.toml b/REUSE.toml index c277d5aea..8b566d27f 100644 --- a/REUSE.toml +++ b/REUSE.toml @@ -44,8 +44,8 @@ SPDX-License-Identifier = "LGPL-2.1-or-later" [[annotations]] path = [ - "mkosi/resources/mkosi-initrd/mkosi.extra/usr/lib/udev/rules.d/10-mkosi-initrd-md.rules", - "mkosi/resources/mkosi-initrd/mkosi.extra/usr/lib/udev/rules.d/10-mkosi-initrd-dm.rules", + "mkosi/resources/mkosi-initrd/mkosi.profiles/storage/mkosi.extra/usr/lib/udev/rules.d/10-mkosi-initrd-md.rules", + "mkosi/resources/mkosi-initrd/mkosi.profiles/storage/mkosi.extra/usr/lib/udev/rules.d/10-mkosi-initrd-dm.rules", ] precedence = "aggregate" SPDX-FileCopyrightText = "Mkosi Contributors" diff --git a/mkosi/__init__.py b/mkosi/__init__.py index 07d3db218..ecef22759 100644 --- a/mkosi/__init__.py +++ b/mkosi/__init__.py @@ -1321,6 +1321,7 @@ def finalize_default_initrd( *(["--package-cache-directory", os.fspath(config.package_cache_dir)] if config.package_cache_dir else []), # noqa: E501 *(["--local-mirror", str(config.local_mirror)] if config.local_mirror else []), "--incremental", str(config.incremental), + *(f"--profile={profile}" for profile in config.initrd_profiles), *(f"--package={package}" for package in config.initrd_packages), *(f"--volatile-package={package}" for package in config.initrd_volatile_packages), *(f"--package-directory={d}" for d in config.package_directories), diff --git a/mkosi/config.py b/mkosi/config.py index fd04104dd..2381db05b 100644 --- a/mkosi/config.py +++ b/mkosi/config.py @@ -600,6 +600,10 @@ class ToolsTreeProfile(StrEnum): runtime = enum.auto() +class InitrdProfile(StrEnum): + storage = enum.auto() + + def expand_delayed_specifiers(specifiers: dict[str, str], text: str) -> str: def replacer(match: re.Match[str]) -> str: m = match.group("specifier") @@ -1883,6 +1887,7 @@ class Config: unified_kernel_image_format: str unified_kernel_image_profiles: list[UKIProfile] initrds: list[Path] + initrd_profiles: list[InitrdProfile] initrd_packages: list[str] initrd_volatile_packages: list[str] microcode_host: bool @@ -2970,6 +2975,16 @@ def parse_ini(path: Path, only_sections: Collection[str] = ()) -> Iterator[tuple default=False, help="Only include the host CPU's microcode", ), + ConfigSetting( + dest="initrd_profiles", + long="--initrd-profile", + metavar="PROFILE", + section="Content", + parse=config_make_list_parser(delimiter=",", parse=make_enum_parser(InitrdProfile)), + choices=InitrdProfile.values(), + default=list(InitrdProfile), + help="Which profiles to enable for the default initrd", + ), ConfigSetting( dest="initrd_packages", long="--initrd-package", @@ -5027,6 +5042,7 @@ def summary(config: Config) -> str: Unified Kernel Image Format: {config.unified_kernel_image_format} Unified Kernel Image Profiles: {line_join_list(config.unified_kernel_image_profiles)} Initrds: {line_join_list(config.initrds)} + Initrd Profiles: {line_join_list(config.initrd_profiles)} Initrd Packages: {line_join_list(config.initrd_packages)} Initrd Volatile Packages: {line_join_list(config.initrd_volatile_packages)} Devicetree: {none_to_none(config.devicetree)} @@ -5333,6 +5349,7 @@ def uki_profile_transformer( list[UKIProfile]: uki_profile_transformer, list[ArtifactOutput]: enum_list_transformer, list[ToolsTreeProfile]: enum_list_transformer, + list[InitrdProfile]: enum_list_transformer, CertificateSource: certificate_source_transformer, ConsoleMode: enum_transformer, Verity: enum_transformer, diff --git a/mkosi/initrd.py b/mkosi/initrd.py index a4305a173..926785070 100644 --- a/mkosi/initrd.py +++ b/mkosi/initrd.py @@ -259,6 +259,7 @@ def main() -> None: "--remove-files=/usr/lib/firmware/*-ucode", "--kernel-modules-exclude=.*", "--build-sources", "", + "--profile=storage", "--include=mkosi-initrd", ] # fmt: skip diff --git a/mkosi/resources/man/mkosi.1.md b/mkosi/resources/man/mkosi.1.md index 3a8a4777e..5cf93c625 100644 --- a/mkosi/resources/man/mkosi.1.md +++ b/mkosi/resources/man/mkosi.1.md @@ -1016,6 +1016,14 @@ boolean argument: either `1`, `yes`, or `true` to enable, or `0`, `no`, VARIABLES**), if none are found there **mkosi** will automatically build a default initrd. +`InitrdProfiles=`, `--initrd-profile=` +: Set the profiles to enable for the default initrd. Takes a + comma-delimited list of profiles. By default, all profiles are + enabled. + + The `storage` profile enables support for advanced storage + mechanisms, which currently is limited to LVM. + `InitrdPackages=`, `--initrd-package=` : Extra packages to install into the default initrd. Takes a comma separated list of package specifications. This option may be used diff --git a/mkosi/resources/mkosi-initrd/mkosi.conf b/mkosi/resources/mkosi-initrd/mkosi.conf index 042a6c7e7..63667a7a2 100644 --- a/mkosi/resources/mkosi-initrd/mkosi.conf +++ b/mkosi/resources/mkosi-initrd/mkosi.conf @@ -16,7 +16,6 @@ Packages= bash # for emergency logins less # this makes 'systemctl' much nicer to use ;) p11-kit # dl-opened by systemd - lvm2 RemoveFiles= # we don't need this after the binary catalogs have been built diff --git a/mkosi/resources/mkosi-initrd/mkosi.profiles/storage/mkosi.conf b/mkosi/resources/mkosi-initrd/mkosi.profiles/storage/mkosi.conf new file mode 100644 index 000000000..01d4155cb --- /dev/null +++ b/mkosi/resources/mkosi-initrd/mkosi.profiles/storage/mkosi.conf @@ -0,0 +1,4 @@ +# SPDX-License-Identifier: LGPL-2.1-or-later + +[Content] +Packages=lvm2 diff --git a/mkosi/resources/mkosi-initrd/mkosi.extra/usr/lib/udev/rules.d/10-mkosi-initrd-dm.rules b/mkosi/resources/mkosi-initrd/mkosi.profiles/storage/mkosi.extra/usr/lib/udev/rules.d/10-mkosi-initrd-dm.rules similarity index 100% rename from mkosi/resources/mkosi-initrd/mkosi.extra/usr/lib/udev/rules.d/10-mkosi-initrd-dm.rules rename to mkosi/resources/mkosi-initrd/mkosi.profiles/storage/mkosi.extra/usr/lib/udev/rules.d/10-mkosi-initrd-dm.rules diff --git a/mkosi/resources/mkosi-initrd/mkosi.extra/usr/lib/udev/rules.d/10-mkosi-initrd-md.rules b/mkosi/resources/mkosi-initrd/mkosi.profiles/storage/mkosi.extra/usr/lib/udev/rules.d/10-mkosi-initrd-md.rules similarity index 100% rename from mkosi/resources/mkosi-initrd/mkosi.extra/usr/lib/udev/rules.d/10-mkosi-initrd-md.rules rename to mkosi/resources/mkosi-initrd/mkosi.profiles/storage/mkosi.extra/usr/lib/udev/rules.d/10-mkosi-initrd-md.rules diff --git a/tests/test_json.py b/tests/test_json.py index b5ff8e81f..c44153c72 100644 --- a/tests/test_json.py +++ b/tests/test_json.py @@ -27,6 +27,7 @@ Drive, Firmware, Incremental, + InitrdProfile, KeySource, KeySourceType, ManifestFormat, @@ -195,6 +196,9 @@ def test_config() -> None: "InitrdPackages": [ "clevis" ], + "InitrdProfiles": [ + "storage" + ], "InitrdVolatilePackages": [ "abc" ], @@ -486,6 +490,7 @@ def test_config() -> None: image="main", incremental=Incremental.no, initrd_packages=["clevis"], + initrd_profiles=[InitrdProfile.storage], initrd_volatile_packages=["abc"], initrds=[Path("/efi/initrd1"), Path("/efi/initrd2")], kernel_command_line_extra=["look", "im", "on", "the", "kernel", "command", "line"],