X-Git-Url: http://git.grml.org/?p=grml2usb.git;a=blobdiff_plain;f=grml2usb;h=759197082d1bfe39873071e3d7e03a42fc639239;hp=6455aacecb87b8983b557ac4508990bc22d93125;hb=9d12b0aeec9ef9010ae373e00db1f07ee089b4ae;hpb=85933b53da2988f8fe263062fe4dbbfd83a211ff diff --git a/grml2usb b/grml2usb index 6455aac..7591970 100755 --- a/grml2usb +++ b/grml2usb @@ -20,7 +20,7 @@ import fileinput import glob # global variables -PROG_VERSION = "0.9.15" +PROG_VERSION = "0.9.19-pre1" MOUNTED = set() # register mountpoints TMPFILES = set() # register tmpfiles DATESTAMP = time.mktime(datetime.datetime.now().timetuple()) # unique identifier for syslinux.cfg @@ -32,6 +32,11 @@ def syslinux_warning(option, opt, value, parser): "is grml2usb's default. Continuing anyway.\n") setattr(parser.values, option.dest, True) +# if grub option is set, unset syslinux option +def grub_option(option, opt, value, parser): + setattr(parser.values, option.dest, True) + setattr(parser.values, 'syslinux', False) + # cmdline parsing USAGE = "Usage: %prog [options] <[ISO[s] | /live/image]> \n\ \n\ @@ -56,7 +61,8 @@ parser.add_option("--fat16", dest="fat16", action="store_true", help="format specified partition with FAT16") parser.add_option("--force", dest="force", action="store_true", help="force any actions requiring manual interaction") -parser.add_option("--grub", dest="grub", action="store_true", +parser.add_option("--grub", dest="grub", action="callback", + callback=grub_option, help="install grub bootloader instead of (default) syslinux") parser.add_option("--grub-mbr", dest="grubmbr", action="store_true", help="install grub into MBR instead of (default) PBR") @@ -945,7 +951,7 @@ def check_for_fat(partition): raise CriticalException("Failed to read device %s" " (wrong UID/permissions or device/directory not present?)" % partition) - if options.syslinux and filesystem != "vfat": + if filesystem != "vfat": raise CriticalException("Partition %s does not contain a FAT16 filesystem. (Use --fat16 or run mkfs.vfat %s)" % (partition, partition)) except OSError: @@ -1196,6 +1202,15 @@ def copy_bootloader_files(iso_mount, target): if os.path.isfile("/usr/share/grub/ascii.pf2"): exec_rsync('/usr/share/grub/ascii.pf2', grub_target + 'ascii.pf2') + # always copy grub content as it might be useful + for file in glob.glob(iso_mount + '/boot/grub/*.mod'): + exec_rsync(file, grub_target) + + for file in glob.glob(iso_mount + '/boot/grub/*.img'): + exec_rsync(file, grub_target) + + for file in glob.glob(iso_mount + '/boot/grub/stage*'): + exec_rsync(file, grub_target) def install_iso_files(grml_flavour, iso_mount, device, target): """Copy files from ISO to given target @@ -1211,6 +1226,8 @@ def install_iso_files(grml_flavour, iso_mount, device, target): # * catch "install: .. No space left on device" & CO if options.dryrun: + global GRML_DEFAULT + GRML_DEFAULT = grml_flavour return 0 elif not options.bootloaderonly: logging.info("Copying files. This might take a while....") @@ -1483,10 +1500,10 @@ def adjust_syslinux_bootoptions(src, flavour): sys.stdout.write(line) fileinput.close() -def adjust_labels(src, flavour): +def adjust_labels(src, replacement): label_re = re.compile("^(\s*label\s*) ([a-zA-Z0-9_-]+)", re.I) for line in fileinput.input(src, inplace=1): - line = label_re.sub(r'\1 %s-\2' % flavour, line) + line = label_re.sub(replacement, line) sys.stdout.write(line) fileinput.close() @@ -1567,8 +1584,8 @@ def handle_syslinux_config(grml_flavour, target): new_hidden = "%s_hidden.cfg" % (flavour_filename) new_hidden_file = "%s/%s" % (syslinux_target, new_hidden) os.rename(filename, new_hidden_file) - adjust_labels(new_hidden_file, flavour_filename) - adjust_syslinux_bootoptions(new_hidden_file, flavour_filename) + adjust_labels(new_hidden_file, r'\1 %s-\2' % grml_flavour) + adjust_syslinux_bootoptions(new_hidden_file, grml_flavour) entry = 'include %s\n' % new_hidden add_entry_if_not_present("%s/hiddens.cfg" % syslinux_target, entry) @@ -1579,7 +1596,16 @@ def handle_syslinux_config(grml_flavour, target): defaults_file = '%s/defaults.cfg' % syslinux_target if os.path.isfile(defaults_file): - remove_default_entry('%s/%s_default.cfg' % (syslinux_target, flavour_filename)) + new_default_with_path = "%s/%s" % (syslinux_target, new_default) + new_grml_cfg = "%s/%s_grml.cfg" % ( syslinux_target, flavour_filename) + + # remove default menu entry in menu + remove_default_entry(new_default_with_path) + + # adjust all labels for additional isos + adjust_labels(new_default_with_path, r'\1 %s' % grml_flavour) + adjust_labels(new_grml_cfg, r'\1 %s-\2' % grml_flavour) + add_entry_if_not_present("%s/defaults.cfg" % syslinux_target, entry) @@ -1688,11 +1714,15 @@ def handle_iso(iso, device): register_tmpfile(device_mountpoint) remove_device_mountpoint = True try: - mount(device, device_mountpoint, "") + check_for_fat(device) + mount(device, device_mountpoint, ['-o', 'utf8,iocharset=iso8859-1']) except CriticalException, error: - logging.critical("Fatal: %s", error) - cleanup() - sys.exit(1) + try: + mount(device, device_mountpoint, "") + except CriticalException, error: + logging.critical("Fatal: %s", error) + cleanup() + sys.exit(1) try: try: @@ -1790,7 +1820,7 @@ def handle_vfat(device): # check for vfat filesystem if device is not None and not os.path.isdir(device): try: - check_for_fat(device) + if options.syslinux: check_for_fat(device) except CriticalException, error: logging.critical("Execution failed: %s", error) sys.exit(1) @@ -1874,6 +1904,10 @@ def main(): if options.dryrun: logging.info("Running in simulation mode as requested via option dry-run.") + if options.grubmbr and not options.grub: + logging.critical("Error: --grub-mbr requires --grub option.") + sys.exit(1) + # specified arguments device = args[len(args) - 1] isos = args[0:len(args) - 1]