Hello again!

On Sun, Jul 23, 2006 at 12:05:23PM +0200, I wrote:
> On Wed, Jul 19, 2006 at 09:10:19AM +0100, Alastair McKinstry wrote:
> > Thomas Schwinge wrote:
> > > I fixed some bugs and did some further improvements; please consider the
> > > attached patch.  There would be -- at least in my opinion -- a lot more
> > > to refactor in update-grub, but I stopped at this point.
> 
> Attached is an updated patch against the Debian grub svn repository.

Blah, it helps to actually attach the patch...


Regards,
 Thomas
Index: update-grub
===================================================================
--- update-grub (Revision 262)
+++ update-grub (Arbeitskopie)
@@ -325,9 +325,12 @@
 # should grub lock the old kernels
        lockold="false"
 
-# Xen kernel options to use with the default xen boot options
-xenoptions="console=tty0 quiet"
+# Xen hypervisor options to use with the default Xen boot option
+       xenhopt=""
 
+# Xen Linux kernel options to use with the default Xen boot option
+       xenkopt="console=tty0"
+
 # options to use with the alternative boot options
        altoptions="(single-user mode) single"
 
@@ -594,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          $title" >> $buffer
+       echo -n "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
@@ -614,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
@@ -624,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
@@ -635,42 +667,6 @@
 }
 
 
-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 ... " >&2
 
 # Test if our menu file exists
@@ -737,9 +733,12 @@
 # Extract the lockold value
 lockold=$(GetMenuOpt "lockold" "$lockold")
 
-# Extract Xen kernel options
-xenoptions=$(GetMenuOpt "xenoptions" "$xenoptions")
+# Extract Xen hypervisor options
+xenhopt=$(GetMenuOpt "xenhopt" "$xenhopt")
 
+# Extract Xen Linux kernel options
+xenkopt=$(GetMenuOpt "xenkopt" "$xenkopt")
+
 # Extract the howmany value
 howmany=$(GetMenuOpt "howmany" "$howmany")
 
@@ -805,10 +804,14 @@
 echo "# lockold=$lockold" >> $buffer
 echo >> $buffer
 
-echo "## Xen options top use with the default Xen boot kernel option " >> 
$buffer
-echo "# xenoptions=$xenoptions" >> $buffer
+echo "## Xen hypervisor options to use with the default Xen boot option" >> 
$buffer
+echo "# xenhopt=$xenhopt" >> $buffer
 echo >> $buffer
 
+echo "## Xen Linux kernel options to use with the default Xen boot 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
@@ -870,7 +873,7 @@
 
 
 xenKernels=""
-for ver in $(grep CONFIG_XEN_PRIVILEGED_GUEST=y /boot/config* | sed -e 
's/\/boot\/config-\([^:]*\):[^:]*/\1/' ) ; do
+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
@@ -923,12 +926,11 @@
 fi
 
 hypervisors=""
-for hyp in $(ls /boot | egrep "xen-.*.gz" ) ; do
-   if [ ! -h /boot/$hyp ] ; then
-        hypervisors="$hypervisors $hyp"
-   fi
+for hyp in /boot/xen-*.gz; do
+    if [ ! -h "$hyp" ] && [ -f "$hyp" ]; then
+       hypervisors="$hypervisors `basename "$hyp"`"
+    fi
 done
-echo "hypervisors $hypervisors"
 
 # figure out where grub looks for the kernels at boot time
 kernel_dir=/boot
@@ -970,6 +972,39 @@
 
 ## heres where we start writing out the kernel entries
 counter=0
+
+# Xen entries first.
+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/^-//')
+               currentOpt=$(get_kernel_opt $kernelVersion)
+
+               write_kernel_entry "$kernelVersion" '' '' "$grub_root_device" \
+                 "$kernel" "$currentOpt $xenkopt" '' "$initrd" true '' \
+                 Xen "$kernel_dir/$hypervisor" "$hypVersion" "$xenhopt"
+       done
+done
+
 for kern in $sortedKernels ; do
        counter=$(($counter + 1))
        if test ! x"$howmany" = x"all" ; then
@@ -1034,39 +1069,6 @@
        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+"
 

Reply via email to