Hi,
based on Bastian's comments here and a clarification on IRC (thanks!), I
would like to propose the attached patch.
It implements the following behaviour
CONFIG_XEN + CONFIG_XEN_PRIVILEGED_GUEST
--> added to xen0Kernels
CONFIG_XEN + CONFIG_PARAVIRT
--> kept in kernel list
CONFIG_XEN + no CONFIG_PARAVIRT
--> removed from kernel list
(domU capable, but not bootable standalone)
no CONFIG_XEN
--> kept in kernel list
For the Debian (most of etch and lenny for i386 and amd64) kernels,
the valid config flags are
config-2.6.18-6-486
config-2.6.18-6-686
config-2.6.18-6-686-bigmem
config-2.6.18-6-amd64
config-2.6.18-6-k7
config-2.6.18-6-vserver-686
config-2.6.18-6-vserver-amd64
config-2.6.18-6-vserver-k7
config-2.6.18-6-xen-686 CONFIG_XEN CONFIG_XEN_PRIVILEGED_GUEST
config-2.6.18-6-xen-amd64 CONFIG_XEN CONFIG_XEN_PRIVILEGED_GUEST
config-2.6.18-6-xen-vserver-686 CONFIG_XEN CONFIG_XEN_PRIVILEGED_GUEST
config-2.6.18-6-xen-vserver-amd64 CONFIG_XEN CONFIG_XEN_PRIVILEGED_GUEST
config-2.6.26-1-486 CONFIG_PARAVIRT
config-2.6.26-1-686 CONFIG_PARAVIRT
config-2.6.26-1-686-bigmem CONFIG_XEN CONFIG_PARAVIRT
config-2.6.26-1-amd64 CONFIG_PARAVIRT
config-2.6.26-1-openvz-686 CONFIG_XEN CONFIG_PARAVIRT
config-2.6.26-1-openvz-amd64 CONFIG_PARAVIRT
config-2.6.26-1-vserver-686 CONFIG_PARAVIRT
config-2.6.26-1-vserver-686-bigmem CONFIG_XEN CONFIG_PARAVIRT
config-2.6.26-1-vserver-amd64 CONFIG_PARAVIRT
config-2.6.26-1-xen-686 CONFIG_XEN CONFIG_XEN_PRIVILEGED_GUEST
config-2.6.26-1-xen-amd64 CONFIG_XEN CONFIG_XEN_PRIVILEGED_GUEST
so we end up with:
bootable with xen kernel
- 2.6.26-1-xen-amd64
- 2.6.26-1-xen-686
- 2.6.18-6-xen-vserver-amd64
- 2.6.18-6-xen-vserver-686
- 2.6.18-6-xen-amd64
- 2.6.18-6-xen-686
bootable standalone
- 2.6.26-1-vserver-686-bigmem
- 2.6.26-1-vserver-amd64
- 2.6.26-1-vserver-686
- 2.6.26-1-openvz-amd64
- 2.6.26-1-openvz-686
- 2.6.26-1-686-bigmem
- 2.6.26-1-amd64
- 2.6.26-1-686
- 2.6.26-1-486
- 2.6.18-6-vserver-k7
- 2.6.18-6-vserver-amd64
- 2.6.18-6-vserver-686
- 2.6.18-6-686-bigmem
- 2.6.18-6-k7
- 2.6.18-6-amd64
- 2.6.18-6-686
- 2.6.18-6-486
I have also consolidated the detection and stuff to make use of the
sorted kernel list and postprocess that.
Even though the diff contains a changelog snippet, I would prefer to
have Bastian OK it and also happily leave uploading to the grub
maintainers, even though I could also NMU (e.g. when I get bored waiting
or it actually helps...).
Kind regards
T.
--
Thomas Viehmann, http://thomas.viehmann.net/
diff -u grub-0.97/debian/update-grub grub-0.97/debian/update-grub
--- grub-0.97/debian/update-grub
+++ grub-0.97/debian/update-grub
@@ -748,58 +748,6 @@
echo "none found, skipping ..." >&2
fi
-xen0Kernels=""
-# First old style non-CONFIG_PARAVIRT kernels with xen0 support.
-for ver in `grep -l CONFIG_XEN=y /boot/config* | sed -e s%/boot/config-%%`; do
- if ! grep -q CONFIG_XEN_PRIVILEGED_GUEST=y /boot/config-$ver ; then
- continue
- fi
- # ver is a kernel version
- kern="/boot/vmlinuz-$ver"
- if [ -r $kern ] ; then
- newerKernels=""
- for i in $xen0Kernels ; do
- res=$(CompareVersions "$kern" "$i")
- if [ "$kern" != "" ] && [ "$res" -gt 0 ] ; then
- newerKernels="$newerKernels $kern $i"
- kern=""
- else
- newerKernels="$newerKernels $i"
- fi
- done
- if [ "$kern" != "" ] ; then
- newerKernels="$newerKernels $kern"
- fi
- xen0Kernels="$newerKernels"
- fi
-done
-
-# Second new style CONFIG_PARAVIRT kernels with xen support. There is
-# no distinction between xen0 and xenU in these kernels.
-for ver in `grep -l CONFIG_PARAVIRT=y /boot/config* | sed -e s%/boot/config-%%`; do
- if ! grep -q CONFIG_XEN=y /boot/config-$ver ; then
- continue
- fi
- # ver is a kernel version
- kern="/boot/vmlinuz-$ver"
- if [ -r $kern ] ; then
- newerKernels=""
- for i in $xen0Kernels ; do
- res=$(CompareVersions "$kern" "$i")
- if [ "$kern" != "" ] && [ "$res" -gt 0 ] ; then
- newerKernels="$newerKernels $kern $i"
- kern=""
- else
- newerKernels="$newerKernels $i"
- fi
- done
- if [ "$kern" != "" ] ; then
- newerKernels="$newerKernels $kern"
- fi
- xen0Kernels="$newerKernels"
- fi
-done
-
sortedKernels=""
for kern in $(/bin/ls -1vr /boot | grep -v "dpkg-*" | grep "^vmlinuz-") ; do
kern="/boot/$kern"
@@ -819,6 +767,39 @@
sortedKernels="$newerKernels"
done
+# Check the sorted kernels for Xen-capable images
+# Bastian Blank explains in #500336:
+# - CONFIG_XEN is set for any Xen capable image.
+# - CONFIG_PARAVIRT is set for the images which can do both.
+# - CONFIG_XEN_PRIVILEGED_GUEST is currently set for anything which can be
+# booted via a hypervisor.
+# So images with CONFIG_XEN and no CONFIG_PARAVIRT must not show up as
+# normal bootable.
+#
+# So: CONFIG_XEN + CONFIG_XEN_PRIVILEGED_GUEST
+# --> dom0-capable
+# CONFIG_XEN + CONFIG_PARAVIRT
+# --> domU capabable that can be booted without Xen as well
+# CONFIG_XEN + NO CONFIG_PARAVIRT
+# --> domU capable, but must not show up in grub
+newSortedKernels=""
+xen0Kernels=""
+for kern in $sortedKernels ; do
+ kernCfg=$(echo "$kern" | sed 's,/vmlinuz-,/config-,')
+ if grep -q CONFIG_XEN=y "$kernCfg" ; then
+ if grep -q CONFIG_PARAVIRT=y "$kernCfg" ; then
+ newSortedKernels="$newSortedKernels $kern"
+ fi
+ if grep -q CONFIG_XEN_PRIVILEGED_GUEST=y "$kernCfg" ; then
+ xen0Kernels="$xen0Kernels $kern"
+ fi
+ else
+ newSortedKernels="$newSortedKernels $kern"
+ fi
+
+done
+sortedKernels="$newSortedKernels"
+
if test -f "/boot/vmlinuz.old" ; then
sortedKernels="/boot/vmlinuz.old $sortedKernels"
fi
diff -u grub-0.97/debian/changelog grub-0.97/debian/changelog
--- grub-0.97/debian/changelog
+++ grub-0.97/debian/changelog
@@ -1,3 +1,10 @@
+grub (0.97-47.1) unstable; urgency=low
+
+ * Non-maintainer upload.
+ * Fix xen-capability detection. Closes: #500336
+
+ -- Thomas Viehmann <[EMAIL PROTECTED]> Fri, 17 Oct 2008 23:27:55 +0200
+
grub (0.97-47) unstable; urgency=high
* update-grub: Send grub-probe stderr output to /dev/null. (Closes: #495909)