Load memtest86+ binary via 'linux16' in grub2 (otherwise it fails)
[grml2usb.git] / grml2usb
index fd03ef9..92367b8 100755 (executable)
--- a/grml2usb
+++ b/grml2usb
@@ -12,13 +12,13 @@ This script installs a grml system (either a running system or ISO[s]) to a USB
 
 """
 
-from __future__ import with_statement
+from __future__ import with_statement
 from optparse import OptionParser
 from inspect import isroutine, isclass
 import datetime, logging, os, re, subprocess, sys, tempfile, time
 
 # global variables
-PROG_VERSION = "0.9.8"
+PROG_VERSION = "0.9.9"
 MOUNTED = set()  # register mountpoints
 TMPFILES = set() # register tmpfiles
 DATESTAMP = time.mktime(datetime.datetime.now().timetuple()) # unique identifier for syslinux.cfg
@@ -245,16 +245,20 @@ def generate_main_grub2_config(grml_flavour, bootoptions):
     return("""\
 ## main grub2 configuration - generated by grml2usb [main config generated at: %(local_datestamp)s]
 set default=0
-set timeout=5
+set timeout=10
 
 insmod fat
 
-if font /boot/grub/ascii.pff ; then
+if loadfont /boot/grub/ascii.pf2 ; then
    insmod png
    set gfxmode=640x480
    insmod gfxterm
    insmod vbe
-   terminal gfxterm
+   if terminal_output.gfxterm ; then true ; else
+    # For backward compatibility with versions of terminal.mod that don't
+    # understand terminal_output
+    terminal gfxterm
+   fi
 fi
 
 if background_image /boot/grub/grml.png ; then
@@ -266,12 +270,13 @@ else
 fi
 
 menuentry "%(grml_flavour)s (default)" {
-    linux   /boot/release/%(grml_flavour)s/linux26 apm=power-off vga=791 quiet boot=live nomce live-media-path=/live/%(grml_flavour)s/ %(bootoptions)s
+    set gfxpayload=1024x768x16,1024x768
+    linux   /boot/release/%(grml_flavour)s/linux26 apm=power-off quiet boot=live nomce live-media-path=/live/%(grml_flavour)s/ %(bootoptions)s
     initrd  /boot/release/%(grml_flavour)s/initrd.gz
 }
 
 menuentry "Memory test (memtest86+)" {
-    linux   /boot/addons/memtest
+    linux16   /boot/addons/memtest
 }
 
 menuentry "Grub - all in one image" {
@@ -308,31 +313,36 @@ def generate_flavour_specific_grub2_config(grml_flavour, bootoptions):
     return("""\
 ## flavour specific configuration for %(grml_flavour)s [grml2usb for %(grml_flavour)s: %(local_datestamp)s]
 menuentry "%(grml_flavour)s" {
-    linux  /boot/release/%(grml_flavour)s/linux26 apm=power-off boot=live nomce vga=791 quiet live-media-path=/live/%(grml_flavour)s/ %(bootoptions)s
+    set gfxpayload=1024x768x16,1024x768
+    linux  /boot/release/%(grml_flavour)s/linux26 apm=power-off boot=live nomce quiet live-media-path=/live/%(grml_flavour)s/ %(bootoptions)s
     initrd /boot/release/%(grml_flavour)s/initrd.gz
 }
 
 ## flavour specific configuration for %(grml_flavour)s [grml2usb for %(grml_flavour)s: %(local_datestamp)s]
 menuentry "%(grml_flavour)s-persistent" {
-    linux  /boot/release/%(grml_flavour)s/linux26 apm=power-off boot=live nomce vga=791 quiet persistent live-media-path=/live/%(grml_flavour)s/ %(bootoptions)s
+    set gfxpayload=1024x768x16,1024x768
+    linux  /boot/release/%(grml_flavour)s/linux26 apm=power-off boot=live nomce quiet persistent live-media-path=/live/%(grml_flavour)s/ %(bootoptions)s
     initrd /boot/release/%(grml_flavour)s/initrd.gz
 }
 
 ## flavour specific configuration for %(grml_flavour)s [grml2usb for %(grml_flavour)s: %(local_datestamp)s]
 menuentry "%(grml_flavour)s2ram" {
-    linux  /boot/release/%(grml_flavour)s/linux26 apm=power-off boot=live nomce vga=791 quiet live-media-path=/live/%(grml_flavour)s/ toram=%(grml_flavour)s.squashfs %(bootoptions)s
+    set gfxpayload=1024x768x16,1024x768
+    linux  /boot/release/%(grml_flavour)s/linux26 apm=power-off boot=live nomce quiet live-media-path=/live/%(grml_flavour)s/ toram=%(grml_flavour)s.squashfs %(bootoptions)s
     initrd /boot/release/%(grml_flavour)s/initrd.gz
 }
 
 ## flavour specific configuration for %(grml_flavour)s [grml2usb for %(grml_flavour)s: %(local_datestamp)s]
 menuentry "%(grml_flavour)s-debug" {
-    linux /boot/release/%(grml_flavour)s/linux26 apm=power-off boot=live nomce vga=791 quiet live-media-path=/live/%(grml_flavour)s/ debug boot=live initcall_debug%(bootoptions)s
+    set gfxpayload=1024x768x16,1024x768
+    linux /boot/release/%(grml_flavour)s/linux26 apm=power-off boot=live nomce quiet live-media-path=/live/%(grml_flavour)s/ debug boot=live initcall_debug%(bootoptions)s
     initrd /boot/release/%(grml_flavour)s/initrd.gz
 }
 
 ## flavour specific configuration for %(grml_flavour)s [grml2usb for %(grml_flavour)s: %(local_datestamp)s]
 menuentry "%(grml_flavour)s-x" {
-    linux  /boot/release/%(grml_flavour)s/linux26 apm=power-off boot=live nomce vga=791 quiet live-media-path=/live/%(grml_flavour)s/ startx=wm-ng %(bootoptions)s
+    set gfxpayload=1024x768x16,1024x768
+    linux  /boot/release/%(grml_flavour)s/linux26 apm=power-off boot=live nomce quiet live-media-path=/live/%(grml_flavour)s/ startx=wm-ng %(bootoptions)s
     initrd /boot/release/%(grml_flavour)s/initrd.gz
 }
 
@@ -350,7 +360,8 @@ menuentry "%(grml_flavour)s-failsafe" {
 
 ## flavour specific configuration for %(grml_flavour)s [grml2usb for %(grml_flavour)s: %(local_datestamp)s]
 menuentry "%(grml_flavour)s-forensic" {
-    linux /boot/release/%(grml_flavour)s/linux26 apm=power-off boot=live nomce vga=791 quiet live-media-path=/live/%(grml_flavour)s/ nofstab noraid nolvm noautoconfig noswap raid=noautodetect forensic readonly %(bootoptions)s
+    set gfxpayload=1024x768x16,1024x768
+    linux /boot/release/%(grml_flavour)s/linux26 apm=power-off boot=live nomce quiet live-media-path=/live/%(grml_flavour)s/ nofstab noraid nolvm noautoconfig noswap raid=noautodetect forensic readonly %(bootoptions)s
     initrd /boot/release/%(grml_flavour)s/initrd.gz
 }
 
@@ -612,20 +623,21 @@ def install_grub(device):
         device_mountpoint = tempfile.mkdtemp(prefix="grml2usb")
         register_tmpfile(device_mountpoint)
         try:
-            mount(device, device_mountpoint, "")
-            logging.debug("grub-install --recheck --no-floppy --root-directory=%s %s", device_mountpoint, device)
-            proc = subprocess.Popen(["grub-install", "--recheck", "--no-floppy",
-                "--root-directory=%s" % device_mountpoint, device], stdout=file(os.devnull, "r+"))
-            proc.wait()
-            if proc.returncode != 0:
-                # raise Exception("error executing grub-install")
-                logging.critical("Fatal: error executing grub-install (please check the grml2usb FAQ)")
+            try:
+                mount(device, device_mountpoint, "")
+                logging.debug("grub-install --recheck --no-floppy --root-directory=%s %s", device_mountpoint, device)
+                proc = subprocess.Popen(["grub-install", "--recheck", "--no-floppy",
+                    "--root-directory=%s" % device_mountpoint, device], stdout=file(os.devnull, "r+"))
+                proc.wait()
+                if proc.returncode != 0:
+                    # raise Exception("error executing grub-install")
+                    logging.critical("Fatal: error executing grub-install (please check the grml2usb FAQ)")
+                    cleanup()
+                    sys.exit(1)
+            except CriticalException, error:
+                logging.critical("Fatal: %s" % error)
                 cleanup()
                 sys.exit(1)
-        except CriticalException, error:
-            logging.critical("Fatal: %s" % error)
-            cleanup()
-            sys.exit(1)
 
         finally:
             unmount(device_mountpoint, "")
@@ -1166,10 +1178,10 @@ def copy_bootloader_files(iso_mount, target):
         proc.wait()
 
     # font file for graphical bootsplash in grub
-    if os.path.isfile("/usr/share/grub/ascii.pff"):
-        logging.debug("rsync -rlptDH --inplace /usr/share/grub/ascii.pff to %s" % grub_target + 'ascii.pff')
-        proc = subprocess.Popen(["rsync", "-rlptDH", "--inplace", '/usr/share/grub/ascii.pff',
-                                grub_target + 'ascii.pff'])
+    if os.path.isfile("/usr/share/grub/ascii.pf2"):
+        logging.debug("rsync -rlptDH --inplace /usr/share/grub/ascii.pf2 to %s" % grub_target + 'ascii.pf2')
+        proc = subprocess.Popen(["rsync", "-rlptDH", "--inplace", '/usr/share/grub/ascii.pf2',
+                                grub_target + 'ascii.pf2'])
         proc.wait()
 
 
@@ -1479,12 +1491,13 @@ def handle_dir(live_image, device):
             sys.exit(1)
 
     try:
-        grml_flavour = identify_grml_flavour(live_image)
-        logging.info("Identified grml flavour \"%s\"." % grml_flavour)
-        install_iso_files(grml_flavour, live_image, device, device_mountpoint)
-    except TypeError:
-        logging.critical("Fatal: a critical error happend during execution (not a grml ISO?), giving up")
-        sys.exit(1)
+        try:
+            grml_flavour = identify_grml_flavour(live_image)
+            logging.info("Identified grml flavour \"%s\"." % grml_flavour)
+            install_iso_files(grml_flavour, live_image, device, device_mountpoint)
+        except TypeError:
+            logging.critical("Fatal: a critical error happend during execution (not a grml ISO?), giving up")
+            sys.exit(1)
     finally:
         if remove_device_mountpoint:
             try:
@@ -1537,12 +1550,13 @@ def handle_iso(iso, device):
             sys.exit(1)
 
     try:
-        grml_flavour = identify_grml_flavour(iso_mountpoint)
-        logging.info("Identified grml flavour \"%s\"." % grml_flavour)
-        install_iso_files(grml_flavour, iso_mountpoint, device, device_mountpoint)
-    except TypeError:
-        logging.critical("Fatal: a critical error happend during execution (not a grml ISO?), giving up")
-        sys.exit(1)
+        try:
+            grml_flavour = identify_grml_flavour(iso_mountpoint)
+            logging.info("Identified grml flavour \"%s\"." % grml_flavour)
+            install_iso_files(grml_flavour, iso_mountpoint, device, device_mountpoint)
+        except TypeError:
+            logging.critical("Fatal: a critical error happend during execution (not a grml ISO?), giving up")
+            sys.exit(1)
     finally:
         if os.path.isdir(iso_mountpoint) and remove_iso_mountpoint:
             unmount(iso_mountpoint, "")