Running this on a Gentoo system with kernel images generated by Gentoo's genkernel.
My kernel has CONFIG_LOCALVERSION="-kvm1" and I end up with the following files in /boot (just the relevant section): kernel-genkernel-x86_64-2.6.37.1-kvm1 kernel-genkernel-x86_64-2.6.38.2-kvm1 kernel-genkernel-x86_64-2.6.38.5-kvm1 kernel-genkernel-x86_64-2.6.39.1-kvm1 kernel-genkernel-x86_64-2.6.39.3-kvm1 kernel-genkernel-x86_64-2.6.39-kvm1 grub-mkconfig generates the config in this order, with 2.6.39 being on top, while it should be lower. grep Loading.*2.6. grub.conf | uniq -c 2 echo 'Loading Linux x86_64-2.6.39-kvm1 ...' 2 echo 'Loading Linux x86_64-2.6.39.3-kvm1 ...' 2 echo 'Loading Linux x86_64-2.6.39.1-kvm1 ...' 2 echo 'Loading Linux x86_64-2.6.38.5-kvm1 ...' 2 echo 'Loading Linux x86_64-2.6.38.2-kvm1 ...' 2 echo 'Loading Linux x86_64-2.6.37.1-kvm1 ...' I have been using the attached patch for a while now and it solves the problem just fine. Simply using "sort -V" does the right thing. If the "-V" option is not available - revert to the old behavior. This hasn't happened with the 3.x kernels as they don't have EXTRAVERSION but you never know when that would start. -- ( Georgi Georgiev ( QOTD: "You want me to put *holes* in my ( ) ------------------- ) ears and hang things from them? How... ) ( ------------------- ( tribal." (
>From 60bcbf59525d311ae1840db15d0fb10f7f1b9ad4 Mon Sep 17 00:00:00 2001 From: Georgi Georgiev <ch...@gg3.net> Date: Fri, 18 Feb 2011 22:58:38 +0900 Subject: [PATCH 1/1] Use proper version sorting if "sort" supports it This way 2.6.37-sfx1 will be sorted as older than 2.6.37.1-sfx1. Currently it shows as newer. --- util/grub-mkconfig_lib.in | 18 +++++++++++++++++- 1 files changed, 17 insertions(+), 1 deletions(-) diff --git a/util/grub-mkconfig_lib.in b/util/grub-mkconfig_lib.in index 901b575..605299c 100644 --- a/util/grub-mkconfig_lib.in +++ b/util/grub-mkconfig_lib.in @@ -165,6 +165,22 @@ grub_file_is_not_garbage () return 0 } +sort_version() +{ + if [[ ${_sort_has_v:-undef} == "undef" ]]; then + if sort -V < /dev/null &>/dev/null; then + _sort_has_v=1 + else + _sort_has_v=0 + fi + fi + if [[ ${_sort_has_v} == 1 ]]; then + sort -V + else + sort -n + fi +} + version_test_numeric () { local a="$1" @@ -181,7 +197,7 @@ version_test_numeric () a="$b" b="$c" fi - if (echo "$a" ; echo "$b") | sort -n | head -n 1 | grep -qx "$b" ; then + if (echo "$a" ; echo "$b") | sort_version | head -n 1 | grep -qx "$b" ; then return 0 else return 1 -- 1.7.3.4
_______________________________________________ Bug-grub mailing list Bug-grub@gnu.org https://lists.gnu.org/mailman/listinfo/bug-grub