]> git.ipfire.org Git - thirdparty/mkosi.git/commitdiff
Add InitrdProfiles= with initial storage profile
authorDaan De Meyer <daan.j.demeyer@gmail.com>
Thu, 27 Feb 2025 15:16:21 +0000 (16:16 +0100)
committerDaan De Meyer <daan.j.demeyer@gmail.com>
Thu, 27 Feb 2025 20:27:41 +0000 (21:27 +0100)
Let's allow not installing lvm2 in the initrd by introducing a
storage profile which users can disable.

REUSE.toml
mkosi/__init__.py
mkosi/config.py
mkosi/initrd.py
mkosi/resources/man/mkosi.1.md
mkosi/resources/mkosi-initrd/mkosi.conf
mkosi/resources/mkosi-initrd/mkosi.profiles/storage/mkosi.conf [new file with mode: 0644]
mkosi/resources/mkosi-initrd/mkosi.profiles/storage/mkosi.extra/usr/lib/udev/rules.d/10-mkosi-initrd-dm.rules [moved from mkosi/resources/mkosi-initrd/mkosi.extra/usr/lib/udev/rules.d/10-mkosi-initrd-dm.rules with 100% similarity]
mkosi/resources/mkosi-initrd/mkosi.profiles/storage/mkosi.extra/usr/lib/udev/rules.d/10-mkosi-initrd-md.rules [moved from mkosi/resources/mkosi-initrd/mkosi.extra/usr/lib/udev/rules.d/10-mkosi-initrd-md.rules with 100% similarity]
tests/test_json.py

index c277d5aea8b0980a49125f9ec85d75acbfb6d8c6..8b566d27f3d0bfd95d9324dad528f00ff1229b33 100644 (file)
@@ -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"
index 07d3db2182751425575077fdf766a3b2e61390c3..ecef2275941457e293fcdbbbb81bca83c6b294fa 100644 (file)
@@ -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),
index fd04104dd43ec8428b4e9e9004cfc4e159779022..2381db05b2203299307991ec7cfac4306069b7cc 100644 (file)
@@ -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 @@ SETTINGS: list[ConfigSetting[Any]] = [
         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 json_type_transformer(refcls: Union[type[Args], type[Config]]) -> Callable[[
         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,
index a4305a17380f8d155f22aa08a00e5fed0d94204e..926785070d317ce3baac1267a10bd592163ad6de 100644 (file)
@@ -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
 
index 3a8a4777e65456975b5ec65a9e3688ad16595276..5cf93c625b73f281416c5bcdd8ca41a495471e80 100644 (file)
@@ -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
index 042a6c7e72c3d78b4b32d856a554283139854100..63667a7a2ecf3e7bbb0ddfc95c721902a2f360fd 100644 (file)
@@ -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 (file)
index 0000000..01d4155
--- /dev/null
@@ -0,0 +1,4 @@
+# SPDX-License-Identifier: LGPL-2.1-or-later
+
+[Content]
+Packages=lvm2
index b5ff8e81f0521d821dfc9f87368c08ec403e9603..c44153c7281df638eda9b74a3b9adaa8f06f353c 100644 (file)
@@ -27,6 +27,7 @@ from mkosi.config import (
     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"],