[elbe-devel] [PATCH] hdimg: Allow additional arguments for grub-install

Bastian Germann bage at linutronix.de
Thu Sep 8 15:03:44 CEST 2022


There might be use cases where grub-install needs additional arguments to
the ones that are currently used. Replace the erroneous schema documentation
to reflect this possibility and implement it in the actual grub-install calls.
The additional arguments are prepended to Elbe's so that they are overridden
by Elbe if duplicate arguments are supplied.

Extend one example to make use of the new feature.
While at it, fix too deep indentation.

Signed-off-by: Bastian Germann <bage at linutronix.de>
---
 elbepack/hdimg.py                             | 20 +++++++++----------
 .../x86_32-pc-hdimg-minimal-grub-buster.xml   |  6 +++---
 schema/dbsfed.xsd                             |  8 ++++----
 3 files changed, 17 insertions(+), 17 deletions(-)

diff --git a/elbepack/hdimg.py b/elbepack/hdimg.py
index ebc4931d5c..ab2c9c324c 100644
--- a/elbepack/hdimg.py
+++ b/elbepack/hdimg.py
@@ -151,7 +151,7 @@ class grubinstaller_base:
     def add_fs_entry(self, entry):
         self.fs[entry.mountpoint] = entry
 
-    def install(self, target):
+    def install(self, target, user_args):
         pass
 
     @staticmethod
@@ -162,7 +162,7 @@ class grubinstaller_base:
 
 class grubinstaller202(grubinstaller_base):
 
-    def install(self, target):
+    def install(self, target, user_args):
         if '/' not in self.fs:
             return
 
@@ -194,9 +194,9 @@ class grubinstaller202(grubinstaller_base):
 
             if "efi" in self.fw_type:
                 grub_tgt = next(t for t in self.fw_type if t.endswith("-efi"))
-                do("chroot %s grub-install --target=%s --removable "
+                do("chroot %s grub-install %s --target=%s --removable "
                    "--no-floppy %s" %
-                   (imagemnt, grub_tgt, poopdev))
+                   (imagemnt, user_args, grub_tgt, poopdev))
             if "shimfix" in self.fw_type:
                 # grub-install is heavily dependent on the running system having
                 # a BIOS or EFI.  The initvm is BIOS-based, so fix the resulting
@@ -207,8 +207,8 @@ class grubinstaller202(grubinstaller_base):
                    "${f[0]} /boot/efi/EFI/debian/${f[0]%%.signed}'"  %
                    imagemnt)
             if not self.fw_type or "bios" in self.fw_type:
-                do("chroot %s grub-install --target=i386-pc --no-floppy %s" %
-                   (imagemnt, poopdev))
+                do("chroot %s grub-install %s --target=i386-pc --no-floppy %s" %
+                   (imagemnt, user_args, poopdev))
 
         except CommandError as E:
             logging.error("Fail installing grub device: %s", E)
@@ -229,7 +229,7 @@ class grubinstaller202(grubinstaller_base):
 
 class grubinstaller97(grubinstaller_base):
 
-    def install(self, target):
+    def install(self, target, user_args):
         if '/' not in self.fs:
             return
 
@@ -279,8 +279,8 @@ class grubinstaller97(grubinstaller_base):
 
             chroot(imagemnt, "update-grub")
 
-            do("chroot %s grub-install --no-floppy %s" %
-               (imagemnt, poopdev))
+            do("chroot %s grub-install %s --no-floppy %s" %
+               (imagemnt, user_args, poopdev))
 
         except CommandError as E:
             logging.error("Fail installing grub device: %s", E)
@@ -497,7 +497,7 @@ def do_image_hd(hd, fslabel, target, grub_version, grub_fw_type=None):
     disk.commit()
 
     if hd.has("grub-install") and grub_version:
-        grub.install(target)
+        grub.install(target, hd.text("grub-install"))
 
     return hd.text("name")
 
diff --git a/examples/x86_32-pc-hdimg-minimal-grub-buster.xml b/examples/x86_32-pc-hdimg-minimal-grub-buster.xml
index 38c3635de4..6d907db556 100644
--- a/examples/x86_32-pc-hdimg-minimal-grub-buster.xml
+++ b/examples/x86_32-pc-hdimg-minimal-grub-buster.xml
@@ -24,10 +24,10 @@ SPDX-FileCopyrightText: Linutronix GmbH
 			<msdoshd>
 				<name>sda.img</name>
 				<size>1900MiB</size>
-				<grub-install/>
+				<grub-install>--compress=xz</grub-install>
 				<partition>
-								<size>remain</size>
-								<label>rfs</label>
+					<size>remain</size>
+					<label>rfs</label>
 				</partition>
 			</msdoshd>
 		</images>
diff --git a/schema/dbsfed.xsd b/schema/dbsfed.xsd
index 83f20cda4d..dec99f440c 100644
--- a/schema/dbsfed.xsd
+++ b/schema/dbsfed.xsd
@@ -1408,8 +1408,8 @@ SPDX-FileCopyrightText: Linutronix GmbH
       <element name="grub-install" type="rfs:string" minOccurs="0" maxOccurs="1">
         <annotation>
           <documentation>
-            human readable name of the harddisk, this will be used as name for
-            the image file
+            Installs grub on this harddisk. The text content will be used as
+            additional command line arguments to Elbe's grub-install call.
           </documentation>
         </annotation>
       </element>
@@ -1489,8 +1489,8 @@ SPDX-FileCopyrightText: Linutronix GmbH
       <element name="grub-install" type="rfs:string" minOccurs="0" maxOccurs="1">
         <annotation>
           <documentation>
-            human readable name of the harddisk, this will be used as name for
-            the image file
+            Installs grub on this harddisk. The text content will be used as
+            additional command line arguments to Elbe's grub-install call.
           </documentation>
         </annotation>
       </element>
-- 
2.30.2



More information about the elbe-devel mailing list