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 -- 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 + + 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 * 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}. address@hidden 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