X-Git-Url: https://git.grml.org/?p=grml2usb.git;a=blobdiff_plain;f=grml2usb;h=dda9453123aa065e77194f19c4ff30bbef7ebe9e;hp=f06ab9a7a1aedeb34bc1367d789ceffa16bc47a0;hb=92d09d8d16d0336529b67c6e3824f9eea4d0c53a;hpb=e4a774796aafe18d465cc9d1891d56c3e8be5409 diff --git a/grml2usb b/grml2usb index f06ab9a..dda9453 100755 --- a/grml2usb +++ b/grml2usb @@ -42,7 +42,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 +GPT_HEADER = b"\x55\xaa\x45\x46\x49\x20\x50\x41\x52\x54" # original GPT header GRUB_INSTALL = None RE_PARTITION = re.compile(r'([a-z/]*?)(\d+)$') @@ -379,9 +379,9 @@ def check_boot_flag(device): if part.getFlag(parted.PARTITION_BOOT): logging.debug("bootflag is enabled on %s" % device) return - except HodorException, e: + except HodorException as e: logging.info("%s, falling back to old bootflag detection", e) - except ImportError, e: + except ImportError as e: logging.debug("could not import parted, falling back to old bootflag detection") with open(boot_dev, 'r') as image: @@ -391,7 +391,7 @@ def check_boot_flag(device): if gpt_data == GPT_HEADER: logging.info("GPT detected, skipping bootflag check") - elif bootcode[6] == '\x80': + elif bootcode[6] == b"\x80": logging.debug("bootflag is enabled") else: logging.debug("bootflag is NOT enabled") @@ -502,8 +502,6 @@ def install_grub(device): device_mountpoint = tempfile.mkdtemp(prefix="grml2usb") register_tmpfile(device_mountpoint) try: - mount(device, device_mountpoint, "") - # If using --grub-mbr then make sure we install grub in MBR instead of PBR if options.grubmbr: logging.debug("Using option --grub-mbr ...") @@ -512,16 +510,19 @@ def install_grub(device): grub_device = device set_rw(device) - set_rw(grub_device) + mount(device, device_mountpoint, "") logging.info("Installing grub as bootloader") - for opt in ["", "--force"]: - logging.debug("grub-install --recheck %s --no-floppy --root-directory=%s %s", - opt, device_mountpoint, grub_device) - proc = subprocess.Popen([GRUB_INSTALL, "--recheck", opt, + for opt in ["--", "--force"]: + set_rw(device) + set_rw(grub_device) + logging.debug("%s --recheck --no-floppy --target=i386-pc --root-directory=%s %s %s", + GRUB_INSTALL, device_mountpoint, opt, grub_device) + proc = subprocess.Popen([GRUB_INSTALL, "--recheck", "--no-floppy", "--target=i386-pc", - "--root-directory=%s" % device_mountpoint, grub_device], - stdout=file(os.devnull, "r+")) + "--root-directory=%s" % device_mountpoint, + opt, grub_device], + stdout=open(os.devnull, "r+")) proc.wait() if proc.returncode == 0: break @@ -630,7 +631,7 @@ def install_mbr(mbrtemplate, device, partition, ismirbsdmbr=True): logging.debug("executing: dd if='%s' of='%s' bs=512 count=1", device, tmpf.name) proc = subprocess.Popen(["dd", "if=%s" % device, "of=%s" % tmpf.name, "bs=512", "count=1"], - stderr=file(os.devnull, "r+")) + stderr=open(os.devnull, "r+")) proc.wait() if proc.returncode != 0: raise Exception("error executing dd (first run)") @@ -638,7 +639,7 @@ def install_mbr(mbrtemplate, device, partition, ismirbsdmbr=True): logging.debug("executing: dd if=%s of=%s bs=%s count=1 conv=notrunc", mbrtemplate, tmpf.name, nmbrbytes) proc = subprocess.Popen(["dd", "if=%s" % mbrtemplate, "of=%s" % tmpf.name, "bs=%s" % nmbrbytes, - "count=1", "conv=notrunc"], stderr=file(os.devnull, "r+")) + "count=1", "conv=notrunc"], stderr=open(os.devnull, "r+")) proc.wait() if proc.returncode != 0: raise Exception("error executing dd (second run)") @@ -649,16 +650,16 @@ def install_mbr(mbrtemplate, device, partition, ismirbsdmbr=True): if partition is not None: if ismirbsdmbr: - mbrcode = mbrcode[0:439] + chr(partition) + \ - mbrcode[440:510] + "\x55\xAA" + mbrcode = mbrcode[0:439] + chr(partition).encode('latin-1') + \ + mbrcode[440:510] + b"\x55\xAA" else: - actives = ["\x00", "\x00", "\x00", "\x00"] - actives[partition] = "\x80" + actives = [b"\x00", b"\x00", b"\x00", b"\x00"] + actives[partition] = b"\x80" mbrcode = mbrcode[0:446] + actives[0] + \ mbrcode[447:462] + actives[1] + \ mbrcode[463:478] + actives[2] + \ mbrcode[479:494] + actives[3] + \ - mbrcode[495:510] + "\x55\xAA" + mbrcode[495:510] + b"\x55\xAA" tmpf.file.seek(0) tmpf.file.truncate() @@ -669,7 +670,7 @@ def install_mbr(mbrtemplate, device, partition, ismirbsdmbr=True): logging.debug("executing: dd if='%s' of='%s' bs=512 count=1 conv=notrunc", tmpf.name, device) proc = subprocess.Popen(["dd", "if=%s" % tmpf.name, "of=%s" % device, "bs=512", "count=1", - "conv=notrunc"], stderr=file(os.devnull, "r+")) + "conv=notrunc"], stderr=open(os.devnull, "r+")) proc.wait() if proc.returncode != 0: raise Exception("error executing dd (third run)") @@ -706,7 +707,7 @@ def mount(source, target, mount_options): # note: options.dryrun does not work here, as we have to # locate files and identify the grml flavour - for x in file('/proc/mounts').readlines(): + for x in open('/proc/mounts', 'r').readlines(): if x.startswith(source): raise CriticalException("Error executing mount: %s already mounted - " % source + "please unmount before invoking grml2usb") @@ -715,8 +716,6 @@ def mount(source, target, mount_options): logging.debug("Source %s is not a device, therefore not mounting.", source) return 0 - set_rw(source) - logging.debug("mount %s %s %s", mount_options, source, target) proc = subprocess.Popen(["mount"] + list(mount_options) + [source, target]) proc.wait() @@ -1030,6 +1029,9 @@ def copy_addons(iso_mount, target): # ipxe.lkrn handle_addon_copy('ipxe.lkrn', addons, iso_mount) + # netboot.xyz + handle_addon_copy('netboot.xyz.lkrn', addons, iso_mount) + def build_loopbackcfg(target): """Generate GRUB's loopback.cfg based on existing config files. @@ -1593,6 +1595,8 @@ def install_grml(mountpoint, device): check_for_fat(device) if not options.skipbootflag: check_boot_flag(device) + + set_rw(device) mount(device, device_mountpoint, ['-o', 'utf8,iocharset=iso8859-1']) except CriticalException as error: mount(device, device_mountpoint, "")