X-Git-Url: https://git.grml.org/?p=grml2usb.git;a=blobdiff_plain;f=grml2usb;h=c3e8025efc4639cc4a3df3de98b8083bda0634be;hp=3e9475e06214d3b05d19037ba1aef7ef6aca4e09;hb=f533d16bcabc16dff4dc8910be889a4530454f51;hpb=afcc7b22dfdecb49ca05ac4cb8758cd98889ef4f diff --git a/grml2usb b/grml2usb index 3e9475e..c3e8025 100755 --- a/grml2usb +++ b/grml2usb @@ -18,7 +18,7 @@ from inspect import isroutine, isclass import datetime, logging, os, re, subprocess, sys, tempfile, time # global variables -PROG_VERSION = "0.9.3" +PROG_VERSION = "0.9.5" MOUNTED = set() # register mountpoints TMPFILES = set() # register tmpfiles DATESTAMP = time.mktime(datetime.datetime.now().timetuple()) # unique identifier for syslinux.cfg @@ -283,9 +283,9 @@ menuentry "FreeDOS" { initrd /boot/addons/balder10.imz } -menuentry "MirBSD" { +menuentry "MirOS BSD" { set root=(hd0,%(install_partition)s) - linux /boot/addons/bsd4grml/ldbsd.com + multiboot /boot/addons/bsd4grml/ldbsd.com } menuentry "Boot OS of first partition on first disk" { @@ -324,43 +324,43 @@ menuentry "%(grml_flavour)s2ram" { ## flavour specific configuration for %(grml_flavour)s [grml2usb for %(grml_flavour)s: %(local_datestamp)s] menuentry "%(grml_flavour)s-debug" { set root=(hd0,%(install_partition)s) - linux /boot/release/%(grml_flavour)s/linux26 - initrd /boot/release/%(grml_flavour)s/initrd.gz apm=power-off boot=live nomce vga=791 quiet live-media-path=/live/%(grml_flavour)s/ debug boot=live initcall_debug%(bootoptions)s + linux /boot/release/%(grml_flavour)s/linux26 apm=power-off boot=live nomce vga=791 quiet live-media-path=/live/%(grml_flavour)s/ debug boot=live initcall_debug%(bootoptions)s + initrd /boot/release/%(grml_flavour)s/initrd.gz } ## flavour specific configuration for %(grml_flavour)s [grml2usb for %(grml_flavour)s: %(local_datestamp)s] menuentry "%(grml_flavour)s-x" { set root=(hd0,%(install_partition)s) - linux /boot/release/%(grml_flavour)s/linux26 - initrd /boot/release/%(grml_flavour)s/initrd.gz apm=power-off boot=live nomce vga=791 quiet live-media-path=/live/%(grml_flavour)s/ startx=wm-ng %(bootoptions)s + linux /boot/release/%(grml_flavour)s/linux26 apm=power-off boot=live nomce vga=791 quiet live-media-path=/live/%(grml_flavour)s/ startx=wm-ng %(bootoptions)s + initrd /boot/release/%(grml_flavour)s/initrd.gz } ## flavour specific configuration for %(grml_flavour)s [grml2usb for %(grml_flavour)s: %(local_datestamp)s] menuentry "%(grml_flavour)s-nofb" { set root=(hd0,%(install_partition)s) - linux /boot/release/%(grml_flavour)s/linux26 - initrd /boot/release/%(grml_flavour)s/initrd.gz apm=power-off boot=live nomce quiet live-media-path=/live/%(grml_flavour)s/ vga=normal video=ofonly %(bootoptions)s + linux /boot/release/%(grml_flavour)s/linux26 apm=power-off boot=live nomce quiet live-media-path=/live/%(grml_flavour)s/ vga=normal video=ofonly %(bootoptions)s + initrd /boot/release/%(grml_flavour)s/initrd.gz } ## flavour specific configuration for %(grml_flavour)s [grml2usb for %(grml_flavour)s: %(local_datestamp)s] menuentry "%(grml_flavour)s-failsafe" { set root=(hd0,%(install_partition)s) - linux /boot/release/%(grml_flavour)s/linux26 - initrd /boot/release/%(grml_flavour)s/initrd.gz apm=power-off boot=live nomce quiet live-media-path=/live/%(grml_flavour)s/ vga=normal boot=live noautoconfig atapicd noapic noacpi acpi=off nomodules nofirewire noudev nousb nohotplug noapm nopcmcia nosmp maxcpus=0 noscsi noagp nodma ide=nodma noswap nofstab nosound nogpm nosyslog nodhcp nocpu nodisc nomodem xmodule=vesa noraid nolvm noresume selinux=0 edd=off %(bootoptions)s + linux /boot/release/%(grml_flavour)s/linux26 apm=power-off boot=live nomce quiet live-media-path=/live/%(grml_flavour)s/ vga=normal boot=live noautoconfig atapicd noapic noacpi acpi=off nomodules nofirewire noudev nousb nohotplug noapm nopcmcia nosmp maxcpus=0 noscsi noagp nodma ide=nodma noswap nofstab nosound nogpm nosyslog nodhcp nocpu nodisc nomodem xmodule=vesa noraid nolvm noresume selinux=0 edd=off %(bootoptions)s + initrd /boot/release/%(grml_flavour)s/initrd.gz } ## flavour specific configuration for %(grml_flavour)s [grml2usb for %(grml_flavour)s: %(local_datestamp)s] menuentry "%(grml_flavour)s-forensic" { set root=(hd0,%(install_partition)s) - linux /boot/release/%(grml_flavour)s/linux26 - initrd /boot/release/%(grml_flavour)s/initrd.gz apm=power-off boot=live nomce vga=791 quiet live-media-path=/live/%(grml_flavour)s/ nofstab noraid nolvm noautoconfig noswap raid=noautodetect %(bootoptions)s + linux /boot/release/%(grml_flavour)s/linux26 apm=power-off boot=live nomce vga=791 quiet live-media-path=/live/%(grml_flavour)s/ nofstab noraid nolvm noautoconfig noswap raid=noautodetect %(bootoptions)s + initrd /boot/release/%(grml_flavour)s/initrd.gz } ## flavour specific configuration for %(grml_flavour)s [grml2usb for %(grml_flavour)s: %(local_datestamp)s] menuentry "%(grml_flavour)s-serial" { set root=(hd0,%(install_partition)s) - linux /boot/release/%(grml_flavour)s/linux26 - initrd /boot/release/%(grml_flavour)s/initrd.gz apm=power-off boot=live nomce quiet live-media-path=/live/%(grml_flavour)s/ vga=normal video=vesafb:off console=tty1 console=ttyS0,9600n8 %(bootoptions)s + linux /boot/release/%(grml_flavour)s/linux26 apm=power-off boot=live nomce quiet live-media-path=/live/%(grml_flavour)s/ vga=normal video=vesafb:off console=tty1 console=ttyS0,9600n8 %(bootoptions)s + initrd /boot/release/%(grml_flavour)s/initrd.gz } """ % {'grml_flavour': grml_flavour, 'local_datestamp': local_datestamp, @@ -439,7 +439,7 @@ background = FFCC33 # define entries: title %(grml_flavour)s - Default boot (using 1024x768 framebuffer) -kernel (hd0,%(install_partition)s)/boot/release/%(grml_flavour)s/linux26 apm=power-off vga=791 quiet boot=live nomce live-media-path=/live/%(grml_flavour)s/ +kernel (hd0,%(install_partition)s)/boot/release/%(grml_flavour)s/linux26 apm=power-off vga=791 quiet boot=live nomce live-media-path=/live/%(grml_flavour)s/ %(bootoptions)s initrd (hd0,%(install_partition)s)/boot/release/%(grml_flavour)s/initrd.gz title Memory test (memtest86+) @@ -453,7 +453,7 @@ title FreeDOS kernel (hd0,%(install_partition)s)/boot/addons/memdisk initrd (hd0,%(install_partition)s)/boot/addons/balder10.imz -title MirBSD +title MirOS BSD kernel (hd0,%(install_partition)s)/boot/addons/bsd4grml/ldbsd.com """ % {'grml_flavour': grml_flavour, 'local_datestamp': local_datestamp, @@ -532,6 +532,11 @@ LABEL bsd MENU LABEL bsd KERNEL /boot/addons/bsd4grml/ldbsd.com +# hardware detection tool +MENU LABEL hdt +KERNEL /boot/addons/hdt.c32 +APPEND pciids=/boot/addons/pci.ids + ## end of global configuration """ % {'grml_flavour': grml_flavour, 'local_datestamp': local_datestamp, 'bootoptions': bootoptions} ) @@ -606,7 +611,10 @@ def install_grub(device): "--root-directory=%s" % device_mountpoint, device], stdout=file(os.devnull, "r+")) proc.wait() if proc.returncode != 0: - raise Exception("error executing grub-install") + # raise Exception("error executing grub-install") + logging.critical("Fatal: error executing grub-install (please check FAQ)" % error) + cleanup() + sys.exit(1) except CriticalException, error: logging.critical("Fatal: %s" % error) cleanup() @@ -869,7 +877,7 @@ def unmount(target, unmount_options): # make sure we unmount only already mounted targets target_unmount = False mounts = open('/proc/mounts').readlines() - mountstring = re.compile(".*%s.*" % re.escape(target)) + mountstring = re.compile(".*%s.*" % re.escape(os.path.realpath(target))) for line in mounts: if re.match(mountstring, line): target_unmount = True @@ -951,6 +959,7 @@ def copy_system_files(grml_flavour, iso_mount, target): squashfs = search_file(grml_flavour + '.squashfs', iso_mount) if squashfs is None: logging.critical("Fatal: squashfs file not found") + raise CriticalException("error locating squashfs file") else: squashfs_target = target + '/live/' + grml_flavour + '/' execute(mkdir, squashfs_target) @@ -1041,7 +1050,7 @@ def copy_addons(iso_mount, target): # grub all-in-one image allinoneimg = search_file('allinone.img', iso_mount) if allinoneimg is None: - logging.warn("Warning: allinone.img not found (that's fine if you don't need it") + logging.warn("Warning: allinone.img not found (that's fine if you don't need it)") else: logging.debug("cp %s %s" % (allinoneimg, addons + '/allinone.img')) proc = subprocess.Popen(["cp", allinoneimg, addons + 'allinone.img']) @@ -1050,7 +1059,7 @@ def copy_addons(iso_mount, target): # bsd imag bsdimg = search_file('bsd4grml', iso_mount) if bsdimg is None: - logging.warn("Warning: bsd4grml not found (that's fine if you don't need it") + logging.warn("Warning: bsd4grml not found (that's fine if you don't need it)") else: logging.debug("cp -a %s %s" % (bsdimg, addons + '/')) proc = subprocess.Popen(["cp", "-a", bsdimg, addons + '/']) @@ -1059,16 +1068,32 @@ def copy_addons(iso_mount, target): # freedos image balderimg = search_file('balder10.imz', iso_mount) if balderimg is None: - logging.warn("Warning: balder10.imz not found (that's fine if you don't need it") + logging.warn("Warning: balder10.imz not found (that's fine if you don't need it)") else: logging.debug("cp %s %s" % (balderimg, addons + '/balder10.imz')) proc = subprocess.Popen(["cp", balderimg, addons + 'balder10.imz']) proc.wait() + # install hdt and pci.ids only when using syslinux (grub doesn't support it) + if options.syslinux: + # hdt (hardware detection tool) image + hdtimg = search_file('hdt.c32', iso_mount) + if hdtimg: + logging.debug("cp %s %s" % (hdtimg, addons + '/hdt.c32')) + proc = subprocess.Popen(["cp", hdtimg, addons + '/hdt.c32']) + proc.wait() + + # pci.ids file + picids = search_file('pci.ids', iso_mount) + if picids: + logging.debug("cp %s %s" % (picids, addons + '/pci.ids')) + proc = subprocess.Popen(["cp", picids, addons + '/pci.ids']) + proc.wait() + # memdisk image memdiskimg = search_file('memdisk', iso_mount) if memdiskimg is None: - logging.warn("Warning: memdisk not found (that's fine if you don't need it") + logging.warn("Warning: memdisk not found (that's fine if you don't need it)") else: logging.debug("cp %s %s" % (memdiskimg, addons + '/memdisk')) proc = subprocess.Popen(["cp", memdiskimg, addons + 'memdisk']) @@ -1077,7 +1102,7 @@ def copy_addons(iso_mount, target): # memtest86+ image memtestimg = search_file('memtest', iso_mount) if memtestimg is None: - logging.warn("Warning: memtest not found (that's fine if you don't need it") + logging.warn("Warning: memtest not found (that's fine if you don't need it)") else: logging.debug("cp %s %s" % (memtestimg, addons + '/memtest')) proc = subprocess.Popen(["cp", memtestimg, addons + 'memtest']) @@ -1149,8 +1174,12 @@ def install_iso_files(grml_flavour, iso_mount, device, target): return 0 elif not options.bootloaderonly: logging.info("Copying files. This might take a while....") - copy_system_files(grml_flavour, iso_mount, target) - copy_grml_files(iso_mount, target) + try: + copy_system_files(grml_flavour, iso_mount, target) + copy_grml_files(iso_mount, target) + except CriticalException, error: + logging.critical("Execution failed: %s", error) + sys.exit(1) if not options.skipaddons: if grml_flavour.endswith('-small'): @@ -1562,6 +1591,9 @@ def handle_compat_warning(device): def handle_logging(): """Log handling and configuration""" + if options.verbose and options.quiet: + parser.error("please use either verbose (--verbose) or quiet (--quiet) option") + if options.verbose: FORMAT = "Debug: %(asctime)-15s %(message)s" logging.basicConfig(level=logging.DEBUG, format=FORMAT) @@ -1603,6 +1635,8 @@ def main(): # make sure we have the appropriate permissions check_uid_root() + logging.info("Executing grml2usb version %s", PROG_VERSION) + if options.dryrun: logging.info("Running in simulation mode as requested via option dry-run.")