Package: grub-pc
Version: 1.96+20080724-14
Tags: patch                                                                     
      
                                                                                
      
While upgrading from grub (v1) to grub-pc (v2) the debconf script
(grub-pc.config) tries to migrate existing kopt arguments from
/boot/grub/menu.lst.

In my case kopt looked like this:

  kopt=root=/dev/sda2 resume=/dev/sda1 acpi_sleep=s3_bios vga=0x0368 ro

The responsible code snippet from grub-pc.config

1       if [ "$RET" = "fillme" ] ; then
2           kopt=`sed -ne "s/^# kopt=//p" /boot/grub/menu.lst | tr -s " " "\n" |
3           grep -vx "\(ro\|root=[^ ]*\)"` || true
4               db_set grub-pc/linux_cmdline "${kopt}" || true

removes root= and ro options, so afterwards kopt contains

  resume=/dev/sda1
  acpi_sleep=s3_bios
  vga=0x0368

(Take care there are really newlines in, since this was requested
through the preceding tr operation from line 2.)

In line 4 the contents of $kopt are committed to debconf which silently
fails.

Since the quotes around ${kopt} expand the string as it is (newlines are
keept), db_set gets an argument with newlines resulting in
grub-pc/linux_cmdline only containing the first parameter
(resume=/dev/sda1).  The remaining kernel options are lost.

So please remove the quotes from line 4 to profit from bash's word
splitting, which works find in this case. The $kopt var will be split at
all characters from IFS and concatenated with spaces.

  Best regards from Dresden/Germany!                                            
     
  Marcus Obst                 
diff -r a47bcf8fd823 grub-pc.config
--- a/grub-pc.config    Wed Feb 11 11:20:48 2009 +0100
+++ b/grub-pc.config    Wed Feb 11 11:21:38 2009 +0100
@@ -9,7 +9,7 @@
   # this check ensures we only do this once
   if [ "$RET" = "fillme" ] ; then
     kopt=`sed -ne "s/^# kopt=//p" /boot/grub/menu.lst | tr -s " " "\n" | grep 
-vx "\(ro\|root=[^ ]*\)"` || true
-    db_set grub-pc/linux_cmdline "${kopt}" || true
+    db_set grub-pc/linux_cmdline ${kopt} || true
     if [ "${kopt}" == "" ] ; then
       # something smells bad.  give user a chance to correct it.
       priority=high

Attachment: pgp7eapHPioV7.pgp
Description: PGP signature

Reply via email to