Updated changelog.
[grml2usb.git] / grml2usb
index ded9382..6a21903 100755 (executable)
--- a/grml2usb
+++ b/grml2usb
@@ -17,9 +17,10 @@ from optparse import OptionParser
 from inspect import isroutine, isclass
 import datetime, logging, os, re, subprocess, sys, tempfile, time, os.path
 import fileinput
 from inspect import isroutine, isclass
 import datetime, logging, os, re, subprocess, sys, tempfile, time, os.path
 import fileinput
+import glob
 
 # global variables
 
 # global variables
-PROG_VERSION = "0.9.13"
+PROG_VERSION = "0.9.14"
 MOUNTED = set()  # register mountpoints
 TMPFILES = set() # register tmpfiles
 DATESTAMP = time.mktime(datetime.datetime.now().timetuple()) # unique identifier for syslinux.cfg
 MOUNTED = set()  # register mountpoints
 TMPFILES = set() # register tmpfiles
 DATESTAMP = time.mktime(datetime.datetime.now().timetuple()) # unique identifier for syslinux.cfg
@@ -60,6 +61,8 @@ parser.add_option("--mbr-menu", dest="mbrmenu", action="store_true",
                   help="enable interactive boot menu in MBR")
 parser.add_option("--quiet", dest="quiet", action="store_true",
                   help="do not output anything but just errors on console")
                   help="enable interactive boot menu in MBR")
 parser.add_option("--quiet", dest="quiet", action="store_true",
                   help="do not output anything but just errors on console")
+parser.add_option("--remove-bootoption", dest="removeoption", action="append",
+                  help="regex for removing existing bootoptions")
 parser.add_option("--skip-addons", dest="skipaddons", action="store_true",
                   help="do not install /boot/addons/ files")
 parser.add_option("--skip-grub-config", dest="skipgrubconfig", action="store_true",
 parser.add_option("--skip-addons", dest="skipaddons", action="store_true",
                   help="do not install /boot/addons/ files")
 parser.add_option("--skip-grub-config", dest="skipgrubconfig", action="store_true",
@@ -1145,11 +1148,12 @@ def copy_bootloader_files(iso_mount, target):
                     'isoprompt.cfg', 'options.cfg', \
                     'prompt.cfg', 'vesamenu.c32', 'vesamenu.cfg', 'grml.png':
         path = search_file(filename, iso_mount + '/boot/isolinux/')
                     'isoprompt.cfg', 'options.cfg', \
                     'prompt.cfg', 'vesamenu.c32', 'vesamenu.cfg', 'grml.png':
         path = search_file(filename, iso_mount + '/boot/isolinux/')
-        if not path:
-            print filename
-            continue
         exec_rsync(path, syslinux_target + filename)
 
         exec_rsync(path, syslinux_target + filename)
 
+    # copy the addons_*.cfg file to the new syslinux directory
+    for filename in glob.glob(iso_mount + '/boot/isolinux/' + 'addon_*.cfg'):
+        exec_rsync(filename, syslinux_target)
+
     path = search_file('hidden.cfg', iso_mount + '/boot/isolinux/')
     exec_rsync(path, syslinux_target + "new_" + 'hidden.cfg')
 
     path = search_file('hidden.cfg', iso_mount + '/boot/isolinux/')
     exec_rsync(path, syslinux_target + "new_" + 'hidden.cfg')
 
@@ -1248,6 +1252,23 @@ def identify_grml_flavour(mountpath):
     return grml_flavour
 
 
     return grml_flavour
 
 
+def modify_grub_config(filename):
+    if options.removeoption:
+        regexe = []
+        for regex in options.removeoption:
+            regexe.append(re.compile(r'%s' % regex))
+
+        option_re = re.compile(r'(.*/boot/release/.*linux26.*)')
+
+        for line in fileinput.input(filename, inplace=1):
+            if regexe and option_re.search(line):
+                for regex in regexe:
+                    line = regex.sub(' ', line)
+
+            sys.stdout.write(line)
+
+        fileinput.close()
+
 def handle_grub1_config(grml_flavour, install_partition, grub_target, bootopt):
     """Main handler for generating grub1 configuration
 
 def handle_grub1_config(grml_flavour, install_partition, grub_target, bootopt):
     """Main handler for generating grub1 configuration
 
@@ -1286,6 +1307,8 @@ def handle_grub1_config(grml_flavour, install_partition, grub_target, bootopt):
         grub1_config_file.write(generate_flavour_specific_grub1_config(grml_flavour, install_partition, bootopt))
         grub1_config_file.close()
 
         grub1_config_file.write(generate_flavour_specific_grub1_config(grml_flavour, install_partition, bootopt))
         grub1_config_file.close()
 
+    modify_grub_config(grub1_cfg)
+
     # make sure grub.conf isn't a symlink but a plain file instead,
     # otherwise it will break on FAT16 filesystems
     # this works around grub-install of (at least) Fedora 10
     # make sure grub.conf isn't a symlink but a plain file instead,
     # otherwise it will break on FAT16 filesystems
     # this works around grub-install of (at least) Fedora 10
@@ -1343,6 +1366,8 @@ def handle_grub2_config(grml_flavour, grub_target, bootopt):
         grub2_config_file.write(generate_flavour_specific_grub2_config(grml_flavour, bootopt))
         grub2_config_file.close()
 
         grub2_config_file.write(generate_flavour_specific_grub2_config(grml_flavour, bootopt))
         grub2_config_file.close()
 
+    modify_grub_config(grub2_cfg)
+
 
 def handle_grub_config(grml_flavour, device, target):
     """Main handler for generating grub (v1 and v2) configuration
 
 def handle_grub_config(grml_flavour, device, target):
     """Main handler for generating grub (v1 and v2) configuration
@@ -1418,12 +1443,23 @@ def adjust_syslinux_bootoptions(src, flavour):
     else:
         bootopt = options.bootoptions
 
     else:
         bootopt = options.bootoptions
 
+    regexe = []
+    option_re = None
+    if options.removeoption:
+        option_re = re.compile(r'/boot/release/.*/initrd.gz')
+
+        for regex in options.removeoption:
+            regexe.append(re.compile(r'%s' % regex))
+
     for line in fileinput.input(src, inplace=1):
         line = boot_re.sub(r'/boot/release/%s/\2 ' % flavour.replace('-', ''), line)
         # line = flavour_re.sub(r'\1 %s-\2' % flavour, line)
         line = default_re.sub(r'%s-\1' % flavour, line)
         line = append_re.sub(r'\1 live-media-path=/live/%s/ ' % flavour, line)
         line = append_re.sub(r'\1 boot=live %s ' % bootopt, line)
     for line in fileinput.input(src, inplace=1):
         line = boot_re.sub(r'/boot/release/%s/\2 ' % flavour.replace('-', ''), line)
         # line = flavour_re.sub(r'\1 %s-\2' % flavour, line)
         line = default_re.sub(r'%s-\1' % flavour, line)
         line = append_re.sub(r'\1 live-media-path=/live/%s/ ' % flavour, line)
         line = append_re.sub(r'\1 boot=live %s ' % bootopt, line)
+        if option_re and option_re.search(line):
+            for regex in regexe:
+                line = regex.sub(' ', line)
         sys.stdout.write(line)
     fileinput.close()
 
         sys.stdout.write(line)
     fileinput.close()
 
@@ -1863,6 +1899,7 @@ def main():
     # finally be politely :)
     logging.info("Finished execution of grml2usb (%s). Have fun with your grml system.", PROG_VERSION)
 
     # finally be politely :)
     logging.info("Finished execution of grml2usb (%s). Have fun with your grml system.", PROG_VERSION)
 
+
 if __name__ == "__main__":
     try:
         main()
 if __name__ == "__main__":
     try:
         main()