grub-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: update-grub & Xen boot stanza generation


From: Vladimir 'φ-coder/phcoder' Serbinenko
Subject: Re: update-grub & Xen boot stanza generation
Date: Fri, 21 May 2010 01:53:25 +0200
User-agent: Mozilla-Thunderbird 2.0.0.22 (X11/20091109)

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), address@hidden
> <mailto:address@hidden> 
> #       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
> address@hidden
> http://lists.gnu.org/mailman/listinfo/grub-devel
>   


-- 
Regards
Vladimir 'φ-coder/phcoder' Serbinenko


Attachment: signature.asc
Description: OpenPGP digital signature


reply via email to

[Prev in Thread] Current Thread [Next in Thread]