X-Git-Url: http://git.grml.org/?p=grml2usb.git;a=blobdiff_plain;f=grml2usb;h=eafee4b76992772a9e7796b2f06418e7015c6057;hp=bef2dc2b54fe3923d4c72843f5b59ee635a99e25;hb=d26c252ab511ba9067c581e227f610095d2d45b1;hpb=fafa0d86e842217845ce314bec5199b0506d597c diff --git a/grml2usb b/grml2usb index bef2dc2..eafee4b 100755 --- a/grml2usb +++ b/grml2usb @@ -40,6 +40,7 @@ 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+)$') @@ -318,9 +319,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") @@ -1379,7 +1384,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 +1567,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'