You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
124 lines
3.7 KiB
124 lines
3.7 KiB
12 years ago
|
commit 59e1b06096de9ec9443fa15951e1dd816ecd7dde
|
||
|
Author: Хирецкий Михаил <mh@calculate.ru>
|
||
|
Date: Fri Apr 6 10:20:13 2012 +0400
|
||
|
|
||
|
Add support -install initramfs using.
|
||
|
|
||
|
Backport get latest version from grub-2.0.
|
||
|
|
||
|
diff --git a/util/grub-mkconfig_lib.in b/util/grub-mkconfig_lib.in
|
||
|
index a2dcd20..ddfbf70 100644
|
||
|
--- a/util/grub-mkconfig_lib.in
|
||
|
+++ b/util/grub-mkconfig_lib.in
|
||
|
@@ -157,23 +157,41 @@ grub_file_is_not_garbage ()
|
||
|
return 0
|
||
|
}
|
||
|
|
||
|
+version_sort ()
|
||
|
+{
|
||
|
+ case $version_sort_sort_has_v in
|
||
|
+ yes)
|
||
|
+ LC_ALL=C sort -V;;
|
||
|
+ no)
|
||
|
+ LC_ALL=C sort -n;;
|
||
|
+ *)
|
||
|
+ if sort -V </dev/null > /dev/null 2>&1; then
|
||
|
+ version_sort_sort_has_v=yes
|
||
|
+ LC_ALL=C sort -V
|
||
|
+ else
|
||
|
+ version_sort_sort_has_v=no
|
||
|
+ LC_ALL=C sort -n
|
||
|
+ fi;;
|
||
|
+ esac
|
||
|
+}
|
||
|
+
|
||
|
version_test_numeric ()
|
||
|
{
|
||
|
- local a="$1"
|
||
|
- local cmp="$2"
|
||
|
- local b="$3"
|
||
|
- if [ "$a" = "$b" ] ; then
|
||
|
- case "$cmp" in
|
||
|
+ version_test_numeric_a="$1"
|
||
|
+ version_test_numeric_cmp="$2"
|
||
|
+ version_test_numeric_b="$3"
|
||
|
+ if [ "$version_test_numeric_a" = "$version_test_numeric_b" ] ; then
|
||
|
+ case "$version_test_numeric_cmp" in
|
||
|
ge|eq|le) return 0 ;;
|
||
|
gt|lt) return 1 ;;
|
||
|
esac
|
||
|
fi
|
||
|
- if [ "$cmp" = "lt" ] ; then
|
||
|
- c="$a"
|
||
|
- a="$b"
|
||
|
- b="$c"
|
||
|
+ if [ "$version_test_numeric_cmp" = "lt" ] ; then
|
||
|
+ version_test_numeric_c="$version_test_numeric_a"
|
||
|
+ version_test_numeric_a="$version_test_numeric_b"
|
||
|
+ version_test_numeric_b="$version_test_numeric_c"
|
||
|
fi
|
||
|
- if (echo "$a" ; echo "$b") | sort -n | head -n 1 | grep -qx "$b" ; then
|
||
|
+ if (echo "$version_test_numeric_a" ; echo "$version_test_numeric_b") | version_sort | head -n 1 | grep -qx "$version_test_numeric_b" ; then
|
||
|
return 0
|
||
|
else
|
||
|
return 1
|
||
|
@@ -182,32 +200,31 @@ version_test_numeric ()
|
||
|
|
||
|
version_test_gt ()
|
||
|
{
|
||
|
- local a="`echo "$1" | sed -e "s/[^-]*-//"`"
|
||
|
- local b="`echo "$2" | sed -e "s/[^-]*-//"`"
|
||
|
- local cmp=gt
|
||
|
- if [ "x$b" = "x" ] ; then
|
||
|
+ version_test_gt_a="`echo "$1" | sed -e "s/[^-]*-//"`"
|
||
|
+ version_test_gt_b="`echo "$2" | sed -e "s/[^-]*-//"`"
|
||
|
+ version_test_gt_cmp=gt
|
||
|
+ if [ "x$version_test_gt_b" = "x" ] ; then
|
||
|
return 0
|
||
|
fi
|
||
|
- case "$a:$b" in
|
||
|
+ case "$version_test_gt_a:$version_test_gt_b" in
|
||
|
*.old:*.old) ;;
|
||
|
- *.old:*) a="`echo -n "$a" | sed -e 's/\.old$//'`" ; cmp=gt ;;
|
||
|
- *:*.old) b="`echo -n "$b" | sed -e 's/\.old$//'`" ; cmp=ge ;;
|
||
|
+ *.old:*) version_test_gt_a="`echo -n "$version_test_gt_a" | sed -e 's/\.old$//'`" ; version_test_gt_cmp=gt ;;
|
||
|
+ *:*.old) version_test_gt_b="`echo -n "$version_test_gt_b" | sed -e 's/\.old$//'`" ; version_test_gt_cmp=ge ;;
|
||
|
esac
|
||
|
- version_test_numeric "$a" "$cmp" "$b"
|
||
|
+ version_test_numeric "$version_test_gt_a" "$version_test_gt_cmp" "$version_test_gt_b"
|
||
|
return "$?"
|
||
|
}
|
||
|
|
||
|
version_find_latest ()
|
||
|
{
|
||
|
- local a=""
|
||
|
+ version_find_latest_a=""
|
||
|
for i in "$@" ; do
|
||
|
- if version_test_gt "$i" "$a" ; then
|
||
|
- a="$i"
|
||
|
+ if version_test_gt "$i" "$version_find_latest_a" ; then
|
||
|
+ version_find_latest_a="$i"
|
||
|
fi
|
||
|
done
|
||
|
- echo "$a"
|
||
|
+ echo "$version_find_latest_a"
|
||
|
}
|
||
|
-
|
||
|
# One layer of quotation is eaten by "", the second by sed, and the third by
|
||
|
# printf; so this turns ' into \'. Note that you must use the output of
|
||
|
# this function in a printf format string.
|
||
|
diff --git a/util/grub.d/10_linux.in b/util/grub.d/10_linux.in
|
||
|
index 505aac6..9aa7270 100644
|
||
|
--- a/util/grub.d/10_linux.in
|
||
|
+++ b/util/grub.d/10_linux.in
|
||
|
@@ -168,7 +168,8 @@ while [ "x$list" != "x" ] ; do
|
||
|
"initrd-${alt_version}" "initramfs-${alt_version}.img" \
|
||
|
"initramfs-genkernel-${version}" \
|
||
|
"initramfs-genkernel-${alt_version}" \
|
||
|
- "initramfs-${version}"; do
|
||
|
+ "initramfs-${version}" \
|
||
|
+ "initramfs-${version}-install"; do
|
||
|
if test -e "${dirname}/${i}" ; then
|
||
|
initrd="$i"
|
||
|
break
|