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

Reply via email to