Fix user feedback about default flavour and installed flavours.
[grml2usb.git] / grml2usb
index 8560f34..9cca9d7 100755 (executable)
--- a/grml2usb
+++ b/grml2usb
@@ -22,7 +22,7 @@ import uuid
 import struct
 
 # global variables
-PROG_VERSION = "0.9.26"
+PROG_VERSION = "0.9.27~git"
 MOUNTED = set()  # register mountpoints
 TMPFILES = set() # register tmpfiles
 DATESTAMP = time.mktime(datetime.datetime.now().timetuple()) # unique identifier for syslinux.cfg
@@ -34,7 +34,7 @@ def syslinux_warning(option, opt, value, opt_parser):
     """A helper function for printing a warning about deprecated option
     """
     # pylint: disable-msg=W0613
-    sys.stderr.write("Note: the --syslinux option is deprecated as syslinux " +
+    sys.stderr.write("Note: the --syslinux option is deprecated as syslinux "
                      "is grml2usb's default. Continuing anyway.\n")
     setattr(opt_parser.values, option.dest, True)
 
@@ -649,7 +649,7 @@ def install_grub(device):
                     grub_device = device
 
                 logging.info("Installing grub as bootloader")
-                logging.debug("grub-install --recheck --no-floppy --root-directory=%s %s",
+                logging.debug("grub-install --recheck --force --no-floppy --root-directory=%s %s",
                               device_mountpoint, grub_device)
                 proc = subprocess.Popen(["grub-install", "--recheck", "--force", "--no-floppy",
                                          "--root-directory=%s" % device_mountpoint, grub_device],
@@ -974,19 +974,19 @@ def check_for_fat(partition):
 
     @partition: device name of partition"""
 
+    if not os.access(partition, os.R_OK):
+        raise CriticalException("Failed to read device %s"
+                " (wrong UID/permissions or device/directory not present?)" % partition)
+
     try:
         udev_info = subprocess.Popen(["/sbin/blkid", "-s", "TYPE", "-o", "value", partition],
                                      stdout=subprocess.PIPE, stderr=subprocess.PIPE)
         filesystem = udev_info.communicate()[0].rstrip()
 
-        if udev_info.returncode == 2:
-            raise CriticalException("Failed to read device %s"
-                                    " (wrong UID/permissions or device/directory not present?)" % partition)
-
         if filesystem != "vfat":
             raise CriticalException(
-                    "Partition %s does not contain a FAT16 filesystem." % (partition) \
-                    + "(Use --fat16 or run mkfs.vfat %s)" % (partition))
+                    "Partition %s does not contain a FAT16 filesystem. "
+                    "(Use --fat16 or run mkfs.vfat %s)" % (partition, partition))
 
     except OSError:
         raise CriticalException("Sorry, /sbin/blkid not available (install e2fsprogs?)")
@@ -1263,11 +1263,13 @@ def copy_if_exist(filename, dst):
     if filename and (os.path.isfile(filename) or os.path.isdir(filename)):
         exec_rsync(filename, dst)
 
-def copy_bootloader_files(iso_mount, target):
+def copy_bootloader_files(iso_mount, target, grml_flavour):
     """Copy grml's bootloader files to a given target
 
     @iso_mount: path where a grml ISO is mounted on
-    @target: path where grml's main files should be copied to"""
+    @target: path where grml's main files should be copied to
+    @grml_flavour: name of the current processed grml_flavour
+    """
 
     syslinux_target = target + '/boot/syslinux/'
     execute(mkdir, syslinux_target)
@@ -1295,8 +1297,8 @@ def copy_bootloader_files(iso_mount, target):
     if os.path.isfile(syslinux_target + 'ldlinux.sys'):
         os.unlink(syslinux_target + 'ldlinux.sys')
 
-    (source_dir, name) = get_defaults_file(iso_mount, GRML_DEFAULT, "default.cfg")
-    (source_dir, defaults_file) = get_defaults_file(iso_mount, GRML_DEFAULT, "grml.cfg")
+    (source_dir, name) = get_defaults_file(iso_mount, grml_flavour, "default.cfg")
+    (source_dir, defaults_file) = get_defaults_file(iso_mount, grml_flavour, "grml.cfg")
 
     if not source_dir:
         logging.critical("Fatal: file default.cfg could not be found.")
@@ -1348,7 +1350,7 @@ def install_iso_files(grml_flavour, iso_mount, device, target):
     @target: path where grml's main files should be copied to"""
 
     global GRML_DEFAULT
-    GRML_DEFAULT = grml_flavour
+    GRML_DEFAULT = GRML_DEFAULT or grml_flavour
     if options.dryrun:
         return 0
     elif not options.bootloaderonly:
@@ -1367,7 +1369,7 @@ def install_iso_files(grml_flavour, iso_mount, device, target):
             copy_addons(iso_mount, target)
 
     if not options.copyonly:
-        copy_bootloader_files(iso_mount, target)
+        copy_bootloader_files(iso_mount, target, grml_flavour)
 
         if not options.dryrun:
             handle_bootloader_config(grml_flavour, device, target)
@@ -1866,11 +1868,13 @@ def install_grml(mountpoint, device):
             except CriticalException, error:
                 logging.critical("Fatal: %s", error)
                 raise
+    global GRML_FLAVOURS
     try:
         grml_flavours = identify_grml_flavour(mountpoint)
         for flavour in set(grml_flavours):
             logging.info("Identified grml flavour \"%s\".", flavour)
             install_iso_files(flavour, mountpoint, device, device_mountpoint)
+            GRML_FLAVOURS.add(flavour)
     finally:
         if remove_device_mountpoint:
             remove_mountpoint(device_mountpoint)