I am relaying a patch by Robin Johnson, one of the core infrastructure
staff at Gentoo Linux. In the process of building some Gentoo servers
utilizing GRUB 2, he has made some changes to 10_linux that should make
grub-mkconfig "out of the box" for additional users.

I did a little work to clean up the indentation and wrote a proper
changelog. Credit should go to him.

Here is his description:

Increase flexibility of kernel naming, allow non-versioned kernels.

The block that tried to find the kernels was getting unweidly long, as
was not
easily customizable by users or distributors. Refactor to introduce a new
variable, GRUB_KERNEL_GLOB, that allows complete control over the naming
used
to search for kernel binaries.

Add 'bzImage' to the list of default names to support more distribution
naming
variants.

Adjust the default set of globs to look for unversioned kernels before
versioned kernels, to find symlinked kernel names.

Also apply similar logic to to initramfs.

Signed-off-by: Robin H. Johnson <robb...@gentoo.org>

--
Take 2: Added initramfs logic.
Increase flexibility of kernel naming, allow non-versioned kernels.

The block that tried to find the kernels was getting unweidly long, as was not
easily customizable by users or distributors. Refactor to introduce a new
variable, GRUB_KERNEL_GLOB, that allows complete control over the naming used
to search for kernel binaries.

Add 'bzImage' to the list of default names to support more distribution naming
variants.

Adjust the default set of globs to look for unversioned kernels before
versioned kernels, to find symlinked kernel names.

Also apply similar logic to to initramfs.

Signed-off-by: Robin H. Johnson <robb...@gentoo.org>

--
Take 2: Added initramfs logic.

=== modified file 'ChangeLog'
--- ChangeLog	2012-04-26 18:51:06 +0000
+++ ChangeLog	2012-04-29 04:29:01 +0000
@@ -1,3 +1,19 @@
+2102-04-29  Robin H. Johnson  <robb...@gentoo.org>
+
+	Increase flexibility of kernel naming, allow non-versioned kernels.
+
+	Introduce GRUB_KERNEL_GLOB variable to allow customization by
+	distrubutions or users.
+
+	* docs/grub.texi: Document GRUB_KERNEL_GLOB variable.
+	* util/grub-mkconfig.in: Export GRUB_KERNEL_GLOB variable.
+	* util/grub.d/10_linux.in: Refactor kernel detection to utilize
+	GRUB_KERNEL_GLOB variable. Add bzImage to the list of default names to
+	support more distribution naming variants. Adjust the default set of
+	globs to look for unversioned kernels before versioned kernels, to
+	find symlinked kernel names. Apply similar logic to initramfs and
+	config file detection.
+
 2012-04-26  Vladimir Serbinenko  <phco...@gmail.com>
 
 	* grub-core/term/ieee1275/console.c (grub_console_dimensions): Use 80x24

=== modified file 'docs/grub.texi'
--- docs/grub.texi	2012-03-27 23:37:00 +0000
+++ docs/grub.texi	2012-04-29 03:25:10 +0000
@@ -1288,6 +1288,10 @@
 Each module will be loaded as early as possible, at the start of
 @file{grub.cfg}.
 
+@item GRUB_KERNEL_GLOB
+This is a space-seperated list of globs to evaluate while looking for the names
+of your kernel binaries. Default is platform-specific.
+
 @end table
 
 For more detailed customisation of @command{grub-mkconfig}'s output, you may

=== modified file 'util/grub-mkconfig.in'
--- util/grub-mkconfig.in	2012-04-07 17:49:25 +0000
+++ util/grub-mkconfig.in	2012-04-29 03:25:10 +0000
@@ -216,7 +216,8 @@
   GRUB_INIT_TUNE \
   GRUB_SAVEDEFAULT \
   GRUB_ENABLE_CRYPTODISK \
-  GRUB_BADRAM
+  GRUB_BADRAM \
+  GRUB_KERNEL_GLOB
 
 if test "x${grub_cfg}" != "x"; then
   rm -f "${grub_cfg}.new"

=== modified file 'util/grub.d/10_linux.in'
--- util/grub.d/10_linux.in	2012-04-18 21:25:21 +0000
+++ util/grub.d/10_linux.in	2012-04-29 04:16:51 +0000
@@ -151,16 +151,17 @@
 }
 
 machine=`uname -m`
-case "x$machine" in
-    xi?86 | xx86_64)
-	list=`for i in /boot/vmlinuz-* /vmlinuz-* /boot/kernel-* ; do
-                  if grub_file_is_not_garbage "$i" ; then echo -n "$i " ; fi
-              done` ;;
-    *) 
-	list=`for i in /boot/vmlinuz-* /boot/vmlinux-* /vmlinuz-* /vmlinux-* /boot/kernel-* ; do
-                  if grub_file_is_not_garbage "$i" ; then echo -n "$i " ; fi
-	     done` ;;
-esac
+if [ "x$GRUB_KERNEL_GLOB" = "x" ]; then
+    case "x$machine" in
+        xi?86 | xx86_64) GRUB_KERNEL_GLOB="/boot/vmlinuz /vmlinuz /boot/kernel /boot/bzImage" ;;
+        *) GRUB_KERNEL_GLOB="/boot/vmlinuz /boot/vmlinux /boot/kernel /boot/bzImage /vmlinuz /vmlinux" ;;
+    esac
+    list="$GRUB_KERNEL_GLOB"
+    for l in $list ; do list="${list} ${l}-*" ; done
+else
+    list="$GRUB_KERNEL_GLOB"
+fi
+list=$(eval "for i in ${list} ; do if grub_file_is_not_garbage \"\$i\" ; then echo -n \"\$i \" ; fi ; done")
 
 case "$machine" in
     i?86) GENKERNEL_ARCH="x86" ;;
@@ -187,18 +188,27 @@
   dirname=`dirname $linux`
   rel_dirname=`make_system_path_relative_to_its_root $dirname`
   version=`echo $basename | sed -e "s,^[^0-9]*-,,g"`
+  [ "x$version" == "x$basename" ] && version=
   alt_version=`echo $version | sed -e "s,\.old$,,g"`
   linux_root_device_thisversion="${LINUX_ROOT_DEVICE}"
 
   initrd=
-  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}" \
-	   "initramfs-genkernel-${GENKERNEL_ARCH}-${version}" \
-	   "initramfs-genkernel-${GENKERNEL_ARCH}-${alt_version}"; do
+  set --
+  if [ "x$version" = "x" ]; then
+      set -- "initrd.img" "initrd.gz" "initrd" "initramfs.img" "initramfs" \
+	     "initramfs-genkernel" "initramfs-genkernel-${GENKERNEL_ARCH}"
+  fi
+  set -- "$@" \
+    "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-${version}" "initramfs-${alt_version}" \
+    "initramfs-genkernel-${version}" \
+    "initramfs-genkernel-${alt_version}" \
+    "initramfs-genkernel-${GENKERNEL_ARCH}-${version}" \
+    "initramfs-genkernel-${GENKERNEL_ARCH}-${alt_version}"
+  for i in "$@" ; do
     if test -e "${dirname}/${i}" ; then
       initrd="$i"
       break
@@ -206,12 +216,20 @@
   done
 
   config=
-  for i in "${dirname}/config-${version}" "${dirname}/config-${alt_version}" "/etc/kernels/kernel-config-${version}" ; do
+  set --
+  if [ "x$version" = "x" ]; then
+	  set -- "${dirname}/config"
+  fi
+  set -- "$@" "${dirname}/config-${version}" \
+	      "${dirname}/config-${alt_version}" \
+	      "/etc/kernels/kernel-config-${version}"
+  for i in "$@"; do
     if test -e "${i}" ; then
       config="${i}"
       break
     fi
   done
+  set --
 
   initramfs=
   if test -n "${config}" ; 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