bugGNU GRUB - Bugs: bug #30257, 10_linux ignores xen hypervisor...

 
 

You are not allowed to post comments on this tracker with your current authentication level.

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

Submitter:  Bruce Edge <bruce_edge>
Submitted:  Thu 24 Jun 2010 10:38:34 PM UTC
   
 
Category:  Configuration Severity:  Major
Priority:  5 - Normal Item Group:  Feature Request
Status:  Fixed Privacy:  Public
Assigned to:  None Originator Name: 
Open/Closed:  Closed Release:  1.98
Release:  Reproducibility:  Every Time
Planned Release:  None

Thu 24 Jun 2010 10:38:34 PM UTC, original submission:  

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), -email is unavailable-
#       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

Bruce Edge <bruce_edge>

 

(Note: upload size limit is set to 16384 kB, after insertion of the required escape characters.)

No files currently attached

 

Depends on the following items: None found

Items that depend on this one: None found

 

Carbon-Copy List
  • -email is unavailable- added by phcoder (Updated the item)
  • -email is unavailable- added by bruce_edge (Submitted the item)
  •  

    There are 0 votes so far. Votes easily highlight which items people would like to see resolved in priority, independently of the priority of the item set by tracker managers.

     

    Follow 2 latest changes.

    Date Changed by Updated Field Previous Value => Replaced by
    2010-06-28 phcoder StatusNone Fixed
        Open/ClosedOpen Closed

    Back to the top

    Powered by Savane 3.13-4448.
    Corresponding source code