tags 343076 patch
thanks
Attached is a patch to add Xen support.
Regards
Alastair
--- /sbin/update-grub 2006-04-06 06:33:15.000000000 +0100
+++ update-grub.new 2006-06-20 16:05:29.000000000 +0100
@@ -326,6 +326,9 @@
# alternatives
defoptions="quiet splash"
+# Xen kernel options to use with the default xen boot options
+xenoptions="console=tty0 quiet"
+
# options to use with the alternative boot options
altoptions="(recovery mode) single"
@@ -621,7 +624,43 @@
echo >> $buffer
}
+write_xen_kernel_entry()
+{
+ hypervisor_version=$1
+ hypervisor=$2
+ kernel_version=$3
+ grub_root_device=$4
+ kernel=$5
+ kernel_options=$6
+ recovery_suffix=$7
+ initrd=$8
+ savedefault=$9
+
+ echo -n "title Xen $hypervisor_version / XenLinux $kernel_version " >> $buffer
+ echo >> $buffer
+
+ echo "root $grub_root_device" >> $buffer
+ echo "kernel $hypervisor" >> $buffer
+
+ echo -n "module $kernel $kernel_options" >> $buffer
+ if [ -n "$recovery_desc" ]; then
+ echo -n " $recovery_suffix" >> $buffer
+ fi
+ echo >> $buffer
+
+
+ if [ -n "$initrd" ]; then
+ echo "module $initrd" >> $buffer
+ fi
+
+ if test x"$savedefault" = x"true" ; then
+ echo "savedefault" >> $buffer
+ fi
+ echo "boot" >> $buffer
+ echo >> $buffer
+}
+
echo -n "Testing for an existing GRUB menu.list file ... "
# Test if our menu file exists
@@ -683,6 +722,9 @@
defoptions=$(GetMenuOpt "nonaltoptions" "$defoptions")
defoptions=$(GetMenuOpt "defoptions" "$defoptions")
+# Extract Xen kernel options
+xenoptions=$(GetMenuOpt "xenoptions" "$xenoptions")
+
# Extract the howmany value
howmany=$(GetMenuOpt "howmany" "$howmany")
@@ -740,6 +782,10 @@
echo "# defoptions=$defoptions" >> $buffer
echo >> $buffer
+echo "## Xen options top use with the default Xen boot kernel option " >> $buffer
+echo "# xenoptions=$xenoptions" >> $buffer
+echo >> $buffer
+
echo "## altoption boot targets option" >> $buffer
echo "## multiple altoptions lines are allowed" >> $buffer
echo "## e.g. altoptions=(extra menu suffix) extra boot options" >> $buffer
@@ -795,22 +841,48 @@
fi
+xenKernels=""
+for ver in $(grep CONFIG_XEN_PRIVILEGED_GUEST=y /boot/config* | sed -e 's/\/boot\/config-\([^:]*\):[^:]*/\1/' ) ; do
+ # ver is a kernel version
+ kern="/boot/vmlinuz-$ver"
+ if [ -r $kern ] ; then
+ newerKernels=""
+ for i in $xenKernels ; do
+ res=$(CompareVersions "$kern" "$i")
+ if [ "$kern" != "" ] && [ "$res" -gt 0 ] ; then
+ newerKernels="$newerKernels $kern $i"
+ kern=""
+ else
+ newerKernels="$newerKernels $i"
+ fi
+ done
+ if [ "$kern" != "" ] ; then
+ newerKernels="$newerKernels $kern"
+ fi
+ xenKernels="$newerKernels"
+ fi
+done
+
sortedKernels=""
-for kern in $(/bin/ls -1vr /boot | grep -v "dpkg-*" | grep "^vmlinuz-") ; do
+for kern in $(/bin/ls -1vr /boot | grep -v "dpkg-*" | grep -v "xen" | grep "^vmlinuz-") ; do
# found a kernel
+ if `echo "$xenKernels" | grep -q $kern` ; then
+ continue
+ fi
+ # not a Xen kernel
kern="/boot/$kern"
newerKernels=""
for i in $sortedKernels ; do
- res=$(CompareVersions "$kern" "$i")
- if [ "$kern" != "" ] && [ "$res" -gt 0 ] ; then
- newerKernels="$newerKernels $kern $i"
- kern=""
- else
- newerKernels="$newerKernels $i"
- fi
+ res=$(CompareVersions "$kern" "$i")
+ if [ "$kern" != "" ] && [ "$res" -gt 0 ] ; then
+ newerKernels="$newerKernels $kern $i"
+ kern=""
+ else
+ newerKernels="$newerKernels $i"
+ fi
done
if [ "$kern" != "" ] ; then
- newerKernels="$newerKernels $kern"
+ newerKernels="$newerKernels $kern"
fi
sortedKernels="$newerKernels"
done
@@ -822,6 +894,14 @@
sortedKernels="/boot/vmlinuz $sortedKernels"
fi
+hypervisors=""
+for hyp in $(ls /boot | egrep "xen-.*.gz" ) ; do
+ if [ ! -h /boot/$hyp ] ; then
+ hypervisors="$hypervisors $hyp"
+ fi
+done
+echo "hypervisors $hypervisors"
+
# figure out where grub looks for the kernels at boot time
kernel_dir=/boot
if [ -n "$boot_device" ] ; then
@@ -910,6 +990,40 @@
fi
done
+# Now the Xen entries
+for hyp in $hypervisors ; do
+
+ hypName=$(basename $hyp)
+ hypVersion=$(echo $hypName | sed -e 's/xen-//' | sed -e 's/.gz//')
+ hypervisor=/boot/$hyp
+
+ for kern in $xenKernels ; do
+ if test ! x"$howmany" = x"all" ; then
+ if [ $counter -gt $howmany ] ; then
+ break
+ fi
+ fi
+ kernelName=$(basename $kern)
+
+ kernelVersion=$(echo $kernelName | sed -e 's/vmlinuz//')
+ initrdName=$(FindInitrdName "/boot" "$kernelVersion")
+ initrd=""
+
+ kernel=$kernel_dir/$kernelName
+ if [ -n "$initrdName" ] ; then
+ initrd=$kernel_dir/$initrdName
+ fi
+
+ echo "Found Xen hypervisor $hypVersion, kernel: $kernel"
+
+ kernelVersion=$(echo $kernelVersion | sed -e 's/^-//')
+
+ write_xen_kernel_entry "$hypVersion" "$hypervisor" "$kernelVersion" \
+ "$grub_root_device" "$kernel" "$currentOpt $xenoptions" "" "$initrd" "false"
+ done
+done
+
+
memtest86names="memtest86 memtest86+"
if test ! x"$memtest86" = x"false" ; then