I see this patch made it in with a small typo, which got exposed now that kernel 3.2.10 and 3.2.11 are out (grub-mkconfig used the regular numbered sorting instead of the intended versioned sorting).
Attacing the trivial patch to fix it. It is easy to verify, since 3.2.10 and 3.2.11 now get sorted as older than 3.2.9. Quoting Georgi Georgiev at 29/10/2011-12:08:19(+0900): > 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 <[email protected]> > 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 > -- (* Georgi Georgiev (* "I've seen it. It's rubbish." -- Marvin (* *) [email protected] *) the Paranoid Android *) (* +81(90)2877-8845 (* (*
# Bazaar merge directive format 2 (Bazaar 0.90) # revision_id: [email protected] # target_branch: http://bzr.savannah.gnu.org/r/grub/trunk/grub/ # testament_sha1: ff9d44fe7dc7116a1de2dfdadf80ab847ef3db6b # timestamp: 2012-03-16 00:31:14 +0900 # base_revision_id: [email protected] # # Begin patch === modified file 'ChangeLog' --- ChangeLog 2012-03-11 22:41:29 +0000 +++ ChangeLog 2012-03-15 15:30:33 +0000 @@ -1,3 +1,8 @@ +2012-03-16 Georgi Georgiev <[email protected]> + + * util/grub-mkconfig_lib.in: Properly detect if "sort" can do + versioned sorting. + 2012-03-11 Vladimir Serbinenko <[email protected]> * grub-core/loader/i386/linux.c (allocate_pages): Don't allocate === modified file 'util/grub-mkconfig_lib.in' --- util/grub-mkconfig_lib.in 2012-03-04 22:13:16 +0000 +++ util/grub-mkconfig_lib.in 2012-03-15 15:30:33 +0000 @@ -193,7 +193,7 @@ no) LC_ALL=C sort -n;; *) - if sort -v </dev/null > /dev/null 2>&1; then + if sort -V </dev/null > /dev/null 2>&1; then version_sort_sort_has_v=yes LC_ALL=C sort -V else # Begin bundle IyBCYXphYXIgcmV2aXNpb24gYnVuZGxlIHY0CiMKQlpoOTFBWSZTWZzKzbgAAhNfgBAwUXP//1qE 1QC///9wUARZvJCpu6lKDdglFTxT0Qeqek2mMig0eptQDQAMQEpNFPENGgRGjE0BoAGgGgDFGgph TZTanqeo00NAANBtTIAOYACYAAmAAAAAAkkCATTCnkaT0hglNqbakDI9RkHvOOeq1njFQzWjedgr r0b6czVEjVgH0UQDmdTYXfcPMV/V43dVCKSV3sBFpcbkhR72tKEXuj5WTUtI3B+isaz3bM9Xm5iG LRQ2c5rwIl+vTNduZIHWCsQMozhV3XLnz0rLD4RtAiBuRVdNGKOYfyv6npvlGtDIcIqIUzakPecl 0P7LJIOb05i9EN/w8Sl5mJA7xQrkCGeInVGxC4k+AQRpyKPUYtkCLvoNyFyJzaaBMpVSbK0L7wyP rESIWFoNueyqlCmW1NmYLkauNu0D2Awzf3amlbcT9Kwp9zPoGE1iO7ITkLDHdQQDxYZEDCVmk7YS DfoOTE2qJqgyZGV3KcprdWBMhuYjICCFCGTwK4WpeQOTxsSA9pBYeADn0sRZpgcFGr4sXz3Gm2BE 8UMcVgYk+za6QCsAomqmCD/1pGRXQ4pZQ0VaDVGJMvjfnLTF8GhXHC0LzYHdDKvgyLcsyigWZVcb Bx6IysGt3DN6dLnOxUkMpmaccmMbpH84ClCTEJSwSCFaE4NKq1UsmWPQY5xv5QOgjOKpBksM1doy ElSChkQWagchEoKGUcp7LWQvcsoT0G4NYnTgCNJFORIpL5mZvZMMZuYeXBj9c0J6FxKhsQ/drQqr GBWpEusK7Tc/50kjZZvR+aPW8u5kdq9a0p11/4KUW8lb1eB0KVRrzv7bxMDUYFpmznUY9WZY9GeE dODlFRR21aXRQpRD2RiZMreRnxzyrxvCQRLR8USPTf9AJL+EaGRWeSeUxvD5hsDAu1YpO3E6HImm 6MOlSMjXkSMlhUkY8S3yND2w2K3LiIEJ0tRQ4GOilUISHixqKEEhnuKUUIjBWD0R3DPuOLDblMvl UjmZmo9jkO4psxE6PN7IY+4jAZHXkUM76I9DQX4caIfG4GiHYBpQ0OI3BZr470Fpl4oLPkkb+ZMq DpIMOExH2R7Iugfjzzhol0R4OMe4eodQ3AcMkNQBQjNHYCk6AeIWIe4HiijP3NrRNqJtTshg1Qyn Mai4LW+QxPKSqmeMoDDLgPeh64CGQ5PU3ACYUGDsOXHi25Fv+3jxSS5uREPNFJQvdGiOsVdQBlj4 MMDlBORLe61HkjYjK0CZGFTEzz1mIlxIYgPNjfwsYiIRSOgHqADjK6HgFepiVHAhgKRDRb2DCkiJ DDQKOAm5VPYJseqqA33odPfTorBxUisHMF0RDxbYGsrqjsI6XKgCdR+IIkBU5FxN6oY8MRGFyuCf gBx/8XckU4UJCcys24A=
_______________________________________________ Bug-grub mailing list [email protected] https://lists.gnu.org/mailman/listinfo/bug-grub
