]> git.ipfire.org Git - thirdparty/mkosi.git/commitdiff
Use user provided initrds for grub
authorDaan De Meyer <daan.j.demeyer@gmail.com>
Thu, 28 Sep 2023 10:36:22 +0000 (12:36 +0200)
committerDaan De Meyer <daan.j.demeyer@gmail.com>
Thu, 28 Sep 2023 12:06:54 +0000 (14:06 +0200)
Let's only build a default initrd for grub if the user didn't
provide any initrds themselves.

mkosi/__init__.py

index 0338bf4d1c12e942d1307325d6b6e03e1619561a..78912d0d633b30058889567bb18706c3c2631c40 100644 (file)
@@ -778,14 +778,10 @@ def prepare_grub_bios(state: MkosiState, partitions: Sequence[Partition]) -> Non
     root = finalize_root(partitions)
     assert root
 
-    initrd = build_initrd(state)
-
     dst = state.root / "efi" / state.config.distribution.name
     with umask(~0o700):
         dst.mkdir(exist_ok=True)
 
-    initrd = Path(shutil.copy2(initrd, dst / "initrd"))
-
     with config.open("a") as f:
         f.write('if [ "${grub_platform}" == "pc" ]; then\n')
 
@@ -798,20 +794,24 @@ def prepare_grub_bios(state: MkosiState, partitions: Sequence[Partition]) -> Non
 
             with umask(~0o600):
                 kimg = Path(shutil.copy2(state.root / kimg, kdst / "vmlinuz"))
+                initrds = [
+                    Path(shutil.copy2(initrd, dst / initrd.name))
+                    for initrd in (state.config.initrds or [build_initrd(state)])
+                ]
                 kmods = Path(shutil.copy2(kmods, kdst / "kmods"))
 
                 distribution = state.config.distribution
-                image = kimg.relative_to(state.root / "efi")
+                image = Path("/") / kimg.relative_to(state.root / "efi")
                 cmdline = " ".join(state.config.kernel_command_line)
-                initrd = initrd.relative_to(state.root / "efi")
-                kmods = kmods.relative_to(state.root / "efi")
+                initrds = " ".join([os.fspath(Path("/") / initrd.relative_to(state.root / "efi")) for initrd in initrds])
+                kmods = Path("/") / kmods.relative_to(state.root / "efi")
 
                 f.write(
                     textwrap.dedent(
                         f"""\
                         menuentry "{distribution}-{kver}" {{
-                            linux /{image} {root} {cmdline}
-                            initrd /{initrd} /{kmods}
+                            linux {image} {root} {cmdline}
+                            initrd {initrds} {kmods}
                         }}
                         """
                     )
@@ -1188,12 +1188,6 @@ def install_uki(state: MkosiState, partitions: Sequence[Partition]) -> None:
         return
 
     roothash = finalize_roothash(partitions)
-    initrds = []
-
-    if state.config.initrds:
-        initrds = state.config.initrds
-    elif any(gen_kernel_images(state)):
-        initrds = [build_initrd(state)]
 
     for kver, kimg in gen_kernel_images(state):
         with complete_step(f"Generating unified kernel image for {kimg}"):
@@ -1216,6 +1210,8 @@ def install_uki(state: MkosiState, partitions: Sequence[Partition]) -> None:
             else:
                 boot_binary = state.root / f"efi/EFI/Linux/{image_id}-{kver}{boot_count}.efi"
 
+            initrds = state.config.initrds.copy() or [build_initrd(state)]
+
             if state.config.kernel_modules_initrd:
                 initrds += [build_kernel_modules_initrd(state, kver)]