WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-devel

[Xen-devel] /etc/grub.d/09-xen for generating grub.cfg for hypervisor bo

To: xen-devel@xxxxxxxxxxxxxxxxxxx
Subject: [Xen-devel] /etc/grub.d/09-xen for generating grub.cfg for hypervisor boot entries.
From: Bruce Edge <bruce.edge@xxxxxxxxx>
Date: Tue, 18 May 2010 15:30:14 -0700
Delivery-date: Tue, 18 May 2010 15:31:14 -0700
Dkim-signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:mime-version:received:received:date:message-id :subject:from:to:content-type; bh=37rP684oORTypJX/MEje8tptJMAVLAPdE/natfUvK6E=; b=uQmgJ2lfZ5ObSFfY+rWOURHQ5lcTX26afl5QDIPW4bgDs/XkGHPwkm58uhL0RN9h2E IJN+9nEzccJK7xPvpyl2pp+wBpihSeECqVoAdcPf8QXuV8uHyeobIccr4DUl6GdgWGAS qSte31JR6PAqZMZSwedhmJgx+bQo8hrkOd2mA=
Domainkey-signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=mime-version:date:message-id:subject:from:to:content-type; b=ZUKjc2bSR3KaBYs1pAvtnU2yBoc/XLI4skL75MIbg/ogbOcd/sSpKrp80AvP+/y3F0 sUbpimXpcwLXQmnQGiE0ovLjrPRypFpF8QBga2tI8EXANNdvTB+gETD3Y5ScqvZQlNfP N+O3DePVa/gffgDkdDuiNn+IGdXoCnteaRE2E=
Envelope-to: www-data@xxxxxxxxxxxxxxxxxxx
List-help: <mailto:xen-devel-request@lists.xensource.com?subject=help>
List-id: Xen developer discussion <xen-devel.lists.xensource.com>
List-post: <mailto:xen-devel@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=unsubscribe>
Sender: xen-devel-bounces@xxxxxxxxxxxxxxxxxxx
If this has already been done, please forgive me. However, if not, I'd like to submit this as a mechanism for generating a bootable grub2 stanza for hypervisors.

As the /etc/grub.d/* files rely on defaults in /etc/default/grub, I added the following Xen specific variable:

GRUB_CMDLINE_XEN_DEFAULT="console=com1 115200,8n1 dom0_mem=512M dom0_max_vcpus=1 dom0_vcpus_pin=true iommu=1,passthrough,no-intremap loglvl=all loglvl_guest=all loglevl=10 debug acpi=force apic=on apic_verbosity=verbose numa=on"

The script itself is a hacked version of the10-linux that comes with grub2. This is 09-xen so it places it's boot entries ahead of the non-xen entries.
The resulting grub.cfg entry looks like:

### BEGIN /etc/grub.d/09_xen ###
  insmod lvm
  set root=(system-dom0_0)
menuentry "Xen osa-dom0 6.0.13-05, linux 2.6.32.12" {
        multiboot /boot/xen.gz /boot/xen.gz console=com1 115200,8n1 dom0_mem=512M dom0_max_vcpus=1 dom0_vcpus_pin=true iommu=1,passthrough,no-intremap loglvl=all loglvl_guest=all loglevl=10 debug acpi=force apic=on apic_verbosity=verbose numa=on
        module /boot/vmlinuz-2.6.32.12 /boot/vmlinuz-2.6.32.12 root=UUID=a3764d7d-6292-4f08-8ece-480e54c77229  ro earlyprintk=xen loglevel=10 debug acpi=force console=hvc0,115200n8
        module /boot/initrd.img-2.6.32.12 /boot/initrd.img-2.6.32.12
}
### END /etc/grub.d/09_xen ###

Note the duplication of the first params. I believe there's a bug that drops the 1st param so this could be changed later.

#! /bin/sh -e

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" ; 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 /boot/xen.gz /boot/xen.gz $GRUB_CMDLINE_XEN_DEFAULT
        module ${rel_dirname}/${basename} ${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


-Bruce
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel