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: Bruce Edge
Subject: Re: update-grub & Xen boot stanza generation
Date: Thu, 20 May 2010 18:58:21 -0700

I actually had the kernel arg=val repeated twice originally, but the xen-devel guys said to use dummy=dummy.
I thought the repeated kernel was less likely to break things.


-Bruce


On Thu, May 20, 2010 at 4:59 PM, Seth Goldberg <address@hidden> wrote:

 But isn't the argument after "multiboot" the multiboot kernel file?  Wouldn't GRUB try to load the file called "dummy=dummy"?


 --S

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

There's a bug in certain hypervisor versions where it drops the first
parameter. This is the accepted workaround, pass a dummy param as the first
entry.

-Bruce


On Thu, May 20, 2010 at 4:45 PM, Seth Goldberg <address@hidden>wrote:


 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


_______________________________________________
Grub-devel mailing list
address@hidden
http://lists.gnu.org/mailman/listinfo/grub-devel



_______________________________________________
Grub-devel mailing list
address@hidden
http://lists.gnu.org/mailman/listinfo/grub-devel


reply via email to

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