# with manipulation of files on the octet level, like shell
# arrays, e.g. in MBR creation.
+
def array2string(a):
"""Convert a list of integers [0;255] to a string."""
return struct.pack("%sB" % len(a), *a)
+
def string2array(s):
"""Convert a (bytes) string into a list of integers."""
return struct.unpack("%sB" % len(s), s)
else:
grub_device = device
+ logging.info("Installing grub as bootloader")
logging.debug("grub-install --recheck --no-floppy --root-directory=%s %s",
device_mountpoint, grub_device)
proc = subprocess.Popen(["grub-install", "--recheck", "--no-floppy",
bootsplash = search_file(ffile, iso_mount)
exec_rsync(bootsplash, syslinux_target + ffile)
+ # avoid the "file is read only, overwrite anyway (y/n) ?" question
+ # of mtools by syslinux ("mmove -D o -D O s:/ldlinux.sys $target_file")
+ if os.path.isfile(syslinux_target + 'ldlinux.sys'):
+ os.unlink(syslinux_target + 'ldlinux.sys')
+
if not search_file('default.cfg', iso_mount + '/boot/isolinux/'):
logging.critical("Fatal: file default.cfg could not be found.")
logging.critical("Note: this grml2usb version requires an ISO generated by grml-live >=0.9.24 ...")
if os.path.isfile("/usr/share/grub/ascii.pf2"):
exec_rsync('/usr/share/grub/ascii.pf2', grub_target + 'ascii.pf2')
+
def install_iso_files(grml_flavour, iso_mount, device, target):
"""Copy files from ISO to given target
data.write(generate_main_syslinux_config())
data.close
+
def adjust_syslinux_bootoptions(src_name, dst_name, flavour):
append_re = re.compile("^(\s*append.*)$", re.I)
boot_re = re.compile("/boot/([a-zA-Z0-9_]+/)+([a-zA-Z0-9._]+)")
src = open(src_name, "r")
dst = open(dst_name, "w")
+ # do NOT write "None" in kernel cmdline
+ if options.bootoptions is None:
+ bootopt = ""
+ else:
+ bootopt = options.bootoptions
+
for line in src:
- line = boot_re.sub(r'/boot/release/%s/\2 ' % flavour, line)
- line = flavour_re.sub(r'\1 %s-\2' % flavour, line)
+ line = boot_re.sub(r'/boot/release/%s/\2 ' % flavour, line)
+ line = flavour_re.sub(r'\1 %s-\2' % flavour, line)
line = default_re.sub(r'%s-\1' % flavour, line)
line = append_re.sub(r'\1 live-media-path=/live/%s/ ' % flavour, line)
+ line = append_re.sub(r'\1 boot=live %s ' % bootopt, line)
dst.write(line)
src.close()
dst.close()
data.close()
-
-
def handle_syslinux_config(grml_flavour, target):
"""Main handler for generating syslinux configuration
add_syslinux_entry("%s/additional.cfg" % syslinux_target, grml_flavour)
-
-
-
def handle_bootloader_config(grml_flavour, device, target):
"""Main handler for generating bootloader's configuration
logging.critical("Fatal: %s", error)
sys.exit(1)
+
def handle_dir(live_image, device):
"""Main logic for copying files of the currently running grml system.
# finally be politely :)
logging.info("Finished execution of grml2usb (%s). Have fun with your grml system.", PROG_VERSION)
-
if __name__ == "__main__":
try:
main()