Gentoo Linux maintains its own kernel builder and initramfs generation
utility called "genkernel".

It looks like some attempt was made to make 10_linux compatible with
initiramfs images created by genkernel. However, this support is
currently broken. There are two problems.


Firstly, genkernel initramfs images are named like so:

initramfs-genkernel-$ARCH-$version

10_linux currently looks for this:

initramfs-genkernel-$version

The simplest solution here would be to use a wildcard beteen genkernel
and $version.


Secondly, genkernel looks for the "real_root" kernel command line option
to determine the root filesystem. This is a holdover from the days when
we used true initrd images and we needed to use root=/dev/ram0.


I have attached a rough patch that resolves these issues. I would
appreciate any feedback you can give me. My goal is to move this
upstream so that I will not have to rebase it in the future.
=== modified file 'util/grub.d/10_linux.in'
--- util/grub.d/10_linux.in	2012-03-10 14:21:25 +0000
+++ util/grub.d/10_linux.in	2012-04-07 21:24:06 +0000
@@ -135,7 +135,7 @@
   message="$(gettext_printf "Loading Linux %s ..." ${version})"
   sed "s/^/$submenu_indentation/" << EOF
 	echo	'$message'
-	linux	${rel_dirname}/${basename} root=${linux_root_device_thisversion} ro ${args}
+	linux	${rel_dirname}/${basename} ${rootcmd}=${linux_root_device_thisversion} ro ${args}
 EOF
   if test -n "${initrd}" ; then
     # TRANSLATORS: ramdisk isn't identifier. Should be translated.
@@ -181,19 +181,31 @@
   alt_version=`echo $version | sed -e "s,\.old$,,g"`
   linux_root_device_thisversion="${LINUX_ROOT_DEVICE}"
 
+  rootcmd=root
   initrd=
+  pushd "${dirname}" > /dev/null
   for i in "initrd.img-${version}" "initrd-${version}.img" "initrd-${version}.gz" \
 	   "initrd-${version}" "initramfs-${version}.img" \
 	   "initrd.img-${alt_version}" "initrd-${alt_version}.img" \
-	   "initrd-${alt_version}" "initramfs-${alt_version}.img" \
-	   "initramfs-genkernel-${version}" \
-	   "initramfs-genkernel-${alt_version}"; do
-    if test -e "${dirname}/${i}" ; then
+	   "initrd-${alt_version}" "initramfs-${alt_version}.img"; do
+    if test -e "${i}" ; then
       initrd="$i"
       break
     fi
   done
 
+  if [ "x$initrd" = x ]; then
+    for i in "initramfs-genkernel"*"-${version}" \
+	     "initramfs-genkernel"*"-${alt_version}"; do
+      if test -e "${i}"; then
+	initrd="$i"
+	rootcmd=real_root
+	break
+      fi
+    done
+  fi
+  popd > /dev/null
+
   config=
   for i in "${dirname}/config-${version}" "${dirname}/config-${alt_version}" "/etc/kernels/kernel-config-${version}" ; do
     if test -e "${i}" ; then

Attachment: signature.asc
Description: OpenPGP digital signature

_______________________________________________
Grub-devel mailing list
Grub-devel@gnu.org
https://lists.gnu.org/mailman/listinfo/grub-devel

Reply via email to