GNU GRUB - Bugs: bug #30257, 10_linux ignores xen hypervisor...
You are not allowed to post comments on this tracker with your current authentication level.
bug #30257: 10_linux ignores xen hypervisor entries and dom0 kernels
Submitter: | Bruce Edge <bruce_edge> | ||
Submitted: | Thu 24 Jun 2010 10:38:34 PM UTC | ||
Category: | Configuration | Severity: | Major |
Priority: | 5 - Normal | Item Group: | Feature Request |
Status: | Fixed | Privacy: | Public |
Assigned to: | None | Originator Name: | |
Open/Closed: | Closed | Release: | 1.98 |
Release: | Reproducibility: | Every Time | |
Planned Release: | None |
No files currently attached
Depends on the following items: None found
Items that depend on this one: None found
Carbon-Copy List
There are 0 votes so far. Votes easily highlight which items people would like to see resolved in priority, independently of the priority of the item set by tracker managers.
Follow 2 latest changes.
Date | Changed by | Updated Field | Previous Value | => | Replaced by |
---|---|---|---|---|---|
2010-06-28 | phcoder | Status | None | Fixed | |
Open/Closed | Open | Closed |
Powered by Savane 3.13-4448.
Corresponding source code
The current /etc/grub.d/10_linux generates boot stanzas for linux kernels only and ignores xen hypervisors.
Boot entries could be generated for the default hypervisor and any dom0 compatible kernels by default.
This behavior could be controlled through additional variables in /etc/default/grub to specify the xen boot args.
I posted a version of such script that worked for 1.96 on Ubuntu 9.04, but that needs work for 1.98.
I had made it as a separate script, 09_xen as opposed to integrating into 10_linux, but I think that if it were integrated into 10_linux, then it would fit better with the original intent of that script.
Perhaps have an additional variable that disables the hypervisor stuff completely? Although, I don't think that anyone who installs a hypoervisor is going to wonder where the subsequent boot entries came from.
FWIW, here's the original version (Yes it is just a hacked up copy of an old 10_linux):
#!/bin/bash -e
#===============================================================================
#
# FILE: 09_xen
#
# USAGE: update-grub ... with this in /etc/grub.d
#
# DESCRIPTION: Generate grub2 boot stanza for Xen systems
# Xen boot entries are automatically added to grub.cfg
# The 09-... name prefix puts the Xen boot entries before
# the linux kernel entries
#
# OPTIONS: ---
# REQUIREMENTS: --- grub2, Xen hypervisor
# BUGS: --- probably
# NOTES: --- Copied from 10_linux with a few hacks to make ir work for Xen.
# Incorporated suggestions to only do this for valid dom0 kernels
# AUTHOR: Bruce Edge (BRE), -email is unavailable-
# COMPANY: LSI
# VERSION: 1.0
# CREATED: 05/19/2010 02:32:34 PM PDT
# REVISION: ---
#===============================================================================
prefix=/usr
exec_prefix=${prefix}
libdir=${exec_prefix}/lib
. ${libdir}/grub/update-grub_lib
if [ "x${GRUB_DISTRIBUTOR}" = "x" ] ; then
OS=GNU/Linux
else
OS="${GRUB_DISTRIBUTOR}"
fi
# Source grub defaults
. /etc/default/grub
# loop-AES arranges things so that /dev/loop/X can be our root device, but
# the initrds that Linux uses don't like that.
case ${GRUB_DEVICE} in
/dev/loop/*|/dev/loop[0-9])
GRUB_DEVICE=`losetup ${GRUB_DEVICE} | sed -e "s/^[^(]*(([^)]+)).*/1/"`
;;
esac
if [ "x${GRUB_DEVICE_UUID}" = "x" ] || [ "x${GRUB_DISABLE_LINUX_UUID}" = "xtrue" ]
|| ! test -e "/dev/disk/by-uuid/${GRUB_DEVICE_UUID}" ; then
LINUX_ROOT_DEVICE=${GRUB_DEVICE}
else
LINUX_ROOT_DEVICE=UUID=${GRUB_DEVICE_UUID}
fi
test_gt ()
{
local a=`echo $1 | sed -e "s,.*/vmlinu[zx]-,,g;s/[._-](pre|rc|test|git|old)/~1/g"`
local b=`echo $2 | sed -e "s,.*/vmlinu[zx]-,,g;s/[._-](pre|rc|test|git|old)/~1/g"`
if [ "x$b" = "x" ] ; then
return 0
fi
dpkg --compare-versions "$a" gt "$b"
return $?
}
find_latest ()
{
local a=""
for i in $@ ; do
if test_gt "$i" "$a" ; then
a="$i"
fi
done
echo "$a"
}
list=`for i in /boot/vmlinu[xz]-* /vmlinu[xz]-* ; do
if grub_file_is_not_garbage "$i" && grep -q 'DOM0=y' ${i/vmlinu[xz]/config} ; then echo -n "$i " ; fi
done`
grep -q GRUB_CMDLINE_XEN_DEFAULT /etc/default/grub || list=""
while [ "x$list" != "x" ] ; do
linux=`find_latest $list`
echo "Found linux image: $linux" >&2
basename=`basename $linux`
dirname=`dirname $linux`
rel_dirname=`make_system_path_relative_to_its_root $dirname`
version=`echo $basename | sed -e "s,^[^0-9]*-,,g"`
alt_version=`echo $version | sed -e "s,.old$,,g"`
linux_root_device_thisversion="${LINUX_ROOT_DEVICE}"
initrd=
for i in "initrd.img-${version}" "initrd-${version}.img"
"initrd.img-${alt_version}" "initrd-${alt_version}.img"; do
if test -e "${dirname}/${i}" ; then
initrd="$i"
break
fi
done
if test -n "${initrd}" ; then
echo "Found initrd image: ${dirname}/${initrd}" >&2
else
# "UUID=" magic is parsed by initrds. Since there's no initrd, it can't work here.
linux_root_device_thisversion=${GRUB_DEVICE}
fi
cat << EOF
insmod lvm
set root=(system-dom0_0)
menuentry "Xen ${OS}, linux ${version}" {
multiboot /boot/xen.gz dummy=dummy $GRUB_CMDLINE_XEN_DEFAULT
module ${rel_dirname}/${basename} root=${linux_root_device_thisversion} $GRUB_CMDLINE_LINUX_DEFAULT
EOF
if test -n "${initrd}" ; then
cat << EOF
module ${rel_dirname}/${initrd} ${rel_dirname}/${initrd}
EOF
fi
cat << EOF
}
EOF
list=`echo $list | tr ' ' 'n' | grep -vx $linux | tr 'n' ' '`
done