Option --rw-blockdev: set r/w also in GRUB specific steps
[grml2usb.git] / grml2usb
index 05067e4..e465ebe 100755 (executable)
--- a/grml2usb
+++ b/grml2usb
@@ -502,8 +502,6 @@ def install_grub(device):
         device_mountpoint = tempfile.mkdtemp(prefix="grml2usb")
         register_tmpfile(device_mountpoint)
         try:
-            mount(device, device_mountpoint, "")
-
             # If using --grub-mbr then make sure we install grub in MBR instead of PBR
             if options.grubmbr:
                 logging.debug("Using option --grub-mbr ...")
@@ -512,10 +510,12 @@ def install_grub(device):
                 grub_device = device
 
             set_rw(device)
-            set_rw(grub_device)
+            mount(device, device_mountpoint, "")
 
             logging.info("Installing grub as bootloader")
             for opt in ["", "--force"]:
+                set_rw(device)
+                set_rw(grub_device)
                 logging.debug("grub-install --recheck %s --no-floppy --root-directory=%s %s",
                               opt, device_mountpoint, grub_device)
                 proc = subprocess.Popen([GRUB_INSTALL, "--recheck", opt,
@@ -715,8 +715,6 @@ def mount(source, target, mount_options):
         logging.debug("Source %s is not a device, therefore not mounting.", source)
         return 0
 
-    set_rw(source)
-
     logging.debug("mount %s %s %s", mount_options, source, target)
     proc = subprocess.Popen(["mount"] + list(mount_options) + [source, target])
     proc.wait()
@@ -1030,6 +1028,9 @@ def copy_addons(iso_mount, target):
     # ipxe.lkrn
     handle_addon_copy('ipxe.lkrn', addons, iso_mount)
 
+    # netboot.xyz
+    handle_addon_copy('netboot.xyz.lkrn', addons, iso_mount)
+
 
 def build_loopbackcfg(target):
     """Generate GRUB's loopback.cfg based on existing config files.
@@ -1593,6 +1594,8 @@ def install_grml(mountpoint, device):
             check_for_fat(device)
             if not options.skipbootflag:
                 check_boot_flag(device)
+
+            set_rw(device)
             mount(device, device_mountpoint, ['-o', 'utf8,iocharset=iso8859-1'])
         except CriticalException as error:
             mount(device, device_mountpoint, "")
@@ -1840,8 +1843,7 @@ def main():
         if not os.path.isdir(device):
             if device[-1:].isdigit():
                 if int(device[-1:]) > 4 or device[-2:].isdigit():
-                    logging.critical("Fatal: installation on partition number >4 not supported. (BIOS won't support it.)")
-                    sys.exit(1)
+                    logging.warn("Warning: installing on partition number >4, booting *might* fail depending on your system.")
 
         # provide upgrade path
         handle_compat_warning(device)