2010/5/20 Vladimir 'φ-coder/phcoder' Serbinenko <phco...@gmail.com> > 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. >
What if I add a max_entries option. Say, don't generate more than 4 stanzas total. Although I suppose then I need to go through and pick the most recent kernel and hypervisor versions. Actually the hypervisor version isn't an issue, Xen installs a symlink for the most recent hypervisor in /boot, so one only needs to generate entries for one hypervisor. Where can I get a copy of the current implementation of this mechanism? Thanks -Bruce > > 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 > > > > _______________________________________________ > Grub-devel mailing list > Grub-devel@gnu.org > http://lists.gnu.org/mailman/listinfo/grub-devel > >
_______________________________________________ Grub-devel mailing list Grub-devel@gnu.org http://lists.gnu.org/mailman/listinfo/grub-devel