From: Daan De Meyer Date: Thu, 28 Sep 2023 10:36:22 +0000 (+0200) Subject: Use user provided initrds for grub X-Git-Tag: v18~31 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=82dec5482f66a4c1f8cffd6f15d6cd44dd1f8107;p=thirdparty%2Fmkosi.git Use user provided initrds for grub Let's only build a default initrd for grub if the user didn't provide any initrds themselves. --- diff --git a/mkosi/__init__.py b/mkosi/__init__.py index 0338bf4d1..78912d0d6 100644 --- a/mkosi/__init__.py +++ b/mkosi/__init__.py @@ -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)]