help="install syslinux bootloader (deprecated as it's the default)")
parser.add_option("--syslinux-mbr", dest="syslinuxmbr", action="store_true",
help="install syslinux master boot record (MBR) instead of default")
+parser.add_option("--tmpdir", dest="tmpdir", default="/tmp",
+ help="directory to be used for temporary files")
parser.add_option("--verbose", dest="verbose", action="store_true",
help="enable verbose mode")
parser.add_option("-v", "--version", dest="version", action="store_true",
@Exception: message"""
pass
+class VerifyException(Exception):
+ """Throw critical exception if there is an fatal error when verifying something.
+
+ @Exception: message"""
+ pass
+
# The following two functions help to operate on strings as
# array (list) of bytes (octets). In Python 3000, the bytes
sys.exit("Error: please run this script with uid 0 (root).")
+def check_boot_flag(device):
+ with open(device, 'r') as image:
+ data = image.read(512)
+ bootcode = data[440:]
+ if bootcode[6] == '\x80':
+ logging.debug("bootflag is enabled")
+ else:
+ logging.debug("bootflag is NOT enabled")
+ raise VerifyException("Device %s does not have the bootflag set. "
+ "Please enable it to be able to boot." % device)
+
+
def mkfs_fat16(device):
"""Format specified device with VFAT/FAT16 filesystem.
version_files = search_file('grml-version', mountpath, lst_return=True)
if not version_files:
- logging.critical("Error: could not find grml-version file.")
- raise
+ if mountpath.startswith("/live/image"):
+ logging.critical("Error: could not find grml-version file.")
+ logging.critical("Looks like your system is running from RAM but required files are not available.")
+ logging.critical("Please either boot without toram=... or use boot option toram instead of toram=...")
+ cleanup()
+ sys.exit(1)
+ else:
+ logging.critical("Error: could not find grml-version file.")
+ cleanup()
+ sys.exit(1)
flavours = []
logging.debug("version_files = %s", version_files)
logging.info("Using %s as install base", image)
else:
logging.info("Using ISO %s", image)
- iso_mountpoint = tempfile.mkdtemp(prefix="grml2usb")
+ iso_mountpoint = tempfile.mkdtemp(prefix="grml2usb", dir=options.tmpdir)
register_tmpfile(iso_mountpoint)
remove_image_mountpoint = True
try:
device_mountpoint = device
if os.path.isdir(device):
- logging.info("Specified device is not a directory, therefore not mounting.")
+ logging.info("Specified device is a directory, therefore not mounting.")
remove_device_mountpoint = False
else:
device_mountpoint = tempfile.mkdtemp(prefix="grml2usb")
remove_device_mountpoint = True
try:
check_for_fat(device)
+ check_boot_flag(device)
mount(device, device_mountpoint, ['-o', 'utf8,iocharset=iso8859-1'])
+ except VerifyException, error:
+ logging.critical("Fatal: %s", error)
+ raise
except CriticalException, error:
try:
mount(device, device_mountpoint, "")