On my new machine my kernel and all my initrd files are located in the boot partition mounted at "/boot": - initramfs-6.1.53-gentoo-r1-x86_64.img - intel-uc.img - vmlinuz-6.1.53-gentoo-r1-x86_64 Running "grub-mkconfig -o /boot/grub/grub.cfg" I get the following output: ============= %< ============ Generating grub configuration file ... Found linux image: /boot/vmlinuz-6.1.53-gentoo-r1-x86_64 Found initrd image: /boot/intel-uc.img /boot//boot/initramfs-6.1.53-gentoo-r1-x86_64.img Warning: os-prober will not be executed to detect other bootable partitions. Systems on them will not be added to the GRUB boot configuration. Check GRUB_DISABLE_OS_PROBER documentation entry. done ============= %< ============ And the created file will contain the following line to loard the initrd files after the kernel: ============= %< ============ initrd /intel-uc.img //boot/initramfs-6.1.53-gentoo-r1-x86_64.img ============= %< ============ However, since the path for initramfs is wrong, the kernel panics. If I edit at boot time with the grub editor and remove the "//boot" part, the boot process succeeds. Note: This worked on my old system for ages, since there was always a symlink "/boot -> .", but in the new system the boot partition is fat32, so no symlinks possible. Reproducible: Always Steps to Reproduce: 1. Generate a kernel with an initramfs (e.g. with genkernel) 2. Generate the grub.cfg Actual Results: The path for the initramfs file in grub.cfg is wrong. Expected Results: The path should not contain the mount point. The problem is in the file /etc/grub.d/10_linux which does not use the proper variable to generate the path for the grub.cfg file: $ diff -u tmp/mem/10_linux /etc/grub.d/10_linux --- tmp/mem/10_linux 2023-11-04 17:42:22.847679854 +0100 +++ /etc/grub.d/10_linux 2023-11-04 14:26:13.805463301 +0100 @@ -225,7 +225,7 @@ "initramfs-genkernel-${GENKERNEL_ARCH}-${version}" \ "initramfs-genkernel-${GENKERNEL_ARCH}-${alt_version}"; do if test -e "${dirname}/${i}" ; then - initrd_real="${dirname}/${i}" + initrd_real="${rel_dirname}/${i}" # initrd_real="intel-ucode.cpio ${dirname}/${i}" break # else
The file 10_linux file shipped with grub-2.06-r9 contains this: > initrd_real= > for i in "initrd.img-${version}" "initrd-${version}.img" \ > "initrd-${alt_version}.img.old" "initrd-${version}.gz" \ > "initrd-${alt_version}.gz.old" "initrd-${version}" \ > "initramfs-${version}.img" "initramfs-${alt_version}.img.old" \ > "initrd.img-${alt_version}" "initrd-${alt_version}.img" \ > "initrd-${alt_version}" "initramfs-${alt_version}.img" \ > "initramfs-genkernel-${version}" \ > "initramfs-genkernel-${alt_version}" \ > "initramfs-genkernel-${GENKERNEL_ARCH}-${version}" \ > "initramfs-genkernel-${GENKERNEL_ARCH}-${alt_version}"; do > if test -e "${dirname}/${i}" ; then > initrd_real="${i}" > break > fi > done ${dirname} is not used when assigning initrd_real. I think maybe you modified the file multiple times?
Strange. I'm not aware, that I touched this file before. And I had this also on another machine in the same way. However, both machines are very old installations (nearly ~20 years), continuously updated (or moved to new hardware). My oldest backup (4 years) already has this modification and it seems, dispatch-conf keeps that change silently. At least, I can tell, that in the beginning I had no genkernel... I'll remove the file, re-emerge grub and will report back.
As you've reported, the unmodified file of the current grub version looks as you've reported, so this must have been a modification on my side done a LOT of years ago...