I tracked this down and created a patch to fix it. update-grub converts
filenames with x.y.z versions in them to x.y.z.0, but the sed regex was
only matching when something follows the z--so /boot/vmlinuz-x.y.z-foo
and /boot/vmlinuz-x.y.z.a would work, but /boot/vmlinuz-x.y.z would end
up coming before the -rc versions (or -pre or any of the other special
suffixes update-grub knows about).
The attached patch to lets the x.y.z -> x.y.z.0 conversion also happen
when "z" is at the end of the filename.
--
-- Jason Rhinelander
--- old/update-grub 2007-02-05 13:17:25.000000000 -0400
+++ new/update-grub 2007-02-05 13:17:30.000000000 -0400
@@ -471,8 +471,8 @@
v1=$(echo $1 | sed -e 's!^\(.*-\([0-9]\+\.\)\{2,3\}[0-9]\+\)\(.*\)!\1 \3!g')
v2=$(echo $2 | sed -e 's!^\(.*-\([0-9]\+\.\)\{2,3\}[0-9]\+\)\(.*\)!\1 \3!g')
#If the version number only has 3 digits then put in another .0
- v1=$(echo $v1 | sed -e 's!^\(.*-\([0-9]\+\.\)\{2\}[0-9]\+\)\( .*\)!\1.0 \3!g')
- v2=$(echo $v2 | sed -e 's!^\(.*-\([0-9]\+\.\)\{2\}[0-9]\+\)\( .*\)!\1.0 \3!g')
+ v1=$(echo $v1 | sed -e 's!^\(.*-\([0-9]\+\.\)\{2\}[0-9]\+\)\( .*\|$\)!\1.0 \3!g')
+ v2=$(echo $v2 | sed -e 's!^\(.*-\([0-9]\+\.\)\{2\}[0-9]\+\)\( .*\|$\)!\1.0 \3!g')
# Then split the version number and remove any '.' 's or dashes
v1=$(echo $v1 | sed -e 's![-\.]\+! !g' -e 's!\([0-9]\)\([[:alpha:]]\)!\1 \2!')