X-Git-Url: http://git.grml.org/?p=grml2usb.git;a=blobdiff_plain;f=grml2usb;h=0fbf339a60086990e7082937e0ac15b0a736fa5a;hp=92c2cbfd10972acc70c4a86eba0d44005102444b;hb=cfed72fbf4abe304f4c789f024d95fac127b3f0f;hpb=411daf1e3e9fcbb9c4e4588a9fbe92513efb1ed1 diff --git a/grml2usb b/grml2usb index 92c2cbf..0fbf339 100755 --- a/grml2usb +++ b/grml2usb @@ -5,7 +5,7 @@ grml2usb ~~~~~~~~ -This script installs a grml system (either a running system or ISO[s]) to a USB device +This script installs a Grml system (either a running system or ISO[s]) to a USB device :copyright: (c) 2009, 2010, 2011 by Michael Prokop :license: GPL v2 or any later version @@ -28,6 +28,7 @@ import sys import tempfile import time import uuid +import shutil # The line following this line is patched by debian/rules and tarball.sh. PROG_VERSION = '***UNRELEASED***' @@ -161,22 +162,36 @@ def string2array(s): def cleanup(): """Cleanup function to make sure there aren't any mounted devices left behind. """ + def del_failed(fn, filepath, exc): + msg = "Deletion of %s failed in temporary folder %s" + logging.warn(msg % (filepath, path)) logging.info("Cleaning up before exiting...") proc = subprocess.Popen(["sync"]) proc.wait() - for device in MOUNTED: + for device in MOUNTED.copy(): try: unmount(device, "") - except RuntimeError: + logging.debug('Unmounted %s' % device) + except StandardError: logging.debug('RuntimeError while umount %s, ignoring' % device) - for tmpfile in TMPFILES: + + for tmppath in TMPFILES.copy(): try: - os.unlink(tmpfile) - except RuntimeError: + if os.path.isdir(tmppath) and not os.path.islink(tmppath): + # symbolic links to directories are ignored + # without the check it will throw an OSError + shutil.rmtree(tmppath, onerror=del_failed) + logging.debug('temporary directory %s deleted' % tmppath) + unregister_tmpfile(tmppath) + elif os.path.isfile: + os.unlink(tmppath) + logging.debug('temporary file %s deleted' % tmppath) + unregister_tmpfile(tmppath) + except StandardError: msg = 'RuntimeError while removing temporary %s, ignoring' - logging.debug(msg % tmpfile) + logging.debug(msg % tmppath) def register_tmpfile(path): @@ -1481,7 +1496,7 @@ def install(image, device): if options.force or os.path.exists(os.path.join(image, 'live')): logging.info("Using %s as install base", image) else: - q = raw_input("%s does not look like a grml system. " + q = raw_input("%s does not look like a Grml system. " "Do you really want to use this image? y/N " % image) if q.lower() == 'y': logging.info("Using %s as install base", image) @@ -1510,7 +1525,7 @@ def install(image, device): def install_grml(mountpoint, device): - """Main logic for copying files of the currently running grml system. + """Main logic for copying files of the currently running Grml system. @mountpoint: directory where currently running live system resides (usually /lib/live/mount/medium) @device: partition where the specified ISO should be installed to""" @@ -1801,7 +1816,7 @@ def main(): logging.info("Note: you can boot flavour %s using '%s' on the commandline.", flavour, flavour) # finally be polite :) - logging.info("Finished execution of grml2usb (%s). Have fun with your grml system.", PROG_VERSION) + logging.info("Finished execution of grml2usb (%s). Have fun with your Grml system.", PROG_VERSION) except Exception, error: logging.critical("Fatal: %s", str(error))