X-Git-Url: https://git.grml.org/?p=grml2usb.git;a=blobdiff_plain;f=grml2usb;h=be6b2276b3606214d5975a837a34afcdf192fb4b;hp=bef2dc2b54fe3923d4c72843f5b59ee635a99e25;hb=ccb378445baf849f9ab64b4be578b0648367ff05;hpb=fafa0d86e842217845ce314bec5199b0506d597c diff --git a/grml2usb b/grml2usb index bef2dc2..be6b227 100755 --- a/grml2usb +++ b/grml2usb @@ -40,11 +40,13 @@ GRML_FLAVOURS = set() # which flavours are being installed? GRML_DEFAULT = None UUID = None SYSLINUX_LIBS = "/usr/lib/syslinux/" +GPT_HEADER = "\x55\xaa\x45\x46\x49\x20\x50\x41\x52\x54" # original GPT header RE_PARTITION = re.compile(r'([a-z/]*?)(\d+)$') RE_P_PARTITION = re.compile(r'(.*?\d+)p(\d+)$') RE_LOOP_DEVICE = re.compile(r'/dev/loop\d+$') + def syslinux_warning(option, opt, value, opt_parser): """A helper function for printing a warning about deprecated option """ @@ -131,6 +133,7 @@ class CriticalException(Exception): @Exception: message""" pass + class VerifyException(Exception): """Throw critical exception if there is an fatal error when verifying something. @@ -286,7 +289,7 @@ def search_file(filename, search_path='/bin' + os.pathsep + '/usr/bin', lst_retu @cwd: current working directory """ - return os.path.exists(os.path.join(cwd, filename)) + return os.path.exists(os.path.join(cwd, filename)) for path in paths: current_dir = path @@ -318,9 +321,13 @@ def check_boot_flag(device): boot_dev, x = get_device_from_partition(device) with open(boot_dev, 'r') as image: - data = image.read(512) + data = image.read(520) bootcode = data[440:] - if bootcode[6] == '\x80': + gpt_data = bootcode[70:80] + + if gpt_data == GPT_HEADER: + logging.info("GPT detected, skipping bootflag check") + elif bootcode[6] == '\x80': logging.debug("bootflag is enabled") else: logging.debug("bootflag is NOT enabled") @@ -796,8 +803,7 @@ def copy_system_files(grml_flavour, iso_mount, target): squashfs = search_file(grml_flavour + '.squashfs', iso_mount) if squashfs is None: logging.error("error locating squashfs file") - raise CriticalException("squashfs file not found" - ", please check that your iso is not corrupt") + raise CriticalException("squashfs file not found, please check that your iso is not corrupt") else: squashfs_target = target + '/live/' + grml_flavour + '/' execute(mkdir, squashfs_target) @@ -972,7 +978,7 @@ def build_loopbackcfg(target): logging.debug("Found source file" + sourcefile) os.path.isfile(ops) and f.write("source " + sourcefile + "\n") - f.write("source /boot/grub/adddons.cfg\n") + f.write("source /boot/grub/addons.cfg\n") f.write("source /boot/grub/footer.cfg\n") f.close() @@ -1379,7 +1385,7 @@ def handle_syslinux_config(grml_flavour, target): # install main configuration only *once*, no matter how many ISOs we have: syslinux_config_file = open(syslinux_cfg, 'w') - syslinux_config_file.write("TIMEOUT 300\n") + syslinux_config_file.write("timeout 300\n") syslinux_config_file.write("include vesamenu.cfg\n") syslinux_config_file.close() @@ -1562,7 +1568,20 @@ def handle_mbr(device): mbrcode = GRML2USB_BASE + '/mbr/mbrldr' if options.syslinuxmbr: - mbrcode = '/usr/lib/syslinux/mbr.bin' + mbrcode = "" + mbr_locations = ('/usr/lib/syslinux/mbr.bin', + '/usr/share/syslinux/mbr.bin') + for mbrpath in mbr_locations: + if os.path.isfile(mbrpath): + mbrcode = mbrpath + break + + if mbrcode is "": + str_locations = " or ".join(['"%s"' % l for l in mbr_locations]) + logging.error('Cannot find syslinux MBR, install it at %s)', + str_locations) + raise CriticalException("syslinux MBR can not be found at %s." + % str_locations) elif options.mbrmenu: mbrcode = GRML2USB_BASE + '/mbr/mbrldr'