X-Git-Url: https://git.grml.org/?p=grml2usb.git;a=blobdiff_plain;f=grml2usb;h=fd03ef9c5594763368e21f79255a16e84d1c3cf3;hp=85529c367c1d24b7e31afb9d57c1ec45013769f5;hb=b5737ff391355c1a7ed6a996b2cbb70a8c1addf0;hpb=409f86265e5ba43939c5625971a64d54abae7456 diff --git a/grml2usb b/grml2usb index 85529c3..fd03ef9 100755 --- a/grml2usb +++ b/grml2usb @@ -705,6 +705,10 @@ def install_syslinux_mbr(device): @device: device where MBR of syslinux should be installed to""" + # make sure we have syslinux available + if not which("syslinux") and not options.copyonly: + raise Exception("syslinux not available (either install it or consider dropping the --syslinux option)") + # lilo's mbr is broken, use the one from syslinux instead: if not os.path.isfile("/usr/lib/syslinux/mbr.bin"): raise Exception("/usr/lib/syslinux/mbr.bin can not be read") @@ -867,7 +871,7 @@ def mount(source, target, mount_options): raise CriticalException("Error executing mount: %s already mounted - please unmount before invoking grml2usb" % source) if os.path.isdir(source): - logging.debug("Source %s is not a device, not mounting therefor." % source) + logging.debug("Source %s is not a device, therefore not mounting." % source) return 0 logging.debug("mount %s %s %s" % (mount_options, source, target)) @@ -975,16 +979,16 @@ def copy_system_files(grml_flavour, iso_mount, target): else: squashfs_target = target + '/live/' + grml_flavour + '/' execute(mkdir, squashfs_target) - logging.debug("rsync -aHS %s %s" % (squashfs, squashfs_target + grml_flavour + '.squashfs')) - proc = subprocess.Popen(["rsync", "-aHS", squashfs, squashfs_target + grml_flavour + ".squashfs"]) + logging.debug("rsync -rlptDH --inplace %s %s" % (squashfs, squashfs_target + grml_flavour + '.squashfs')) + proc = subprocess.Popen(["rsync", "-rlptDH", "--inplace", squashfs, squashfs_target + grml_flavour + ".squashfs"]) proc.wait() filesystem_module = search_file('filesystem.module', iso_mount) if filesystem_module is None: logging.critical("Fatal: filesystem.module not found") else: - logging.debug("rsync -aHS %s %s" % (filesystem_module, squashfs_target + 'filesystem.module')) - proc = subprocess.Popen(["rsync", "-aHS", filesystem_module, squashfs_target + 'filesystem.module']) + logging.debug("rsync -rlptDH --inplace %s %s" % (filesystem_module, squashfs_target + 'filesystem.module')) + proc = subprocess.Popen(["rsync", "-rlptDH", "--inplace", filesystem_module, squashfs_target + 'filesystem.module']) proc.wait() release_target = target + '/boot/release/' + grml_flavour @@ -994,16 +998,16 @@ def copy_system_files(grml_flavour, iso_mount, target): if kernel is None: logging.critical("Fatal kernel not found") else: - logging.debug("rsync -aHS %s %s" % (kernel, release_target + '/linux26')) - proc = subprocess.Popen(["rsync", "-aHS", kernel, release_target + '/linux26']) + logging.debug("rsync -rlptDH --inplace %s %s" % (kernel, release_target + '/linux26')) + proc = subprocess.Popen(["rsync", "-rlptDH", "--inplace", kernel, release_target + '/linux26']) proc.wait() initrd = search_file('initrd.gz', iso_mount) if initrd is None: logging.critical("Fatal: initrd not found") else: - logging.debug("rsync -aHS %s %s" % (initrd, release_target + '/initrd.gz')) - proc = subprocess.Popen(["rsync", "-aHS", initrd, release_target + '/initrd.gz']) + logging.debug("rsync -rlptDH --inplace %s %s" % (initrd, release_target + '/initrd.gz')) + proc = subprocess.Popen(["rsync", "-rlptDH", "--inplace", initrd, release_target + '/initrd.gz']) proc.wait() @@ -1021,8 +1025,8 @@ def copy_grml_files(iso_mount, target): if grml_file is None: logging.warn("Warning: myfile %s could not be found - can not install it", myfile) else: - logging.debug("rsync -aHS %s %s" % (grml_file, grml_target + grml_file)) - proc = subprocess.Popen(["rsync", "-aHS", grml_file, grml_target + myfile]) + logging.debug("rsync -rlptDH --inplace %s %s" % (grml_file, grml_target + grml_file)) + proc = subprocess.Popen(["rsync", "-rlptDH", "--inplace", grml_file, grml_target + myfile]) proc.wait() grml_web_target = grml_target + '/web/' @@ -1033,8 +1037,8 @@ def copy_grml_files(iso_mount, target): if grml_file is None: logging.warn("Warning: myfile %s could not be found - can not install it") else: - logging.debug("rsync -aHS %s %s" % (grml_file, grml_web_target + grml_file)) - proc = subprocess.Popen(["rsync", "-aHS", grml_file, grml_web_target + myfile]) + logging.debug("rsync -rlptDH --inplace %s %s" % (grml_file, grml_web_target + grml_file)) + proc = subprocess.Popen(["rsync", "-rlptDH", "--inplace", grml_file, grml_web_target + myfile]) proc.wait() grml_webimg_target = grml_web_target + '/images/' @@ -1045,8 +1049,8 @@ def copy_grml_files(iso_mount, target): if grml_file is None: logging.warn("Warning: myfile %s could not be found - can not install it") else: - logging.debug("rsync -aHS %s %s" % (grml_file, grml_webimg_target + grml_file)) - proc = subprocess.Popen(["rsync", "-aHS", grml_file, grml_webimg_target + myfile]) + logging.debug("rsync -rlptDH --inplace %s %s" % (grml_file, grml_webimg_target + grml_file)) + proc = subprocess.Popen(["rsync", "-rlptDH", "--inplace", grml_file, grml_webimg_target + myfile]) proc.wait() @@ -1064,8 +1068,8 @@ def copy_addons(iso_mount, target): if allinoneimg is None: logging.warn("Warning: allinone.img not found (that's fine if you don't need it)") else: - logging.debug("rsync -aHS %s %s" % (allinoneimg, addons + '/allinone.img')) - proc = subprocess.Popen(["rsync", "-aHS", allinoneimg, addons + 'allinone.img']) + logging.debug("rsync -rlptDH --inplace %s %s" % (allinoneimg, addons + '/allinone.img')) + proc = subprocess.Popen(["rsync", "-rlptDH", "--inplace", allinoneimg, addons + 'allinone.img']) proc.wait() # bsd imag @@ -1073,8 +1077,8 @@ def copy_addons(iso_mount, target): if bsdimg is None: logging.warn("Warning: bsd4grml not found (that's fine if you don't need it)") else: - logging.debug("rsync -aHS %s %s" % (bsdimg, addons + '/')) - proc = subprocess.Popen(["rsync", "-aHS", bsdimg, addons + '/']) + logging.debug("rsync -rlptDH --inplace %s %s" % (bsdimg, addons + '/')) + proc = subprocess.Popen(["rsync", "-rlptDH", "--inplace", bsdimg, addons + '/']) proc.wait() # freedos image @@ -1082,8 +1086,8 @@ def copy_addons(iso_mount, target): if balderimg is None: logging.warn("Warning: balder10.imz not found (that's fine if you don't need it)") else: - logging.debug("rsync -aHS %s %s" % (balderimg, addons + '/balder10.imz')) - proc = subprocess.Popen(["rsync", "-aHS", balderimg, addons + 'balder10.imz']) + logging.debug("rsync -rlptDH --inplace %s %s" % (balderimg, addons + '/balder10.imz')) + proc = subprocess.Popen(["rsync", "-rlptDH", "--inplace", balderimg, addons + 'balder10.imz']) proc.wait() # install hdt and pci.ids only when using syslinux (grub doesn't support it) @@ -1091,15 +1095,15 @@ def copy_addons(iso_mount, target): # hdt (hardware detection tool) image hdtimg = search_file('hdt.c32', iso_mount) if hdtimg: - logging.debug("rsync -aHS %s %s" % (hdtimg, addons + '/hdt.c32')) - proc = subprocess.Popen(["rsync", "-aHS", hdtimg, addons + '/hdt.c32']) + logging.debug("rsync -rlptDH --inplace %s %s" % (hdtimg, addons + '/hdt.c32')) + proc = subprocess.Popen(["rsync", "-rlptDH", "--inplace", hdtimg, addons + '/hdt.c32']) proc.wait() # pci.ids file picids = search_file('pci.ids', iso_mount) if picids: - logging.debug("rsync -aHS %s %s" % (picids, addons + '/pci.ids')) - proc = subprocess.Popen(["rsync", "-aHS", picids, addons + '/pci.ids']) + logging.debug("rsync -rlptDH --inplace %s %s" % (picids, addons + '/pci.ids')) + proc = subprocess.Popen(["rsync", "-rlptDH", "--inplace", picids, addons + '/pci.ids']) proc.wait() # memdisk image @@ -1107,8 +1111,8 @@ def copy_addons(iso_mount, target): if memdiskimg is None: logging.warn("Warning: memdisk not found (that's fine if you don't need it)") else: - logging.debug("rsync -aHS %s %s" % (memdiskimg, addons + '/memdisk')) - proc = subprocess.Popen(["rsync", "-aHS", memdiskimg, addons + 'memdisk']) + logging.debug("rsync -rlptDH --inplace %s %s" % (memdiskimg, addons + '/memdisk')) + proc = subprocess.Popen(["rsync", "-rlptDH", "--inplace", memdiskimg, addons + 'memdisk']) proc.wait() # memtest86+ image @@ -1116,8 +1120,8 @@ def copy_addons(iso_mount, target): if memtestimg is None: logging.warn("Warning: memtest not found (that's fine if you don't need it)") else: - logging.debug("rsync -aHS %s %s" % (memtestimg, addons + '/memtest')) - proc = subprocess.Popen(["rsync", "-aHS", memtestimg, addons + 'memtest']) + logging.debug("rsync -rlptDH --inplace %s %s" % (memtestimg, addons + '/memtest')) + proc = subprocess.Popen(["rsync", "-rlptDH", "--inplace", memtestimg, addons + 'memtest']) proc.wait() @@ -1131,14 +1135,14 @@ def copy_bootloader_files(iso_mount, target): execute(mkdir, syslinux_target) logo = search_file('logo.16', iso_mount) - logging.debug("rsync -aHS %s %s" % (logo, syslinux_target + 'logo.16')) - proc = subprocess.Popen(["rsync", "-aHS", logo, syslinux_target + 'logo.16']) + logging.debug("rsync -rlptDH --inplace %s %s" % (logo, syslinux_target + 'logo.16')) + proc = subprocess.Popen(["rsync", "-rlptDH", "--inplace", logo, syslinux_target + 'logo.16']) proc.wait() for ffile in 'f2', 'f3', 'f4', 'f5', 'f6', 'f7', 'f8', 'f9', 'f10': bootsplash = search_file(ffile, iso_mount) - logging.debug("rsync -aHS %s %s" % (bootsplash, syslinux_target + ffile)) - proc = subprocess.Popen(["rsync", "-aHS", bootsplash, syslinux_target + ffile]) + logging.debug("rsync -rlptDH --inplace %s %s" % (bootsplash, syslinux_target + ffile)) + proc = subprocess.Popen(["rsync", "-rlptDH", "--inplace", bootsplash, syslinux_target + ffile]) proc.wait() grub_target = target + '/boot/grub/' @@ -1149,22 +1153,22 @@ def copy_bootloader_files(iso_mount, target): logging.critical("Please make sure you've the grml2usb Debian package installed!") raise else: - logging.debug("rsync -aHS /usr/share/grml2usb/grub/splash.xpm.gz %s" % grub_target + 'splash.xpm.gz') - proc = subprocess.Popen(["rsync", "-aHS", '/usr/share/grml2usb/grub/splash.xpm.gz', + logging.debug("rsync -rlptDH --inplace /usr/share/grml2usb/grub/splash.xpm.gz %s" % grub_target + 'splash.xpm.gz') + proc = subprocess.Popen(["rsync", "-rlptDH", "--inplace", '/usr/share/grml2usb/grub/splash.xpm.gz', grub_target + 'splash.xpm.gz']) proc.wait() # grml splash in grub if os.path.isfile("/usr/share/grml2usb/grub/grml.png"): - logging.debug("rsync -aHS /usr/share/grml2usb/grub/grml.png to %s" % grub_target + 'grml.png') - proc = subprocess.Popen(["rsync", "-aHS", '/usr/share/grml2usb/grub/grml.png', + logging.debug("rsync -rlptDH --inplace /usr/share/grml2usb/grub/grml.png to %s" % grub_target + 'grml.png') + proc = subprocess.Popen(["rsync", "-rlptDH", "--inplace", '/usr/share/grml2usb/grub/grml.png', grub_target + 'grml.png']) proc.wait() # font file for graphical bootsplash in grub if os.path.isfile("/usr/share/grub/ascii.pff"): - logging.debug("rsync -aHS /usr/share/grub/ascii.pff to %s" % grub_target + 'ascii.pff') - proc = subprocess.Popen(["rsync", "-aHS", '/usr/share/grub/ascii.pff', + logging.debug("rsync -rlptDH --inplace /usr/share/grub/ascii.pff to %s" % grub_target + 'ascii.pff') + proc = subprocess.Popen(["rsync", "-rlptDH", "--inplace", '/usr/share/grub/ascii.pff', grub_target + 'ascii.pff']) proc.wait() @@ -1195,14 +1199,14 @@ def install_iso_files(grml_flavour, iso_mount, device, target): if not options.skipaddons: if grml_flavour.endswith('-small'): - logging.info("Note: grml-small doesn't provide any addons, not installing them therefor.") + logging.info("Note: grml-small doesn't provide any addons, not installing them therefore.") else: copy_addons(iso_mount, target) if not options.copyonly: copy_bootloader_files(iso_mount, target) - if not options.dryrun and not os.path.isdir(device): + if not options.dryrun: handle_bootloader_config(grml_flavour, device, target) # make sure we sync filesystems before returning @@ -1344,11 +1348,13 @@ def handle_grub_config(grml_flavour, device, target): grub_target = target + '/boot/grub/' execute(mkdir, grub_target) - # we have to adjust root() inside grub configuration - if device[-1:].isdigit(): - install_grub1_partition = int(device[-1:]) - 1 + if os.path.isdir(device): + install_grub1_partition = None else: - raise CriticalException("error validating partition schema (raw device?)") + if device[-1:].isdigit(): + install_grub1_partition = int(device[-1:]) - 1 + else: + raise CriticalException("error validating partition schema (raw device?)") # do NOT write "None" in kernel cmdline if options.bootoptions is None: @@ -1357,7 +1363,8 @@ def handle_grub_config(grml_flavour, device, target): bootopt = options.bootoptions # write menu.lst - handle_grub1_config(grml_flavour, install_grub1_partition, grub_target, bootopt) + if install_grub1_partition: + handle_grub1_config(grml_flavour, install_grub1_partition, grub_target, bootopt) # write grub.cfg handle_grub2_config(grml_flavour, grub_target, bootopt) @@ -1457,7 +1464,7 @@ def handle_dir(live_image, device): logging.info("Using %s as install base" % live_image) if os.path.isdir(device): - logging.info("Specified target is a directory, not mounting therefor.") + logging.info("Specified target is a directory, therefore not mounting.") device_mountpoint = device remove_device_mountpoint = False else: @@ -1514,7 +1521,7 @@ def handle_iso(iso, device): sys.exit(1) if os.path.isdir(device): - logging.info("Specified target is a directory, not mounting therefor.") + logging.info("Specified target is a directory, therefore not mounting.") device_mountpoint = device remove_device_mountpoint = False # skip_mbr = True @@ -1561,19 +1568,13 @@ def handle_mbr(device): logging.info("Would install MBR") return 0 - # make sure we have syslinux available - if not which("syslinux") and not options.copyonly: - logging.critical('Sorry, syslinux not available. Exiting.') - logging.critical('Please install syslinux or consider using the --grub option.') - sys.exit(1) - if device[-1:].isdigit(): mbr_device = re.match(r'(.*?)\d*$', device).group(1) partition_number = int(device[-1:]) - 1 skip_install_mir_mbr = False # if we get e.g. /dev/loop1 as device we don't want to put the MBR - # into /dev/loop of course, therefor use /dev/loop1 as mbr_device + # into /dev/loop of course, therefore use /dev/loop1 as mbr_device if mbr_device == "/dev/loop": mbr_device = device logging.info("Detected loop device - using %s as MBR device therefore" % mbr_device) @@ -1627,7 +1628,7 @@ def handle_vfat(device): logging.critical("Execution failed: %s", error) sys.exit(1) - if not check_for_usbdevice(device) and not os.path.isdir(device): + if not os.path.isdir(device) and not check_for_usbdevice(device): print "Warning: the specified device %s does not look like a removable usb device." % device f = raw_input("Do you really want to continue? y/N ") if f == "y" or f == "Y":