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
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],
# 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)
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)
@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?)")
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
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)
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
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]
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)