X-Git-Url: https://git.grml.org/?p=grml2usb.git;a=blobdiff_plain;f=grml2usb;h=632134e42de18be92a33a0781d125d5870861be3;hp=fc3a9055c493c0c0750894479e88c4c67717bdfb;hb=f9c03bf7d1d7b08f87ab4b45fa9ff1f8dd8ae829;hpb=428b5102a56be55e3d980103a4f0207c0f650ac8 diff --git a/grml2usb b/grml2usb index fc3a905..632134e 100755 --- a/grml2usb +++ b/grml2usb @@ -88,6 +88,21 @@ class CriticalException(Exception): 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. """ @@ -955,6 +970,7 @@ def copy_system_files(grml_flavour, iso_mount, target): 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') @@ -964,12 +980,14 @@ def copy_system_files(grml_flavour, iso_mount, target): 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') @@ -1084,8 +1102,16 @@ def copy_bootloader_files(iso_mount, target): bootsplash = search_file(ffile, iso_mount) exec_rsync(bootsplash, syslinux_target + ffile) - for filename in 'addons.cfg', 'default.cfg', 'distri.cfg', 'hidden.cfg', 'grml.cfg', 'grml.png', 'hd.cfg', 'isoprompt.cfg', 'options.cfg','vesamenu.c32', 'vesamenu.cfg', 'grml.png': - path = search_file(filename, iso_mount) + 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 ...") + logging.critical(" ... either use grml releases >=2009.10 or switch to an older grml2usb version.") + raise + + for filename in 'addons.cfg', 'default.cfg', 'distri.cfg', 'hidden.cfg', \ + 'grml.cfg', 'grml.png', 'hd.cfg', 'isoprompt.cfg', 'options.cfg', \ + 'vesamenu.c32', 'vesamenu.cfg', 'grml.png': + path = search_file(filename, iso_mount + '/boot/isolinux/') exec_rsync(path, syslinux_target + filename) grub_target = target + '/boot/grub/'