forked from pool/grub2
Marcus Meissner
db0c793b4d
- refresh grub2-fix-menu-in-xen-host-server.patch: In domU we have to add xen kernel to config. (bnc#825528) OBS-URL: https://build.opensuse.org/request/show/182694 OBS-URL: https://build.opensuse.org/package/show/Base:System/grub2?expand=0&rev=46
100 lines
3.9 KiB
Diff
100 lines
3.9 KiB
Diff
From b411dc88b46890400a2e1ba0aa8650e00f738c23 Mon Sep 17 00:00:00 2001
|
|
From: Michael Chang <mchang@suse.com>
|
|
Date: Thu, 19 Jul 2012 18:43:55 +0800
|
|
Subject: [PATCH] fix menu in xen host server
|
|
|
|
References: bnc#771689, bnc#757895
|
|
Patch-Mainline: no
|
|
|
|
When system is configred as "Xen Virtual Machines Host Server", the
|
|
grub2 menu is not well organized. We could see some issues on it.
|
|
|
|
- Many duplicated xen entries generated by links to xen hypervisor
|
|
- Non bootable kernel entries trying to boot xen kernel natively
|
|
- The -dbg xen hypervisor takes precedence over release version
|
|
|
|
This patch fixes above three issues.
|
|
---
|
|
util/grub-mkconfig_lib.in | 5 +++++
|
|
util/grub.d/10_linux.in | 12 ++++++++++--
|
|
util/grub.d/20_linux_xen.in | 6 ++++--
|
|
3 files changed, 19 insertions(+), 4 deletions(-)
|
|
|
|
Index: grub-2.00/util/grub-mkconfig_lib.in
|
|
===================================================================
|
|
--- grub-2.00.orig/util/grub-mkconfig_lib.in
|
|
+++ grub-2.00/util/grub-mkconfig_lib.in
|
|
@@ -235,6 +235,11 @@ version_test_gt ()
|
|
*.old:*.old) ;;
|
|
*.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 ;;
|
|
+# bnc#757895 - Grub2 menu items incorrect when "Xen Virtual Machines Host Server" selected
|
|
+# The dbg version should be placed after release version
|
|
+ dbg-*:dbg-*) ;;
|
|
+ dbg-*:*) version_test_gt_a="" ;;
|
|
+ *:dbg-*) version_test_gt_b="" ;;
|
|
esac
|
|
version_test_numeric "$version_test_gt_a" "$version_test_gt_cmp" "$version_test_gt_b"
|
|
return "$?"
|
|
Index: grub-2.00/util/grub.d/10_linux.in
|
|
===================================================================
|
|
--- grub-2.00.orig/util/grub.d/10_linux.in
|
|
+++ grub-2.00/util/grub.d/10_linux.in
|
|
@@ -150,15 +150,37 @@ EOF
|
|
EOF
|
|
}
|
|
|
|
+# bnc#757895 - Grub2 menu items incorrect when "Xen Virtual Machines Host Server" selected
|
|
+# check kernel's flavor to prevent xen kernel from booting natively without hypervisor
|
|
+# bnc#825528 - grub2-mkconfig doesn't find kernel in xen domU
|
|
+# check xen kernel in domU and process it
|
|
+is_not_xen_kernel_in_dom0 ()
|
|
+{
|
|
+ flavor=`echo $1 | sed -e "s,.*-,,g"`
|
|
+
|
|
+ if [ "x${flavor}" = "xxen" ] ; then
|
|
+ # Determining Virtual Machine Identities
|
|
+ if [ -e /proc/xen -a ! -e /proc/xen/xsd_port ]; then
|
|
+ # We're in DomU
|
|
+ return 0
|
|
+ else
|
|
+ # We're in Dom0 or No Xen hypervisor present at all
|
|
+ return 1
|
|
+ fi
|
|
+ fi
|
|
+
|
|
+ return 0
|
|
+}
|
|
+
|
|
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
|
|
+ if grub_file_is_not_garbage "$i" && is_not_xen_kernel_in_dom0 "$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
|
|
+ if grub_file_is_not_garbage "$i" && is_not_xen_kernel_in_dom0 "$i" ; then echo -n "$i " ; fi
|
|
done` ;;
|
|
esac
|
|
|
|
Index: grub-2.00/util/grub.d/20_linux_xen.in
|
|
===================================================================
|
|
--- grub-2.00.orig/util/grub.d/20_linux_xen.in
|
|
+++ grub-2.00/util/grub.d/20_linux_xen.in
|
|
@@ -171,8 +171,10 @@ file_is_not_sym () {
|
|
esac
|
|
}
|
|
|
|
-xen_list=`for i in /boot/xen*; do
|
|
- if grub_file_is_not_garbage "$i" && file_is_not_sym "$i" ; then echo -n "$i " ; fi
|
|
+# bnc#757895 - Grub2 menu items incorrect when "Xen Virtual Machines Host Server" selected
|
|
+# wildcard expasion with correct suffix (.gz) and exclude symlinks for not generating many duplicated menu entries
|
|
+xen_list=`for i in /boot/xen*.gz; do
|
|
+ if grub_file_is_not_garbage "$i" && test ! -L "$i" ; then echo -n "$i " ; fi
|
|
done`
|
|
prepare_boot_cache=
|
|
boot_device_id=
|