From 2163d31ec126ab47af5fd12a2b8ad04ceb0b72b6 Mon Sep 17 00:00:00 2001 From: Chris Hofstaedtler Date: Sun, 24 Nov 2024 06:00:44 +0100 Subject: [PATCH 1/5] grml2usb: migrate from optparse to argparse optparse has been deprecated some time ago. --- grml2usb | 155 +++++++++++++++++++++++++++---------------------------- 1 file changed, 75 insertions(+), 80 deletions(-) diff --git a/grml2usb b/grml2usb index a3ab155..ce198f2 100755 --- a/grml2usb +++ b/grml2usb @@ -13,7 +13,7 @@ This script installs a Grml system (either a running system or ISO[s]) to a USB """ - +import argparse import fileinput import glob import logging @@ -26,7 +26,6 @@ import sys import tempfile import uuid from inspect import isclass, isroutine -from optparse import OptionParser # The line following this line is patched by debian/rules and tarball.sh. PROG_VERSION = "***UNKNOWN***" @@ -64,181 +63,185 @@ RE_P_PARTITION = re.compile(r"(.*?\d+)p(\d+)$") RE_LOOP_DEVICE = re.compile(r"/dev/loop\d+$") -def syslinux_warning(option, opt, _value, opt_parser): - """A helper function for printing a warning about deprecated option""" - # pylint: disable-msg=W0613 - sys.stderr.write( - "Note: the --syslinux option is deprecated as syslinux " - "is grml2usb's default. Continuing anyway.\n" - ) - setattr(opt_parser.values, option.dest, True) - - -# if grub option is set, unset syslinux option -def grub_option(option, opt, _value, opt_parser): - """A helper function adjusting other option values""" - # pylint: disable-msg=W0613 - setattr(opt_parser.values, option.dest, True) - setattr(opt_parser.values, "syslinux", False) +class SyslinuxWarningAction(argparse.Action): + def __call__(self, parser, namespace, values, option_string=None): + del values + del option_string + sys.stderr.write( + "Note: the --syslinux option is deprecated as syslinux " + "is grml2usb's default. Continuing anyway.\n" + ) + namespace.syslinux = True # cmdline parsing -USAGE = "Usage: %prog [options] <[ISO[s] | /run/live/medium]> \n\ +USAGE = "Usage: %(prog)s [options] <[ISO[s] | /run/live/medium]> \n\ \n\ -%prog installs Grml ISO[s] to an USB device to be able to boot from it.\n\ +%(prog)s installs Grml ISO[s] to an USB device to be able to boot from it.\n\ Make sure you have at least one Grml ISO or a running Grml system (/run/live/medium),\n\ grub or syslinux and root access.\n\ \n\ -Run %prog --help for usage hints, further information via: man grml2usb" +Run %(prog)s --help for usage hints, further information via: man grml2usb" # pylint: disable-msg=C0103 # pylint: disable-msg=W0603 -parser = OptionParser(usage=USAGE) -parser.add_option( +parser = argparse.ArgumentParser(usage=USAGE) +bootloader_group = parser.add_mutually_exclusive_group() + +parser.add_argument( "--bootoptions", - dest="bootoptions", action="append", - type="string", + type=str, help="use specified bootoptions as default", ) -parser.add_option( +parser.add_argument( "--bootloader-only", dest="bootloaderonly", action="store_true", help="do not copy files but just install a bootloader", ) -parser.add_option( +parser.add_argument( "--copy-only", dest="copyonly", action="store_true", help="copy files only but do not install bootloader", ) -parser.add_option( +parser.add_argument( "--dry-run", dest="dryrun", action="store_true", help="avoid executing commands" ) -parser.add_option( +parser.add_argument( "--fat16", - dest="fat16", action="store_true", help="format specified partition with FAT16", ) -parser.add_option( +parser.add_argument( "--force", - dest="force", action="store_true", help="force any actions requiring manual interaction", ) -parser.add_option( - "--grub", - dest="grub", - action="callback", - callback=grub_option, - help="install grub bootloader instead of (default) syslinux", -) -parser.add_option( +parser.add_argument( "--grub-mbr", dest="grubmbr", action="store_true", help="install grub into MBR instead of (default) PBR", ) -parser.add_option( +parser.add_argument( "--mbr-menu", dest="mbrmenu", action="store_true", help="enable interactive boot menu in MBR", ) -parser.add_option( +parser.add_argument( "--quiet", - dest="quiet", action="store_true", help="do not output anything but just errors on console", ) -parser.add_option( +parser.add_argument( "--remove-bootoption", dest="removeoption", action="append", help="regex for removing existing bootoptions", ) -parser.add_option( +parser.add_argument( "--rw-blockdev", dest="rwblockdev", action="store_true", help="enforce read-write mode on involved block devices", ) -parser.add_option( +parser.add_argument( "--skip-addons", dest="skipaddons", action="store_true", help="do not install /boot/addons/ files", ) -parser.add_option( +parser.add_argument( "--skip-bootflag", dest="skipbootflag", action="store_true", help="do not try to check whether the destination has the boot flag set", ) -parser.add_option( +parser.add_argument( "--skip-grub-config", dest="skipgrubconfig", action="store_true", help="skip generation of grub configuration files", ) -parser.add_option( +parser.add_argument( "--skip-mbr", dest="skipmbr", action="store_true", help="do not install a master boot record (MBR) on the device", ) -parser.add_option( +parser.add_argument( "--skip-syslinux-config", dest="skipsyslinuxconfig", action="store_true", help="skip generation of syslinux configuration files", ) -parser.add_option( +parser.add_argument( "--skip-usb-check", dest="skipusbcheck", action="store_true", help="skip check to verify whether given device is removable", ) -parser.add_option( - "--syslinux", - dest="syslinux", - action="callback", - default=True, - callback=syslinux_warning, - help="install syslinux bootloader (deprecated as it's the default)", -) -parser.add_option( +parser.add_argument( "--syslinux-mbr", dest="syslinuxmbr", action="store_true", help="install syslinux master boot record (MBR) instead of default", ) -parser.add_option( +parser.add_argument( "--syslinux-libs", dest="syslinuxlibs", action="append", default=[], help="syslinux modules directory path", ) -parser.add_option( +parser.add_argument( "--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_argument( + "--verbose", + action="store_true", + help="enable verbose mode", ) -parser.add_option( - "-v", +parser.add_argument( "--version", - dest="version", - action="store_true", + "-v", + action="version", + version=f"%(prog)s {PROG_VERSION}", help="display version and exit", ) -(options, args) = parser.parse_args() + +bootloader_group.add_argument( + "--grub", + action="store_true", + help="install grub bootloader instead of (default) syslinux", +) +bootloader_group.add_argument( + "--syslinux", + dest="syslinux", + default=True, + action=SyslinuxWarningAction, + nargs=0, + help="install syslinux bootloader (deprecated)", +) + +parser.add_argument( + "isos", + nargs="+", + help="ISOs to install", +) +parser.add_argument( + "device", + nargs=1, + help="Partition on USB Device to install on", +) + +if __name__ == "__main__": + options = parser.parse_args() GRML2USB_BASE = "/usr/share/grml2usb" @@ -2026,13 +2029,6 @@ def main(): """Main invocation""" try: - if options.version: - print(os.path.basename(sys.argv[0]) + " " + PROG_VERSION) - sys.exit(0) - - if len(args) < 2: - parser.error("invalid usage") - # log handling handle_logging() @@ -2051,8 +2047,7 @@ def main(): check_programs() # specified arguments - device = os.path.realpath(args[len(args) - 1]) - isos = args[0 : len(args) - 1] + device = os.path.realpath(options.device) if not os.path.isdir(device): if device[-1:].isdigit(): @@ -2071,7 +2066,7 @@ def main(): handle_vfat(device) # main operation (like installing files) - for iso in isos: + for iso in options.isos: install(iso, device) # install mbr From 966c17bde3c80503d924b520be4195d856294d5e Mon Sep 17 00:00:00 2001 From: Chris Hofstaedtler Date: Sun, 24 Nov 2024 07:22:17 +0100 Subject: [PATCH 2/5] grml2usb: fix missed execution of function --- grml2usb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/grml2usb b/grml2usb index ce198f2..c86e104 100755 --- a/grml2usb +++ b/grml2usb @@ -292,7 +292,7 @@ def cleanup(): shutil.rmtree(tmppath, onerror=del_failed) logging.debug("temporary directory %s deleted" % tmppath) unregister_tmpfile(tmppath) - elif os.path.isfile: + elif os.path.isfile(tmppath): os.unlink(tmppath) logging.debug("temporary file %s deleted" % tmppath) unregister_tmpfile(tmppath) From a29b82684adf149308ff481b75290bcc62ee1ae1 Mon Sep 17 00:00:00 2001 From: Chris Hofstaedtler Date: Sun, 24 Nov 2024 07:45:34 +0100 Subject: [PATCH 3/5] grml2usb: remove upgrade path from 15 years ago I think there was enough time to migrate habits. --- grml2usb | 23 ----------------------- 1 file changed, 23 deletions(-) diff --git a/grml2usb b/grml2usb index c86e104..af998fb 100755 --- a/grml2usb +++ b/grml2usb @@ -1923,26 +1923,6 @@ def handle_vfat(device): sys.exit(1) -def handle_compat_warning(device): - """Backwards compatible checks - - @device: device that should be checked""" - - # make sure we can replace old grml2usb script and warn user when using old way of life: - if ( - device.startswith("/mnt/external") - or device.startswith("/mnt/usb") - and not options.force - ): - print("Warning: the semantics of grml2usb has changed.") - print("Instead of using grml2usb /path/to/iso %s you might" % device) - print("want to use grml2usb /path/to/iso /dev/... instead.") - print("Please check out the grml2usb manpage for details.") - f = input("Do you really want to continue? y/N ") - if f.lower() != "y": - sys.exit(1) - - def handle_logging(): """Log handling and configuration""" @@ -2056,9 +2036,6 @@ def main(): "Warning: installing on partition number >4, booting *might* fail depending on your system." ) - # provide upgrade path - handle_compat_warning(device) - if not options.skipbootflag: check_boot_flag(device) From d3339d2db628bab9325ec97749f01f7124b44594 Mon Sep 17 00:00:00 2001 From: Chris Hofstaedtler Date: Sun, 24 Nov 2024 07:47:23 +0100 Subject: [PATCH 4/5] doc: remove isohybrid hint Not needed since forever. --- grml2usb.8.txt | 8 -------- 1 file changed, 8 deletions(-) diff --git a/grml2usb.8.txt b/grml2usb.8.txt index ec8a197..a30eb1b 100644 --- a/grml2usb.8.txt +++ b/grml2usb.8.txt @@ -385,14 +385,6 @@ Well, you can. :) Starting with Grml 2009.10 the ISOs are dd-able straight out-o Note that ANY existing data on your USB device will be destroyed when using the dd approach. -/////////////////////////////////////////////////////////////////////////////////////////////////// -Grab a recent Grml ISO and use -link:http://syslinux.zytor.com/wiki/index.php/Doc/isolinux#HYBRID_CD-ROM.2FHARD_DISK_MODE[isohybrid -from the syslinux project]: - - % isohybrid grml64-small_2018.12.iso -/////////////////////////////////////////////////////////////////////////////////////////////////// - This allows you to dd the Grml ISO to your USB device (use for example link:http://www.chrysocome.net/rawwrite[rawwrite] if you've just a Windows system available) running: From 90c9d99a2e97218ff060359296cc057e8e473fd4 Mon Sep 17 00:00:00 2001 From: Chris Hofstaedtler Date: Sun, 24 Nov 2024 07:22:17 +0100 Subject: [PATCH 5/5] Drop support for installing grub as bootloader Config continues to be copied, of course. This is a first step to having a single configuration for legacy boot, and that will be syslinux. --- debian/control | 2 - grml2usb | 178 +++++-------------------------------------------- grml2usb.8.txt | 111 ++---------------------------- 3 files changed, 19 insertions(+), 272 deletions(-) diff --git a/debian/control b/debian/control index eeb1f8e..d5fcfa9 100644 --- a/debian/control +++ b/debian/control @@ -27,13 +27,11 @@ Depends: python3, python3-parted, rsync, - syslinux | grub-efi-amd64-signed | grub-pc-bin | grub-efi-arm64-bin | grub-common, syslinux | grub-common, ${misc:Depends}, ${shlibs:Depends}, Recommends: isolinux (>= 3:6.03+dfsg-5+deb8u1~), - syslinux, syslinux-utils, xorriso | genisoimage, Description: install Grml system / ISO to USB device diff --git a/grml2usb b/grml2usb index af998fb..9eaf698 100755 --- a/grml2usb +++ b/grml2usb @@ -56,37 +56,24 @@ SYSLINUX_LIBS = [ "/usr/lib/syslinux/modules/bios/", # Debian "/usr/lib/syslinux/bios/", # Arch Linux ] -GRUB_INSTALL = None RE_PARTITION = re.compile(r"([a-z/]*?)(\d+)$") RE_P_PARTITION = re.compile(r"(.*?\d+)p(\d+)$") RE_LOOP_DEVICE = re.compile(r"/dev/loop\d+$") -class SyslinuxWarningAction(argparse.Action): - def __call__(self, parser, namespace, values, option_string=None): - del values - del option_string - sys.stderr.write( - "Note: the --syslinux option is deprecated as syslinux " - "is grml2usb's default. Continuing anyway.\n" - ) - namespace.syslinux = True - - # cmdline parsing USAGE = "Usage: %(prog)s [options] <[ISO[s] | /run/live/medium]> \n\ \n\ %(prog)s installs Grml ISO[s] to an USB device to be able to boot from it.\n\ Make sure you have at least one Grml ISO or a running Grml system (/run/live/medium),\n\ -grub or syslinux and root access.\n\ +syslinux and root access.\n\ \n\ Run %(prog)s --help for usage hints, further information via: man grml2usb" # pylint: disable-msg=C0103 # pylint: disable-msg=W0603 parser = argparse.ArgumentParser(usage=USAGE) -bootloader_group = parser.add_mutually_exclusive_group() parser.add_argument( "--bootoptions", @@ -119,12 +106,6 @@ parser.add_argument( action="store_true", help="force any actions requiring manual interaction", ) -parser.add_argument( - "--grub-mbr", - dest="grubmbr", - action="store_true", - help="install grub into MBR instead of (default) PBR", -) parser.add_argument( "--mbr-menu", dest="mbrmenu", @@ -215,20 +196,6 @@ parser.add_argument( help="display version and exit", ) -bootloader_group.add_argument( - "--grub", - action="store_true", - help="install grub bootloader instead of (default) syslinux", -) -bootloader_group.add_argument( - "--syslinux", - dest="syslinux", - default=True, - action=SyslinuxWarningAction, - nargs=0, - help="install syslinux bootloader (deprecated)", -) - parser.add_argument( "isos", nargs="+", @@ -583,79 +550,6 @@ menu end } -def install_grub(device): - """Install grub on specified device. - - @mntpoint: mountpoint of device where grub should install its files to - @device: partition where grub should be installed to""" - - if options.dryrun: - logging.info( - "Would execute grub-install [--root-directory=mount_point] %s now.", device - ) - else: - device_mountpoint = tempfile.mkdtemp(prefix="grml2usb") - register_tmpfile(device_mountpoint) - try: - # If using --grub-mbr then make sure we install grub in MBR instead of PBR - if options.grubmbr: - logging.debug("Using option --grub-mbr ...") - grub_device, x = get_device_from_partition(device) - else: - grub_device = device - - set_rw(device) - mount(device, device_mountpoint, "") - - logging.info("Installing grub as bootloader") - for opt in ["--", "--force"]: - set_rw(device) - set_rw(grub_device) - logging.debug( - "%s --recheck --no-floppy --target=i386-pc --root-directory=%s %s %s", - GRUB_INSTALL, - device_mountpoint, - opt, - grub_device, - ) - proc = subprocess.Popen( - [ - GRUB_INSTALL, - "--recheck", - "--no-floppy", - "--target=i386-pc", - "--root-directory=%s" % device_mountpoint, - opt, - grub_device, - ], - stdout=open(os.devnull, "r+"), - ) - proc.wait() - if proc.returncode == 0: - break - - if proc.returncode != 0: - # raise Exception("error executing grub-install") - logging.critical( - "Fatal: error executing grub-install " - "(please check the grml2usb FAQ or drop the --grub option)" - ) - logging.critical( - "Note: if using grub2 consider using " - "the --grub-mbr option as grub considers PBR problematic." - ) - cleanup() - sys.exit(1) - except CriticalException as error: - logging.critical("Fatal: %s", error) - cleanup() - sys.exit(1) - finally: - unmount(device_mountpoint, "") - os.rmdir(device_mountpoint) - unregister_tmpfile(device_mountpoint) - - def install_syslinux(device): """Install syslinux on specified device. @@ -674,32 +568,10 @@ def install_syslinux(device): proc.wait() if proc.returncode != 0: raise CriticalException( - "Error executing syslinux (either try --fat16 or use grub?)" + "Error executing syslinux (try --fat16?)" ) -def install_bootloader(device): - """Install bootloader on specified device. - - @device: partition where bootloader should be installed to""" - - # by default we use grub, so install syslinux only on request - if options.grub: - try: - install_grub(device) - except CriticalException as error: - logging.critical("Fatal: %s", error) - cleanup() - sys.exit(1) - else: - try: - install_syslinux(device) - except CriticalException as error: - logging.critical("Fatal: %s", error) - cleanup() - sys.exit(1) - - def install_mbr(mbrtemplate, device, partition, ismirbsdmbr=True): """install 'mbr' master boot record (MBR) on a device @@ -1896,7 +1768,7 @@ def handle_vfat(device): sys.exit(1) # check for vfat filesystem - if device is not None and not os.path.isdir(device) and options.syslinux: + if device is not None and not os.path.isdir(device): try: check_for_fat(device) except CriticalException as error: @@ -1952,40 +1824,22 @@ def handle_bootloader(device): elif os.path.isdir(device): logging.info("Not installing bootloader as %s is a directory.", device) else: - install_bootloader(device) - - -def check_options(opts): - """Check compatibility of provided user opts - - @opts option dict from OptionParser - """ - if opts.grubmbr and not opts.grub: - raise CriticalException("--grub-mbr requires --grub option.") - - if opts.copyonly and opts.grub: - raise CriticalException("Cannot use --copy-only and --grub at the same time.") + try: + install_syslinux(device) + except CriticalException as error: + logging.critical("Fatal: %s", error) + cleanup() + sys.exit(1) def check_programs(): """check if all needed programs are installed""" - if options.grub: - global GRUB_INSTALL - GRUB_INSTALL = which("grub-install") or which("grub2-install") - if not GRUB_INSTALL: - logging.critical( - "Fatal: grub-install not available (please install the " - "grub package or drop the --grub option)" - ) - sys.exit(1) - - if options.syslinux: - if not which("syslinux"): - logging.critical( - "Fatal: syslinux not available (please install the " - "syslinux package or use the --grub option)" - ) - sys.exit(1) + if not which("syslinux"): + logging.critical( + "Fatal: syslinux not available (please install the " + "syslinux package or use the --grub option)" + ) + sys.exit(1) if not which("rsync"): logging.critical("Fatal: rsync not available, can not continue - sorry.") @@ -2015,8 +1869,6 @@ def main(): # make sure we have the appropriate permissions check_uid_root() - check_options(options) - load_loop() logging.info("Executing grml2usb version %s", PROG_VERSION) diff --git a/grml2usb.8.txt b/grml2usb.8.txt index a30eb1b..769eec9 100644 --- a/grml2usb.8.txt +++ b/grml2usb.8.txt @@ -77,16 +77,6 @@ Format specified partition with FAT16. Force any (possible dangerous) actions requiring manual interaction (like --fat16). - *\--grub*:: - -Install grub bootloader instead of (default) syslinux. - - *\--grub-mbr*:: - -Install grub into MBR (Master Boot Record) instead of PBR (Partition Boot -Record). Check out <> for further details. - *\--help*:: Display usage information and exit. @@ -156,13 +146,6 @@ Skip check to verify whether given device is a removable device. Some USB devices are known to report wrong information, when using such a device you can skip grml2usb's removable device check. - *\--syslinux*:: - -This option is deprecated and is being left only for backwards compatibility -reasons. Syslinux is the default bootloader of grml2usb and therefore the -'--syslinux' option doesn't have any effects. If you do not want to use syslinux -as bootloader consider using the '--grub' option. - *\--syslinux-mbr*:: Install syslinux' master boot record (MBR, which is booting from the partition @@ -343,8 +326,7 @@ root=..., consider using root=UUID=.... *Error message*:: Could not find kernel image: ... *Reason*:: either a broken isolinux/syslinux version or a broken BIOS. Check out -whether the vendor provides a BIOS update or if using bootloader grub instead of -isolinux/syslinux fixes the problem. +whether the vendor provides a BIOS update. [[faq]] Frequently Asked Questions (FAQ) @@ -402,8 +384,7 @@ What's the difference between grml2usb and just using dd? grml2usb does not remove any data from your USB device and does not alter the partition table at all. grml2usb provides multi-ISO support, support for adding -default bootoptions and selecting the bootloader (syslinux vs. grub) without -having to manually touch the ISO at all. +default bootoptions without having to manually touch the ISO at all. [[grml2iso]] What's grml2iso? @@ -422,83 +403,6 @@ Providing both files allows grml2usb to install grub on the target device no matter which grub version is available on the host where grml2usb is executed on. -[[stage1]] -grub-install fails with 'The file ../boot/grub/stage1 not read correctly"?! -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -Check whether the partition has the right partition type. For example do NOT use -FAT16 (partition type 6) when using a ext3 filesystem on the partition but -instead use the correct partition type ('83' - Linux) then. - -[[grub-install-xfs_freeze]] -grub-install complains about /sbin/grub-install and/or xfs_freeze?! -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -The following message: - - You shouldn't call /sbin/grub-install. Please call /usr/sbin/grub-install instead! - xfs_freeze: specified file ["/tmp/tmpqaBK6z/boot/grub"] is not on an XFS filesystem - -This is "normal". grub-install sends those messages to stderr. To avoid hiding any -possible real error messages grml2usb doesn't ignore those messages. - -[[device-map]] -grub-install complains about /boot/grub/device.map?! -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -The following message: - - grub-probe: error: Cannot open `/boot/grub/device.map' - -This is "normal" (at least with grub1). This isn't a problem, because the -device.map file will be generated on the target device anyway. - -[[unary-operator]] -grub-install complains about a unary operator?! -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -The following message: - - '/usr/sbin/grub-install: line 374: [: =: unary operator expected' - -This is "normal". Just ignore it. (It usually doesn't appear -on the second invocation on the same device.) - -[[unknown-filesystem]] -grub-install fails with grub-probe: error: unknown filesystem?! -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -The following message: - - grub-probe: error: unknown filesystem - Auto-detection of a filesystem module failed. - Please specify the module with the option `--modules' explicitly. - -usually means that the device partition table says something else than the -filesystem on the device. For example using FAT16 as filesystem type and -using FAT32 as filesystem on the partition will not work. Either set filesystem -type to FAT32 or format the partition using FAT16. It is essential that -device partition table and filesystem use the same filesystem type. - -[[mbr-vs-pbr]] -grub-setup fails after Attempting to install GRUB to a partition instead of the MBR?! -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -The following message: - - grub-setup: warn: Attempting to install GRUB to a partition instead of the MBR. This is a BAD idea. - grub-setup: warn: Embedding is not possible. GRUB can only be installed in this setup by using blocklists. However, blocklists are UNRELIABLE and its use is discouraged. - grub-setup: error: Cannot read `/grub/core.img' correctly - -appears when using grub2 versions older than 1.98 as those version introduced a -regression which avoids that grub is being installed into a partition (PBR, -Partition Boot Record) instead of MBR (Master Boot Record). - -To work around this issue you can either 1) upgrade to grub versions >=1.98, 2) -install grub into the MBR (Master Boot Record) using the '--grub-mbr' option of -grml2usb or 3) switch to syslinux as bootmanager (just drop the '--grub' -option). - [[splash-xpm]] I'm getting something like "Error: /usr/share/grml2usb/grub/splash.xpm.gz can not be read"!? ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -515,8 +419,7 @@ Why do I have to use a FAT16/FAT32 filesystem? Syslinux (currently) does not support any other filesystems besides FAT16/FAT32 (though that's a sane default if you want to share your files with other -(operating) systems). If you want to use a different filesystem (like ext2/3) -use the bootloader grub instead using grml2usb's '--grub' option. +(operating) systems). [NOTE] FAT32 is supported since syslinux version 3.0. @@ -559,7 +462,7 @@ Usage examples Install specified ISO on device /dev/sdX1. - # grml2usb /home/grml/grml64-full_2018.12.iso /home/grml/grml32-full_2018.12.iso /dev/sdX1 + # grml2usb /home/grml/grml64-full_2018.12.iso /home/grml/grml32-full_2018.12.iso /dev/sdX1 Install specified ISOs on device /dev/sdX1 for multibooting ISOs. @@ -577,12 +480,6 @@ ISO on device /dev/sdX1 for multibooting. Install specified ISO on device /dev/sdX1 and format partition /dev/sdX1 with FAT16 filesystem. - # grml2usb --grub --grub-mbr /home/grml/grml64-full_2018.12.iso /dev/sdX1 - -Install specified ISO on device /dev/sdX1 and use grub as bootloader (instead of -syslinux being the default) and install a master boot record (MBR) to the MBR of -/dev/sdX. - /////////////////////////////////////////////////////////////////////////////////////// # grml2usb --kernel=/boot/vmlinuz-2.6.28-grml --initrd=/boot/initrd.img-2.6.28-grml \ /home/grml/grml64-full_2018.12.iso /dev/sdX1