X-Git-Url: https://git.grml.org/?p=grml2usb.git;a=blobdiff_plain;f=grml2usb;h=e85d5745273eb9adc5bc25bf6aaff4092aab596e;hp=ccdb4db45107f44b180994fdb718fa026a0f3d7e;hb=b79a4cc0cfb42be3f9f4aa33993f928bffedd692;hpb=c70267a95f93aff25600404e127a6f80f48ff084 diff --git a/grml2usb b/grml2usb index ccdb4db..e85d574 100755 --- a/grml2usb +++ b/grml2usb @@ -22,7 +22,7 @@ import uuid import struct # global variables -PROG_VERSION = "0.9.25" +PROG_VERSION = "0.9.27~git" MOUNTED = set() # register mountpoints TMPFILES = set() # register tmpfiles DATESTAMP = time.mktime(datetime.datetime.now().timetuple()) # unique identifier for syslinux.cfg @@ -649,7 +649,7 @@ def install_grub(device): grub_device = device logging.info("Installing grub as bootloader") - logging.debug("grub-install --recheck --no-floppy --root-directory=%s %s", + logging.debug("grub-install --recheck --force --no-floppy --root-directory=%s %s", device_mountpoint, grub_device) proc = subprocess.Popen(["grub-install", "--recheck", "--force", "--no-floppy", "--root-directory=%s" % device_mountpoint, grub_device], @@ -699,18 +699,12 @@ def install_bootloader(device): # by default we use grub, so install syslinux only on request if options.grub: - if not which("grub-install"): - logging.critical("Fatal: grub-install not available (please install the " - + "grub package or use the --syslinux option)") + try: + install_grub(device) + except CriticalException, error: + logging.critical("Fatal: %s", error) cleanup() sys.exit(1) - else: - try: - install_grub(device) - except CriticalException, error: - logging.critical("Fatal: %s", error) - cleanup() - sys.exit(1) else: try: install_syslinux(device) @@ -910,8 +904,8 @@ def mount(source, target, mount_options): for x in file('/proc/mounts').readlines(): if x.startswith(source): - raise CriticalException("Error executing mount: %s already mounted - " - + "please unmount before invoking grml2usb" % source) + raise CriticalException("Error executing mount: %s already mounted - " % source + + "please unmount before invoking grml2usb") if os.path.isdir(source): logging.debug("Source %s is not a device, therefore not mounting.", source) @@ -980,18 +974,19 @@ def check_for_fat(partition): @partition: device name of partition""" + if not os.access(partition, os.R_OK): + raise CriticalException("Failed to read device %s" + " (wrong UID/permissions or device/directory not present?)" % partition) + try: udev_info = subprocess.Popen(["/sbin/blkid", "-s", "TYPE", "-o", "value", partition], stdout=subprocess.PIPE, stderr=subprocess.PIPE) filesystem = udev_info.communicate()[0].rstrip() - if udev_info.returncode == 2: - raise CriticalException("Failed to read device %s" - " (wrong UID/permissions or device/directory not present?)" % partition) - if filesystem != "vfat": - raise CriticalException("Partition %s does not contain a FAT16 filesystem. " - + "(Use --fat16 or run mkfs.vfat %s)" % (partition, partition)) + raise CriticalException( + "Partition %s does not contain a FAT16 filesystem. " + "(Use --fat16 or run mkfs.vfat %s)" % (partition, partition)) except OSError: raise CriticalException("Sorry, /sbin/blkid not available (install e2fsprogs?)") @@ -1538,6 +1533,20 @@ def handle_grub2_config(grml_flavour, grub_target, bootopt): modify_grub_config(grub2_cfg) +def get_bootoptions(grml_flavour): + """Returns bootoptions for specific flavour + + @grml_flavour: name of the grml_flavour + """ + # do NOT write "None" in kernel cmdline + if options.bootoptions is None: + bootopt = "" + else: + bootopt = options.bootoptions + bootopt = bootopt.replace("%flavour", grml_flavour) + return bootopt + + def handle_grub_config(grml_flavour, device, target): """Main handler for generating grub (v1 and v2) configuration @@ -1557,11 +1566,8 @@ def handle_grub_config(grml_flavour, device, target): else: raise CriticalException("error validating partition schema (raw device?)") - # do NOT write "None" in kernel cmdline - if options.bootoptions is None: - bootopt = "" - else: - bootopt = options.bootoptions + + bootopt = get_bootoptions(grml_flavour) # write menu.lst handle_grub1_config(grml_flavour, install_grub1_partition, grub_target, bootopt) @@ -1624,11 +1630,7 @@ def adjust_syslinux_bootoptions(src, flavour): bootid_re = re.compile("bootid=[\w_-]+") live_media_path_re = re.compile("live-media-path=[\w_/-]+") - # do NOT write "None" in kernel cmdline - if options.bootoptions is None: - bootopt = "" - else: - bootopt = options.bootoptions + bootopt = get_bootoptions(flavour) regexe = [] option_re = None @@ -2049,7 +2051,6 @@ def main(): if options.dryrun: logging.info("Running in simulation mode as requested via option dry-run.") - # specified arguments device = args[len(args) - 1] isos = args[0:len(args) - 1] @@ -2063,6 +2064,18 @@ def main(): logging.critical("Fatal: installation on raw device not supported. (BIOS won't support it.)") sys.exit(1) + if options.grub: + if not which("grub-install"): + logging.critical("Fatal: grub-install not available (please install the " + + "grub package or drop the --grub option)") + sys.exit(1) + + if options.syslinux: + if not which("syslinux"): + logging.critical("Fatal: syslinux not available (please install the " + + "syslinux package or use the --grub option)") + sys.exit(1) + if not which("rsync"): logging.critical("Fatal: rsync not available, can not continue - sorry.") sys.exit(1)