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 <seth.goldb...@oracle.com>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), 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
>
_______________________________________________
Grub-devel mailing list
Grub-devel@gnu.org
http://lists.gnu.org/mailman/listinfo/grub-devel

Reply via email to