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: Seth Goldberg
Subject: Re: update-grub & Xen boot stanza generation
Date: Thu, 20 May 2010 16:45:01 -0700 (PDT)
User-agent: Alpine 2.00 (GSO 1167 2008-08-23)


 What is this 'dummy=dummy' on the multiboot line?

 --S

Quoting Bruce Edge, who wrote the following on Thu, 20 May 2010:

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.

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
#       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




reply via email to

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