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
 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:
         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)
                 cleanup()
                 sys.exit(1)
-        except CriticalException, error:
-            logging.critical("Fatal: %s" % error)
-            cleanup()
-            sys.exit(1)
 
         finally:
             unmount(device_mountpoint, "")
 
         finally:
             unmount(device_mountpoint, "")
@@ -705,6 +706,10 @@ def install_syslinux_mbr(device):
 
     @device: device where MBR of syslinux should be installed to"""
 
 
     @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")
     # 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)
     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:
         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
         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:
     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:
         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()
 
 
         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:
         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/'
             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:
         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/'
             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:
         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()
 
 
             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:
     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
         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:
     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
         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:
     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)
         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:
         # 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:
             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
             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:
     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
         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:
     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()
 
 
         proc.wait()
 
 
@@ -1131,14 +1136,14 @@ def copy_bootloader_files(iso_mount, target):
     execute(mkdir, syslinux_target)
 
     logo = search_file('logo.16', iso_mount)
     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)
     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/'
         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.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"):
                                 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"):
                                 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()
 
                                 grub_target + 'ascii.pff'])
         proc.wait()
 
@@ -1475,12 +1480,13 @@ def handle_dir(live_image, device):
             sys.exit(1)
 
     try:
             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:
     finally:
         if remove_device_mountpoint:
             try:
@@ -1533,12 +1539,13 @@ def handle_iso(iso, device):
             sys.exit(1)
 
     try:
             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, "")
     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
 
         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
     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)
 
             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":
         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":