All of lore.kernel.org
 help / color / mirror / Atom feed
* update-grub & Xen boot stanza generation
@ 2010-05-20 23:36 Bruce Edge
  2010-05-20 23:45 ` Seth Goldberg
  2010-05-20 23:53 ` Vladimir 'φ-coder/phcoder' Serbinenko
  0 siblings, 2 replies; 13+ messages in thread
From: Bruce Edge @ 2010-05-20 23:36 UTC (permalink / raw)
  To: grub-devel

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

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

[-- Attachment #2: Type: text/html, Size: 6222 bytes --]

^ permalink raw reply	[flat|nested] 13+ messages in thread

end of thread, other threads:[~2010-05-24 17:01 UTC | newest]

Thread overview: 13+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
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
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

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.