Here's a Xen boot config generator for /etc/grub.d so you don't have to
manually create a 40-xen each time.
-Bruce
===cut===
#!/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 address hidden>
# COMPANY: LSI
# VERSION: 1.0
# CREATED: 05/19/2010 02:32:34 PM PDT
# REVISION: ---
#===============================================================================
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`
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
Here's a Xen boot config generator for /etc/grub.d so you don't have to
manually create a 40-xen each time.
-Bruce
===cut=== ======= ======= ======= ======= ======= ======= ======= ======= ======= ======= === ======= ======= ======= ======= ======= ======= ======= ======= ======= ======= ===
#!/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 address hidden>
# COMPANY: LSI
# VERSION: 1.0
# CREATED: 05/19/2010 02:32:34 PM PDT
# REVISION: ---
#======
prefix=/usr ${prefix} ${exec_ prefix} /lib /grub/update- grub_lib
exec_prefix=
libdir=
. ${libdir}
if [ "x${GRUB_ DISTRIBUTOR} " = "x" ] ; then {GRUB_DISTRIBUT OR}"
OS=GNU/Linux
else
OS="$
fi
# Source grub defaults
. /etc/default/grub
# loop-AES arranges things so that /dev/loop/X can be our root device, but loop/*| /dev/loop[ 0-9]) DEVICE= `losetup ${GRUB_DEVICE} | sed -e ]*(\([^ )]\+\)) .*/\1/" `
# the initrds that Linux uses don't like that.
case ${GRUB_DEVICE} in
/dev/
GRUB_
"s/^[^(
;;
esac
if [ "x${GRUB_ DEVICE_ UUID}" = "x" ] || [ "x${GRUB_ DISABLE_ LINUX_UUID} " = by-uuid/ ${GRUB_ DEVICE_ UUID}" ; then ROOT_DEVICE= ${GRUB_ DEVICE} ROOT_DEVICE= UUID=${ GRUB_DEVICE_ UUID}
"xtrue" ] \
|| ! test -e "/dev/disk/
LINUX_
else
LINUX_
fi
test_gt () zx]-,,g; s/[._-] \(pre\| rc\|test\ |git\|old\ )/~\1/g" ` zx]-,,g; s/[._-] \(pre\| rc\|test\ |git\|old\ )/~\1/g" `
{
local a=`echo $1 | sed -e
"s,.*/vmlinu[
local b=`echo $2 | sed -e
"s,.*/vmlinu[
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 is_not_ garbage "$i" && grep -q 'DOM0=y' xz]/config} ; then echo -n "$i " ; fi
if grub_file_
${i/vmlinu[
done`
grep -q GRUB_CMDLINE_ XEN_DEFAULT /etc/default/grub || list=""
while [ "x$list" != "x" ] ; do `find_latest $list` `basename $linux` `make_system_ path_relative_ to_its_ root $dirname` root_device_ thisversion= "${LINUX_ ROOT_DEVICE} "
linux=
echo "Found linux image: $linux" >&2
basename=
dirname=`dirname $linux`
rel_dirname=
version=`echo $basename | sed -e "s,^[^0-9]*-,,g"`
alt_version=`echo $version | sed -e "s,\.old$,,g"`
linux_
initrd= img-${version} " "initrd- ${version} .img" \
"initrd. img-${alt_ version} " "initrd- ${alt_version} .img"; do /${initrd} " >&2 root_device_ thisversion= ${GRUB_ DEVICE}
for i in "initrd.
if test -e "${dirname}/${i}" ; then
initrd="$i"
break
fi
done
if test -n "${initrd}" ; then
echo "Found initrd image: ${dirname}
else
# "UUID=" magic is parsed by initrds. Since there's no initrd, it can't
work here.
linux_
fi
cat << EOF dom0_0) XEN_DEFAULT /${basename} linux_root_ device_ thisversion} $GRUB_CMDLINE_ LINUX_DEFAULT /${initrd} ${rel_dirname} /${initrd}
insmod lvm
set root=(system-
menuentry "Xen ${OS}, linux ${version}" {
multiboot /boot/xen.gz dummy=dummy $GRUB_CMDLINE_
module ${rel_dirname}
root=${
EOF
if test -n "${initrd}" ; then
cat << EOF
module ${rel_dirname}
EOF
fi
cat << EOF
}
EOF
list=`echo $list | tr ' ' '\n' | grep -vx $linux | tr '\n' ' '`
done
===cut===