Package: grub
Version: 0.97-12
Followup-For: Bug #343076

The previous patch only apply on already patched (with first patch)
update-grub

The attached patch can be applied directly to update-grub and have a
little improvement: you can specify hypervisor options.

The default configuration for hypervisor is the mine, so i don't
assert it is useful for others (but dom0_mem).

Options passed to kernel are the default, but I have added them
because they are often useful.

Bye

-- System Information:
Debian Release: testing/unstable
  APT prefers unstable
  APT policy: (990, 'unstable'), (1, 'experimental')
Architecture: i386 (i686)
Shell:  /bin/sh linked to /bin/bash
Kernel: Linux 2.6.17-1-686
Locale: LANG=it_IT.UTF-8, LC_CTYPE=it_IT.UTF-8 (charmap=UTF-8)

Versions of packages grub depends on:
ii  libc6                         2.3.6-15   GNU C Library: Shared libraries
ii  libncurses5                   5.5-2      Shared libraries for terminal hand

grub recommends no packages.

-- no debconf information

-- 
---------------------------------------------------------------------
|    Marco Nenciarini    | Debian/GNU Linux Developer - Plug Member |
| [EMAIL PROTECTED] | http://www.prato.linux.it/~mnencia       |
---------------------------------------------------------------------
Key fingerprint = FED9 69C7 9E67 21F5 7D95  5270 6864 730D F095 E5E4

--- update-grub.orig    2006-07-20 17:26:18.000000000 +0200
+++ update-grub 2006-07-20 17:35:18.000000000 +0200
@@ -325,6 +325,12 @@
 # should grub lock the old kernels
        lockold="false"
 
+# Xen hypervisor options to use with the default xen boot options
+       xenhopt="sched=bvt dom0_mem=128M"
+
+# Xen kernel options to use with the default xen boot options
+       xenkopt="console=tty0 max_loop=8 loopback.nloopbacks=8"
+
 # options to use with the alternative boot options
        altoptions="(single-user mode) single"
 
@@ -591,8 +597,22 @@
        local initrd; initrd=$1; shift
        local savedefault; savedefault=$1; shift
        local lockold; lockold=$1; shift
+       local hypervisor
+       if [ -n "$1" ]; then
+               # Hypervisor.
+               hypervisor=$1; shift
+               local hypervisor_image; hypervisor_image=$1; shift
+               local hypervisor_version; hypervisor_version=$1; shift
+               local hypervisor_options; hypervisor_options=$1; shift
+       fi
+
+       echo -n "title          " >> $buffer
 
-       echo -n "title          $title" >> $buffer
+       if [ -n "$hypervisor" ]; then
+               echo -n "$hypervisor $hypervisor_version / " >> $buffer
+       fi
+
+       echo -n "$title" >> $buffer
        if [ -n "$kernel_version" ]; then
                echo -n ", kernel $kernel_version" >> $buffer
        fi
@@ -611,7 +631,17 @@
        fi
 
        echo "root              $grub_root_device" >> $buffer
-       echo -n "kernel         $kernel"  >> $buffer
+
+       echo -n "kernel         "  >> $buffer
+       if [ -n "$hypervisor" ]; then
+               echo -n "$hypervisor_image" >> $buffer
+               if [ -n "$hypervisor_options" ]; then
+                       echo -n " $hypervisor_options"  >> $buffer
+               fi
+               echo >> $buffer
+               echo -n "module         "  >> $buffer
+       fi
+       echo -n "$kernel"  >> $buffer
        if [ -n "$kernel_options" ]; then
                echo -n " $kernel_options"  >> $buffer
        fi
@@ -621,7 +651,12 @@
        echo >> $buffer
 
        if [ -n "$initrd" ]; then
-               echo "initrd            $initrd" >> $buffer
+               if [ -n "$hypervisor" ]; then
+                       echo -n "module         " >> $buffer
+               else
+                       echo -n "initrd         " >> $buffer
+               fi
+               echo "$initrd" >> $buffer
        fi
 
        if test x"$savedefault" = x"true" ; then
@@ -698,6 +733,12 @@
 # Extract the lockold value
 lockold=$(GetMenuOpt "lockold" "$lockold")
 
+# Extract Xen hypervisor options
+xenhopt=$(GetMenuOpt "xenhopt" "$xenhopt")
+
+# Extract Xen kernel options
+xenkopt=$(GetMenuOpt "xenkopt" "$xenkopt")
+
 # Extract the howmany value
 howmany=$(GetMenuOpt "howmany" "$howmany")
 
@@ -763,6 +804,14 @@
 echo "# lockold=$lockold" >> $buffer
 echo >> $buffer
 
+echo "## Xen options to use with the Xen hypervisor " >> $buffer
+echo "# xenhopt=$xenhopt" >> $buffer
+echo >> $buffer
+
+echo "## Xen options to use with the default Xen boot kernel option " >> 
$buffer
+echo "# xenkopt=$xenkopt" >> $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
@@ -823,9 +872,35 @@
 fi
 
 
+xenKernels=""
+for ver in `grep -l CONFIG_XEN_PRIVILEGED_GUEST=y /boot/config* | sed -e 
s%/boot/config-%%`; 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
@@ -850,6 +925,13 @@
        sortedKernels="/boot/vmlinuz $sortedKernels"
 fi
 
+hypervisors=""
+for hyp in /boot/xen-*.gz; do
+    if [ ! -h "$hyp" ] && [ -f "$hyp" ]; then
+       hypervisors="$hypervisors `basename "$hyp"`"
+    fi
+done
+
 # figure out where grub looks for the kernels at boot time
 kernel_dir=/boot
 if [ -n "$boot_device" ] ; then
@@ -954,6 +1036,38 @@
        fi
 done
 
+# Now the Xen entries
+for hypervisor in $hypervisors; do
+    hypVersion=`basename "$hypervisor" .gz | sed s%xen-%%`
+
+    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_kernel_entry "$kernelVersion" '' '' "$grub_root_device" \
+                 "$kernel" "$currentOpt $xenkopt" '' "$initrd" true '' \
+                 Xen "$kernel_dir/$hypervisor" "$hypVersion" "$xenhopt"
+       done
+done
+
+    
 memtest86names="memtest86 memtest86+"
 
 if test ! x"$memtest86" = x"false" ; then

Attachment: signature.asc
Description: Digital signature

Reply via email to