File grub2-s390x-set-hostonly.patch of Package grub2

From 2a86e5f9e3abb622d2e16ee5f05b1ba2df1f756d Mon Sep 17 00:00:00 2001
From: Gary Lin <glin@suse.com>
Date: Tue, 6 Aug 2024 14:46:17 +0800
Subject: [PATCH] zipl2grub.pl.in: add the switch for hostonly/no-hostonly

Since the kiwi build environment could be very different from the real
system environment, it may cause some problem to build the zipl initrd
with '--hostonly' since some critical files could be omitted
accidentally. To avoid the potential issues, this commit introduces a
variable, SUSE_S390_DRACUT_HOSTONLY, as the switch to use hostonly or
no-hostonly for the zipl initrd. By default, it's detected automatically
by tracing the root partition to the root block device. If the root
block device is a loop device, then it's likely to be a build
environment, and then '--no-hostonly' will be used to create the zipl
initrd.

Signed-off-by: Gary Lin <glin@suse.com>
---
 util/s390x/zipl2grub.pl.in | 26 +++++++++++++++++++++++++-
 1 file changed, 25 insertions(+), 1 deletion(-)

diff --git a/util/s390x/zipl2grub.pl.in b/util/s390x/zipl2grub.pl.in
index f4f997100..46b902209 100644
--- a/util/s390x/zipl2grub.pl.in
+++ b/util/s390x/zipl2grub.pl.in
@@ -15,6 +15,7 @@ my $zipldir = "";
 my $running = "";
 my $refresh = 1; # needs to default to "on" until most bugs are shaken out!
 my $force = 0;
+my $hostonly = 1;
 my $verbose = 0;
 my $debug = 0;
 my $miss = 0;
@@ -114,8 +115,13 @@ sub BootCopy($$$$) {
 }
 sub MkInitrd($$$) {
   my( $initrd, $dir, $version) = @_;
-  my @C = ( "dracut", "--hostonly", "--force");
+  my @C = ( "dracut", "--force");
   my $uuid;
+  if ($hostonly) {
+    push @C, "--hostonly";
+  } else {
+    push @C, "--no-hostonly";
+  }
   push @C, "--quiet" unless ($verbose > 1);
   if ( exists( $fsdev{"/boot"}) ) {
   chomp( $uuid = qx{grub2-probe --target=fs_uuid /boot});
@@ -368,6 +374,24 @@ foreach ("GRUB_EMU_CONMODE", "GRUB_CONMODE") {
   $C{$_} = "conmode=" . $C{$_};
 }
 
+if ( !exists( $C{SUSE_S390_DRACUT_HOSTONLY}) || $C{SUSE_S390_DRACUT_HOSTONLY} eq "auto" ) {
+  # Auto-detection mode
+  #
+  # Check if the root block device of the root partition is a loop device.
+  # If yes, it is the image building system, e.g. kiwi. Then, set 'hostonly' to 0.
+  my ( $dev, $lsblk );
+
+  chomp( $dev = qx{grub2-probe -t device /});
+  if ($dev) {
+    chomp( $lsblk = qx{lsblk -snrp -o NAME $dev});
+    $hostonly = 0 if ( $lsblk =~ m{\/loop} );
+  }
+} elsif ( $C{SUSE_S390_DRACUT_HOSTONLY} =~ m{^(no|false|0)$} ) {
+  $hostonly = 0;
+} else {
+  $hostonly = 1;
+}
+
 if ( $debug && $verbose > 2 ) {
   foreach ( sort( keys( %C)) ) {
     printf( "%s=\"%s\"\n", $_, $C{$_});
-- 
2.35.3

openSUSE Build Service is sponsored by