Bruce Edge wrote: > Hi > Apologies in advance if this is already in the works. > > I wanted to provide an etc/grub.d rule for generating boot stanzas for > Xen based systems such that it would end up in the upstream grub release. > If this conforms to the appropriate conventions, could someone > possibly add it ? > > It's basically a copy of etc/grub.d/10_linux and adds checks for dom0 > capable kernels. I picked "09_" as I assumed that one would want to > default to the Xen boot entry, but that may be a matter of some debate. > This is aready worked on but the problem is that it generates too much entries. If you have 5 different versions of hypervisor and 10 different kernels you have 100 entries. > Thanks > > -Bruce > > > #!/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), bruce.e...@lsi.com > <mailto:bruce.e...@lsi.com> > # 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` > > 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 dummy=dummy /boot/xen.gz $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 > > ------------------------------------------------------------------------ > > _______________________________________________ > Grub-devel mailing list > Grub-devel@gnu.org > http://lists.gnu.org/mailman/listinfo/grub-devel >
-- Regards Vladimir 'φ-coder/phcoder' Serbinenko
signature.asc
Description: OpenPGP digital signature
_______________________________________________ Grub-devel mailing list Grub-devel@gnu.org http://lists.gnu.org/mailman/listinfo/grub-devel