pass
+# The following two functions help to operate on strings as
+# array (list) of bytes (octets). In Python 3000, the bytes
+# datatype will need to be used. This is intended for using
+# 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)
+
+
def cleanup():
"""Cleanup function to make sure there aren't any mounted devices left behind.
"""
return("""\
menu begin grml %(grml_flavour)s
- menu title Grml %(grml_flavour)s
+ menu title %(grml_flavour)s
label mainmenu
menu label ^Back to main menu...
menu exit
filesystem_module = search_file('filesystem.module', iso_mount)
if filesystem_module is None:
logging.critical("Fatal: filesystem.module not found")
+ raise CriticalException("error locating filesystem.module file")
else:
exec_rsync(filesystem_module, squashfs_target + 'filesystem.module')
kernel = search_file('linux26', iso_mount)
if kernel is None:
logging.critical("Fatal kernel not found")
+ raise CriticalException("error locating kernel file")
else:
exec_rsync(kernel, release_target + '/linux26')
initrd = search_file('initrd.gz', iso_mount)
if initrd is None:
logging.critical("Fatal: initrd not found")
+ raise CriticalException("error locating initrd file")
else:
exec_rsync(initrd, release_target + '/initrd.gz')
def add_syslinux_entry(filename, grml_flavour):
- data = open(filename, "a")
+ data = open(filename, "a+")
+ entry_filename = "option-%s.cfg" % grml_flavour
+ entry = "include %s\n" % entry_filename
+ path = os.path.dirname(filename)
+ for line in data:
+ if line == entry:
+ break
+ else:
+ data.write(entry)
+
+ data.close()
+ data = open(path + "/" + entry_filename, "w")
data.write(generate_flavour_specific_syslinux_config(grml_flavour))
data.close()
new_hidden = "%s-hidden.cfg" % (grml_flavour)
new_default = "%s-default.cfg" % (grml_flavour)
- default_file = open("%s/defaults.cfg" % syslinux_target, "a")
- default_file.write("include %s\n" % new_default)
+ default_file = open("%s/defaults.cfg" % syslinux_target, "a+")
+ entry = "include %s\n" % new_default
+ for line in default_file:
+ if line == entry:
+ break
+ else:
+ default_file.write("include %s\n" % new_default)
+
default_file.close()
add_syslinux_entry("%s/additional.cfg" % syslinux_target, grml_flavour)