Update debian/control
[grml2usb.git] / grml2usb
index 42362d6..fd6dc17 100755 (executable)
--- a/grml2usb
+++ b/grml2usb
@@ -12,7 +12,7 @@ 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
@@ -612,20 +612,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, "")
@@ -705,6 +706,10 @@ def install_syslinux_mbr(device):
 
     @device: device where MBR of syslinux should be installed to"""
 
+    # make sure we have syslinux available
+    if not which("syslinux") and not options.copyonly:
+        raise Exception("syslinux not available (either install it or consider dropping the --syslinux option)")
+
     # lilo's mbr is broken, use the one from syslinux instead:
     if not os.path.isfile("/usr/lib/syslinux/mbr.bin"):
         raise Exception("/usr/lib/syslinux/mbr.bin can not be read")
@@ -975,16 +980,16 @@ def copy_system_files(grml_flavour, iso_mount, target):
     else:
         squashfs_target = target + '/live/' + grml_flavour + '/'
         execute(mkdir, squashfs_target)
-        logging.debug("rsync -aHS %s %s" % (squashfs, squashfs_target + grml_flavour + '.squashfs'))
-        proc = subprocess.Popen(["rsync", "-aHS", squashfs, squashfs_target + grml_flavour + ".squashfs"])
+        logging.debug("rsync -rlptDH --inplace %s %s" % (squashfs, squashfs_target + grml_flavour + '.squashfs'))
+        proc = subprocess.Popen(["rsync", "-rlptDH", "--inplace", squashfs, squashfs_target + grml_flavour + ".squashfs"])
         proc.wait()
 
     filesystem_module = search_file('filesystem.module', iso_mount)
     if filesystem_module is None:
         logging.critical("Fatal: filesystem.module not found")
     else:
-        logging.debug("rsync -aHS %s %s" % (filesystem_module, squashfs_target + 'filesystem.module'))
-        proc = subprocess.Popen(["rsync", "-aHS", filesystem_module, squashfs_target + 'filesystem.module'])
+        logging.debug("rsync -rlptDH --inplace %s %s" % (filesystem_module, squashfs_target + 'filesystem.module'))
+        proc = subprocess.Popen(["rsync", "-rlptDH", "--inplace", filesystem_module, squashfs_target + 'filesystem.module'])
         proc.wait()
 
     release_target = target + '/boot/release/' + grml_flavour
@@ -994,16 +999,16 @@ def copy_system_files(grml_flavour, iso_mount, target):
     if kernel is None:
         logging.critical("Fatal kernel not found")
     else:
-        logging.debug("rsync -aHS %s %s" % (kernel, release_target + '/linux26'))
-        proc = subprocess.Popen(["rsync", "-aHS", kernel, release_target + '/linux26'])
+        logging.debug("rsync -rlptDH --inplace %s %s" % (kernel, release_target + '/linux26'))
+        proc = subprocess.Popen(["rsync", "-rlptDH", "--inplace", kernel, release_target + '/linux26'])
         proc.wait()
 
     initrd = search_file('initrd.gz', iso_mount)
     if initrd is None:
         logging.critical("Fatal: initrd not found")
     else:
-        logging.debug("rsync -aHS %s %s" % (initrd, release_target + '/initrd.gz'))
-        proc = subprocess.Popen(["rsync", "-aHS", initrd, release_target + '/initrd.gz'])
+        logging.debug("rsync -rlptDH --inplace %s %s" % (initrd, release_target + '/initrd.gz'))
+        proc = subprocess.Popen(["rsync", "-rlptDH", "--inplace", initrd, release_target + '/initrd.gz'])
         proc.wait()
 
 
@@ -1021,8 +1026,8 @@ def copy_grml_files(iso_mount, target):
         if grml_file is None:
             logging.warn("Warning: myfile %s could not be found - can not install it", myfile)
         else:
-            logging.debug("rsync -aHS %s %s" % (grml_file, grml_target + grml_file))
-            proc = subprocess.Popen(["rsync", "-aHS", grml_file, grml_target + myfile])
+            logging.debug("rsync -rlptDH --inplace %s %s" % (grml_file, grml_target + grml_file))
+            proc = subprocess.Popen(["rsync", "-rlptDH", "--inplace", grml_file, grml_target + myfile])
             proc.wait()
 
     grml_web_target = grml_target + '/web/'
@@ -1033,8 +1038,8 @@ def copy_grml_files(iso_mount, target):
         if grml_file is None:
             logging.warn("Warning: myfile %s could not be found - can not install it")
         else:
-            logging.debug("rsync -aHS %s %s" % (grml_file, grml_web_target + grml_file))
-            proc = subprocess.Popen(["rsync", "-aHS", grml_file, grml_web_target + myfile])
+            logging.debug("rsync -rlptDH --inplace %s %s" % (grml_file, grml_web_target + grml_file))
+            proc = subprocess.Popen(["rsync", "-rlptDH", "--inplace", grml_file, grml_web_target + myfile])
             proc.wait()
 
     grml_webimg_target = grml_web_target + '/images/'
@@ -1045,8 +1050,8 @@ def copy_grml_files(iso_mount, target):
         if grml_file is None:
             logging.warn("Warning: myfile %s could not be found - can not install it")
         else:
-            logging.debug("rsync -aHS %s %s" % (grml_file, grml_webimg_target + grml_file))
-            proc = subprocess.Popen(["rsync", "-aHS", grml_file, grml_webimg_target + myfile])
+            logging.debug("rsync -rlptDH --inplace %s %s" % (grml_file, grml_webimg_target + grml_file))
+            proc = subprocess.Popen(["rsync", "-rlptDH", "--inplace", grml_file, grml_webimg_target + myfile])
             proc.wait()
 
 
@@ -1064,8 +1069,8 @@ def copy_addons(iso_mount, target):
     if allinoneimg is None:
         logging.warn("Warning: allinone.img not found (that's fine if you don't need it)")
     else:
-        logging.debug("rsync -aHS %s %s" % (allinoneimg, addons + '/allinone.img'))
-        proc = subprocess.Popen(["rsync", "-aHS", allinoneimg, addons + 'allinone.img'])
+        logging.debug("rsync -rlptDH --inplace %s %s" % (allinoneimg, addons + '/allinone.img'))
+        proc = subprocess.Popen(["rsync", "-rlptDH", "--inplace", allinoneimg, addons + 'allinone.img'])
         proc.wait()
 
     # bsd imag
@@ -1073,8 +1078,8 @@ def copy_addons(iso_mount, target):
     if bsdimg is None:
         logging.warn("Warning: bsd4grml not found (that's fine if you don't need it)")
     else:
-        logging.debug("rsync -aHS %s %s" % (bsdimg, addons + '/'))
-        proc = subprocess.Popen(["rsync", "-aHS", bsdimg, addons + '/'])
+        logging.debug("rsync -rlptDH --inplace %s %s" % (bsdimg, addons + '/'))
+        proc = subprocess.Popen(["rsync", "-rlptDH", "--inplace", bsdimg, addons + '/'])
         proc.wait()
 
     # freedos image
@@ -1082,8 +1087,8 @@ def copy_addons(iso_mount, target):
     if balderimg is None:
         logging.warn("Warning: balder10.imz not found (that's fine if you don't need it)")
     else:
-        logging.debug("rsync -aHS %s %s" % (balderimg, addons + '/balder10.imz'))
-        proc = subprocess.Popen(["rsync", "-aHS", balderimg, addons + 'balder10.imz'])
+        logging.debug("rsync -rlptDH --inplace %s %s" % (balderimg, addons + '/balder10.imz'))
+        proc = subprocess.Popen(["rsync", "-rlptDH", "--inplace", balderimg, addons + 'balder10.imz'])
         proc.wait()
 
     # install hdt and pci.ids only when using syslinux (grub doesn't support it)
@@ -1091,15 +1096,15 @@ def copy_addons(iso_mount, target):
         # hdt (hardware detection tool) image
         hdtimg = search_file('hdt.c32', iso_mount)
         if hdtimg:
-            logging.debug("rsync -aHS %s %s" % (hdtimg, addons + '/hdt.c32'))
-            proc = subprocess.Popen(["rsync", "-aHS", hdtimg, addons + '/hdt.c32'])
+            logging.debug("rsync -rlptDH --inplace %s %s" % (hdtimg, addons + '/hdt.c32'))
+            proc = subprocess.Popen(["rsync", "-rlptDH", "--inplace", hdtimg, addons + '/hdt.c32'])
             proc.wait()
 
         # pci.ids file
         picids = search_file('pci.ids', iso_mount)
         if picids:
-            logging.debug("rsync -aHS %s %s" % (picids, addons + '/pci.ids'))
-            proc = subprocess.Popen(["rsync", "-aHS", picids, addons + '/pci.ids'])
+            logging.debug("rsync -rlptDH --inplace %s %s" % (picids, addons + '/pci.ids'))
+            proc = subprocess.Popen(["rsync", "-rlptDH", "--inplace", picids, addons + '/pci.ids'])
             proc.wait()
 
     # memdisk image
@@ -1107,8 +1112,8 @@ def copy_addons(iso_mount, target):
     if memdiskimg is None:
         logging.warn("Warning: memdisk not found (that's fine if you don't need it)")
     else:
-        logging.debug("rsync -aHS %s %s" % (memdiskimg, addons + '/memdisk'))
-        proc = subprocess.Popen(["rsync", "-aHS", memdiskimg, addons + 'memdisk'])
+        logging.debug("rsync -rlptDH --inplace %s %s" % (memdiskimg, addons + '/memdisk'))
+        proc = subprocess.Popen(["rsync", "-rlptDH", "--inplace", memdiskimg, addons + 'memdisk'])
         proc.wait()
 
     # memtest86+ image
@@ -1116,8 +1121,8 @@ def copy_addons(iso_mount, target):
     if memtestimg is None:
         logging.warn("Warning: memtest not found (that's fine if you don't need it)")
     else:
-        logging.debug("rsync -aHS %s %s" % (memtestimg, addons + '/memtest'))
-        proc = subprocess.Popen(["rsync", "-aHS", memtestimg, addons + 'memtest'])
+        logging.debug("rsync -rlptDH --inplace %s %s" % (memtestimg, addons + '/memtest'))
+        proc = subprocess.Popen(["rsync", "-rlptDH", "--inplace", memtestimg, addons + 'memtest'])
         proc.wait()
 
 
@@ -1131,14 +1136,14 @@ def copy_bootloader_files(iso_mount, target):
     execute(mkdir, syslinux_target)
 
     logo = search_file('logo.16', iso_mount)
-    logging.debug("rsync -aHS %s %s" % (logo, syslinux_target + 'logo.16'))
-    proc = subprocess.Popen(["rsync", "-aHS", logo, syslinux_target + 'logo.16'])
+    logging.debug("rsync -rlptDH --inplace %s %s" % (logo, syslinux_target + 'logo.16'))
+    proc = subprocess.Popen(["rsync", "-rlptDH", "--inplace", logo, syslinux_target + 'logo.16'])
     proc.wait()
 
     for ffile in 'f2', 'f3', 'f4', 'f5', 'f6', 'f7', 'f8', 'f9', 'f10':
         bootsplash = search_file(ffile, iso_mount)
-        logging.debug("rsync -aHS %s %s" % (bootsplash, syslinux_target + ffile))
-        proc = subprocess.Popen(["rsync", "-aHS", bootsplash, syslinux_target + ffile])
+        logging.debug("rsync -rlptDH --inplace %s %s" % (bootsplash, syslinux_target + ffile))
+        proc = subprocess.Popen(["rsync", "-rlptDH", "--inplace", bootsplash, syslinux_target + ffile])
         proc.wait()
 
     grub_target = target + '/boot/grub/'
@@ -1149,22 +1154,22 @@ def copy_bootloader_files(iso_mount, target):
         logging.critical("Please make sure you've the grml2usb Debian package installed!")
         raise
     else:
-        logging.debug("rsync -aHS /usr/share/grml2usb/grub/splash.xpm.gz %s" % grub_target + 'splash.xpm.gz')
-        proc = subprocess.Popen(["rsync", "-aHS", '/usr/share/grml2usb/grub/splash.xpm.gz',
+        logging.debug("rsync -rlptDH --inplace /usr/share/grml2usb/grub/splash.xpm.gz %s" % grub_target + 'splash.xpm.gz')
+        proc = subprocess.Popen(["rsync", "-rlptDH", "--inplace", '/usr/share/grml2usb/grub/splash.xpm.gz',
                                 grub_target + 'splash.xpm.gz'])
         proc.wait()
 
     # grml splash in grub
     if os.path.isfile("/usr/share/grml2usb/grub/grml.png"):
-        logging.debug("rsync -aHS /usr/share/grml2usb/grub/grml.png to %s" % grub_target + 'grml.png')
-        proc = subprocess.Popen(["rsync", "-aHS", '/usr/share/grml2usb/grub/grml.png',
+        logging.debug("rsync -rlptDH --inplace /usr/share/grml2usb/grub/grml.png to %s" % grub_target + 'grml.png')
+        proc = subprocess.Popen(["rsync", "-rlptDH", "--inplace", '/usr/share/grml2usb/grub/grml.png',
                                 grub_target + 'grml.png'])
         proc.wait()
 
     # font file for graphical bootsplash in grub
     if os.path.isfile("/usr/share/grub/ascii.pff"):
-        logging.debug("rsync -aHS /usr/share/grub/ascii.pff to %s" % grub_target + 'ascii.pff')
-        proc = subprocess.Popen(["rsync", "-aHS", '/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'])
         proc.wait()
 
@@ -1475,12 +1480,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:
@@ -1533,12 +1539,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, "")
@@ -1564,12 +1571,6 @@ def handle_mbr(device):
         logging.info("Would install MBR")
         return 0
 
-    # make sure we have syslinux available
-    if not which("syslinux") and not options.copyonly:
-        logging.critical('Sorry, syslinux not available. Exiting.')
-        logging.critical('Please install syslinux or consider using the --grub option.')
-        sys.exit(1)
-
     if device[-1:].isdigit():
         mbr_device = re.match(r'(.*?)\d*$', device).group(1)
         partition_number = int(device[-1:]) - 1
@@ -1630,7 +1631,7 @@ def handle_vfat(device):
             logging.critical("Execution failed: %s", error)
             sys.exit(1)
 
-    if not check_for_usbdevice(device) and not os.path.isdir(device):
+    if not os.path.isdir(device) and not check_for_usbdevice(device):
         print "Warning: the specified device %s does not look like a removable usb device." % device
         f = raw_input("Do you really want to continue? y/N ")
         if f == "y" or f == "Y":