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

Submitted by:  Bruce Edge <bruce_edge>
Submitted on:  Thu 24 Jun 2010 10:38:34 PM UTC  
 
Category: ConfigurationSeverity: Major
Priority: 5 - NormalItem Group: Feature Request
Status: FixedPrivacy: Public
Assigned to: NoneOriginator Name: 
Open/Closed: ClosedRelease: 
Release: 1.98Reproducibility: 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), -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>

 

No files currently attached

 

Depends on the following items: None found

Items that depend on this one: None found

 

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

    Do you think this task is very important?
    If so, you can click here to add your encouragement to it.
    This task has 0 encouragements so far.

    Only logged-in users can vote.

     

    Please enter the title of George Orwell's famous dystopian book (it's a date):

     

     

    Follow 2 latest changes.

    Date Changed By Updated Field Previous Value => Replaced By
    Mon 28 Jun 2010 03:56:30 PM UTCphcoderStatusNone=>Fixed
      Open/ClosedOpen=>Closed

    Back to the top


    Powered by Savane 3.1-cleanup1