[Bug 1325606] Re: grub-installer fails on 26+ disks (restrictive shell pattern)

Mauricio Faria de Oliveira mauricfo at linux.vnet.ibm.com
Mon Jun 2 14:29:03 UTC 2014


Attaching patch w/ 'solution proposal' (mentioned in description).

** Patch added: "grub-installer-26plus-disks.patch"
   https://bugs.launchpad.net/ubuntu/+source/grub-installer/+bug/1325606/+attachment/4124172/+files/grub-installer-26plus-disks.patch

-- 
You received this bug notification because you are a member of Ubuntu
Foundations Bugs, which is subscribed to grub-installer in Ubuntu.
https://bugs.launchpad.net/bugs/1325606

Title:
  grub-installer fails on 26+ disks (restrictive shell pattern)

Status in “grub-installer” package in Ubuntu:
  Confirmed

Bug description:
  Problem:
  -------

  grub-installer fails on disks greater than the 26th disk.

  Upfront, I acknowledge this is an unlikely scenario, but that problem was caught by test teams,
  and it might be worth fixing (proposal included below) for some application/cases/environments.

  
  Cause:
  -----

  Shell pattern matching rule (/usr/bin/grub-installer, line 327).

  		 case $prefix in
  		     [...]
  		    /dev/[hsv]d[a-z0-9]|[...])     <<---
  		     [...]
  		     *)
  		     [...]

  That pattern disallows disks named after /dev/sdaa, for example.
  Names with 2 letters are assigned to the 27th disk forwards (i.e., sda-sdz for the first 26).

  With the current code, disks > 26 will match the '*' (asterisk) rule,
  and hit the grub-installer error.

  
  Solution Proposal:
  -----------------

  sed '327 s,|,*|,' -i /usr/bin/grub-installer

  i.e.,

  		 case $prefix in
  		     [...]
  		-    /dev/[hsv]d[a-z0-9]|[...])
  		+    /dev/[hsv]d[a-z0-9]*|[...])    
  		     [...]
  		     *)
  		     [...]

  This would allow the old pattern to exist (* matches /zero/ or more characters),
  while allowing more characters after an initial alphanumeric character.

  Caveat: ok, the new characters can now be anything (asterisk), not only alphanumeric
  chars, but I think it's unlikely to see anything named after "/dev/[hsv]d[a-z0-9](more chars)" 
  where '(more chars)' isn't also '[a-z0-9]', specially on the (mostly controlled) installer scenario.

  
  Problem Test-case:
  -----------------

  Install with 27 disks, choosing the 27th disk (sdaa, or vdaa..
  anything w/ 2 alphas before a partition number)

  Step 0) create 27 disk images

  $ for i in {1..27}; do qemu-img create -f qcow2 disk-$i.qcow2 1g; done
  Formatting 'disk-1.qcow2', fmt=qcow2 size=1073741824 encryption=off cluster_size=65536 lazy_refcounts=off 
  [...]
  Formatting 'disk-27.qcow2', fmt=qcow2 size=1073741824 encryption=off cluster_size=65536 lazy_refcounts=off
  $

  Step 1) install ubuntu server on it

  Using ppc64el as an example, but should occur on other archs too:

  (use 'eval' for the correct expansion of '-drive\
  file=disk-{1..27}.qcow2')

  $ eval qemu-system-ppc64 -enable-kvm -M pseries -cpu POWER7 -smp
  1,cores=1,threads=1 -m 1G -vga none -nographic -boot once=d -device
  spapr-vscsi  -drive media=cdrom,file=ubuntu-14.04-server-ppc64el.iso
  -drive\ file=disk-{1..27}.qcow2

  
  Step 2) proceed until grub install stage; it will fail.


  
  Solution Test-case:
  ------------------

  Same steps as 'problem test-case', but on the 'Partition disks' stage (or anything
  after /usr/bin/grub-installer is present), drop to a shell and modify the script:

  	[...]
  	Partition disks
  	Go Back
  	Execute a shell
  	Continue

  	~ # sed '327 s,|,*|,' -i /usr/bin/grub-installer
  	~ # exit

          (back to the installer, resume normal installation by pressing
  enter.. selection should be at Partition Disks)

  
  The grub-installer should pass correctly.

  
  Note: after the installation finishes, grub2 will not boot the correct drive since it only attemps
  from disks 'disk (0) to disk7' (which is another story/bug).  So, if you want to see the system 
  booting, change the qemu command line from 'disk-{1..27}' to 'disk-{20-27}' (i.e., disk7 is the
  installed disk).

  You should see:

  	Trying to load:  from: disk ... 
  	E3404: Not a bootable device!
  	Trying to load:  from: disk1 ... 
  	E3404: Not a bootable device!
  	Trying to load:  from: disk2 ... 
  	E3404: Not a bootable device!
  	Trying to load:  from: disk3 ... 
  	E3404: Not a bootable device!
  	Trying to load:  from: disk4 ... 
  	E3404: Not a bootable device!
  	Trying to load:  from: disk5 ... 
  	E3404: Not a bootable device!
  	Trying to load:  from: disk6 ... 
  	E3404: Not a bootable device!
  	Trying to load:  from: disk7 ...   Successfully loaded
  	[ ... booting ... ]


  Thanks.

To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+source/grub-installer/+bug/1325606/+subscriptions



More information about the foundations-bugs mailing list