All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Vladimir 'φ-coder/phcoder' Serbinenko" <phcoder@gmail.com>
To: The development of GNU GRUB <grub-devel@gnu.org>
Subject: Re: update-grub & Xen boot stanza generation
Date: Fri, 21 May 2010 01:53:25 +0200	[thread overview]
Message-ID: <4BF5CB75.20101@gmail.com> (raw)
In-Reply-To: <AANLkTinJBFqnIcHO7YKOMm-bWu0XoTxHlbIIp53AnAaK@mail.gmail.com>

[-- Attachment #1: Type: text/plain, Size: 5153 bytes --]

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.edge@lsi.com
> <mailto:bruce.edge@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



[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 293 bytes --]

  parent reply	other threads:[~2010-05-20 23:53 UTC|newest]

Thread overview: 13+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-05-20 23:36 update-grub & Xen boot stanza generation Bruce Edge
2010-05-20 23:45 ` Seth Goldberg
2010-05-20 23:55   ` Bruce Edge
2010-05-20 23:59     ` Seth Goldberg
2010-05-21  1:58       ` Bruce Edge
2010-05-21  6:58         ` Grégoire Sutre
2010-05-21 15:14           ` Bruce Edge
2010-05-20 23:53 ` Vladimir 'φ-coder/phcoder' Serbinenko [this message]
2010-05-20 23:57   ` Bruce Edge
2010-05-21  0:35     ` Vladimir 'φ-coder/phcoder' Serbinenko
2010-05-24  4:48       ` Joey Korkames
2010-05-24 16:45         ` Isaac Dupree
2010-05-24 17:00           ` Bruce Edge

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=4BF5CB75.20101@gmail.com \
    --to=phcoder@gmail.com \
    --cc=grub-devel@gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.