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)