bug-grub
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[bug #30257] 10_linux ignores xen hypervisor entries and dom0 kernels


From: Bruce Edge
Subject: [bug #30257] 10_linux ignores xen hypervisor entries and dom0 kernels
Date: Thu, 24 Jun 2010 22:38:34 +0000
User-agent: Mozilla/5.0 (X11; U; Linux x86_64; en-US) AppleWebKit/534.1 (KHTML, like Gecko) Chrome/6.0.427.0 Safari/534.1

URL:
  <http://savannah.gnu.org/bugs/?30257>

                 Summary: 10_linux ignores xen hypervisor entries and dom0
kernels
                 Project: GNU GRUB
            Submitted by: bruce_edge
            Submitted on: Thu 24 Jun 2010 10:38:34 PM GMT
                Category: Configuration
                Severity: Major
                Priority: 5 - Normal
              Item Group: Feature Request
                  Status: None
                 Privacy: Public
             Assigned to: None
         Originator Name: 
        Originator Email: address@hidden
             Open/Closed: Open
         Discussion Lock: Any
                 Release: 
                 Release: 1.98
         Reproducibility: Every Time
         Planned Release: None

    _______________________________________________________

Details:

The current /etc/grub.d/10_linux generates boot stanzas for linux kernels
only and ignores xen hypervisors.
Boot entries could be generated for the default hypervisor and any dom0
compatible kernels by default.

This behavior could be controlled through additional variables in
/etc/default/grub to specify the xen boot args.

I posted a version of such script that worked for 1.96 on Ubuntu 9.04, but
that needs work for 1.98.

I had made it as a separate script, 09_xen as opposed to integrating into
10_linux, but I think that if it were integrated into 10_linux, then it would
fit better with the original intent of that script.

Perhaps have an additional variable that disables the hypervisor stuff
completely? Although, I don't think that anyone who installs a hypoervisor is
going to wonder where the subsequent boot entries came from.

FWIW, here's the original version (Yes it is just a hacked up copy of an old
10_linux): 


#!/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`

grep -q GRUB_CMDLINE_XEN_DEFAULT /etc/default/grub || list=""


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 dummy=dummy $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 to this item at:

  <http://savannah.gnu.org/bugs/?30257>

_______________________________________________
  Message sent via/by Savannah
  http://savannah.gnu.org/




reply via email to

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