check_for_fat(): use subprocess.check_output to avoid dependency on Python 3.7
[grml2usb.git] / grml2usb
index 2103bb9..7434901 100755 (executable)
--- a/grml2usb
+++ b/grml2usb
@@ -32,7 +32,22 @@ import uuid
 import shutil
 
 # The line following this line is patched by debian/rules and tarball.sh.
-PROG_VERSION = '***UNRELEASED***'
+PROG_VERSION = '***UNKNOWN***'
+
+# when running from inside git, try to report version information via git-describe
+try:
+    git_dir = os.path.abspath(os.path.dirname(sys.argv[0]))
+    with open(os.devnull, 'w') as devnull:
+        PROG_VERSION = subprocess.check_output(["git",
+                                                "-C",
+                                                git_dir,
+                                                "describe",
+                                                "--always",
+                                                "--dirty"],
+                                                stderr=devnull).strip().decode('utf-8', errors='replace') + \
+                                                " (git)"
+except Exception:
+    pass
 
 # global variables
 MOUNTED = set()   # register mountpoints
@@ -789,9 +804,7 @@ def check_for_fat(partition):
                 " (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, text=True)
-        filesystem = udev_info.communicate()[0].rstrip()
+        filesystem = subprocess.check_output(["/sbin/blkid", "-s", "TYPE", "-o", "value", partition]).decode().rstrip()
 
         if filesystem != "vfat":
             raise CriticalException(
@@ -799,7 +812,7 @@ def check_for_fat(partition):
                     "(Use --fat16 or run mkfs.vfat %s)" % (partition, partition))
 
     except OSError:
-        raise CriticalException("Sorry, /sbin/blkid not available (install e2fsprogs?)")
+        raise CriticalException("Sorry, /sbin/blkid not available (install util-linux?)")
 
 
 def mkdir(directory):
@@ -984,22 +997,6 @@ def copy_grml_files(grml_flavour, iso_mount, target):
         logging.warn("Warning: could not find flavour directory for %s ", grml_flavour)
 
 
-def handle_addon_copy(filename, dst, iso_mount, ignore_errors=False):
-    """handle copy of optional addons
-
-    @filename: filename of the addon
-    @dst: destination directory
-    @iso_mount: location of the iso mount
-    @ignore_errors: don't report missing files
-    """
-    file_location = search_file(filename, iso_mount)
-    if file_location is None:
-        if not ignore_errors:
-            logging.warn("Warning: %s not found (that's fine if you don't need it)", filename)
-    else:
-        exec_rsync(file_location, dst)
-
-
 def copy_addons(iso_mount, target):
     """copy grml's addons files (like allinoneimg, bsd4grml,..) to a given target
 
@@ -1009,33 +1006,11 @@ def copy_addons(iso_mount, target):
     addons = target + '/boot/addons/'
     execute(mkdir, addons)
 
-    # grub all-in-one image
-    handle_addon_copy('allinone.img', addons, iso_mount)
-
-    # bsd image
-    handle_addon_copy('bsd4grml', addons, iso_mount)
-
-    # DOS image
-    handle_addon_copy('balder10.imz', addons, iso_mount)
-
-    # syslinux + pci.ids for hdt
-    for expr in '*.c32', 'pci.ids':
-        glob_and_copy(iso_mount + '/boot/addons/' + expr, addons)
-
-    # memdisk image
-    handle_addon_copy('memdisk', addons, iso_mount)
-
-    # memtest86+ image
-    handle_addon_copy('memtest', addons, iso_mount)
-
-    # gpxe.lkrn: got replaced by ipxe
-    handle_addon_copy('gpxe.lkrn', addons, iso_mount, ignore_errors=True)
-
-    # ipxe.lkrn
-    handle_addon_copy('ipxe.lkrn', addons, iso_mount)
-
-    # netboot.xyz
-    handle_addon_copy('netboot.xyz.lkrn', addons, iso_mount)
+    for addon_file in glob.glob(iso_mount + '/boot/addons/*'):
+        filename = os.path.basename(addon_file)
+        src_file = iso_mount + "/boot/addons/" + os.path.basename(addon_file)
+        logging.debug("Copying addon file %s" % filename)
+        exec_rsync(src_file, addons)
 
 
 def build_loopbackcfg(target):