85 lines
2.9 KiB
Diff
85 lines
2.9 KiB
Diff
|
---
|
||
|
util/s390x/zipl2grub.pl.in | 41 ++++++++++++++++++++++++++++-------------
|
||
|
1 file changed, 28 insertions(+), 13 deletions(-)
|
||
|
|
||
|
Index: grub-2.06/util/s390x/zipl2grub.pl.in
|
||
|
===================================================================
|
||
|
--- grub-2.06.orig/util/s390x/zipl2grub.pl.in
|
||
|
+++ grub-2.06/util/s390x/zipl2grub.pl.in
|
||
|
@@ -101,20 +101,22 @@ sub ManagePrev($$$){
|
||
|
}
|
||
|
return $ret;
|
||
|
}
|
||
|
-sub BootCopy($$$) {
|
||
|
- my( $file, $dir, $tgt) = @_;
|
||
|
+sub BootCopy($$$$) {
|
||
|
+ my( $src, $file, $dir, $tgt) = @_;
|
||
|
my $curr = "$dir/$tgt";
|
||
|
- Info(4, "Copy /boot/$file $dir $tgt\n");
|
||
|
+ $src = "/boot/$src" unless ( -r $src );
|
||
|
+ Info(4, "Copy $src $dir $tgt\n");
|
||
|
if ( $tgt eq "image" && ManagePrev( $file, $dir, $tgt)) {
|
||
|
ManagePrev( $file, $dir, "initrd")
|
||
|
}
|
||
|
- cp( "/boot/$file", "$dir/$file");
|
||
|
+ cp( $src, "$dir/$file");
|
||
|
ln( $file, $curr);
|
||
|
}
|
||
|
sub MkInitrd($$$) {
|
||
|
my( $initrd, $dir, $version) = @_;
|
||
|
my @C = ( "dracut", "--hostonly", "--force");
|
||
|
my $uuid;
|
||
|
+ push @C, "--quiet" unless ($verbose > 1);
|
||
|
if ( exists( $fsdev{"/boot"}) ) {
|
||
|
chomp( $uuid = qx{grub2-probe --target=fs_uuid /boot});
|
||
|
my ($dev, $type) = ($fsdev{"/boot"}, $fstype{"/boot"});
|
||
|
@@ -429,18 +431,31 @@ if ( ! -r $Image ) {
|
||
|
}
|
||
|
Panic( 1, "$C: kernel '$Image' not readable!?\n") unless (-r $Image);
|
||
|
|
||
|
-if ( -l $Image ) {
|
||
|
- $Image = readlink( $Image);
|
||
|
-}
|
||
|
-my ($image, $version) = ($Image =~ m{^(?:/boot/)?([^-]+-(.+))$});
|
||
|
-if ( !defined($image) || !defined($version) || ! -r "/boot/$image" ) {
|
||
|
- Panic( 1, "$C: weird $Image. This should never happen!\n");
|
||
|
+my ($image, $version) = ($Image, undef);
|
||
|
+while ( !defined( $version) ) {
|
||
|
+ my ($i, $vr, $f) = ($image =~ m{^(?:/boot/)?([^-/]+)-([^/]+)-([^-/]+)$});
|
||
|
+ Info( 4, "image='$image': ");
|
||
|
+ if ( defined($i) && defined($vr) && defined( $f) && -r "/boot/$i-$vr-$f" ) {
|
||
|
+ Info( 4, "matches pattern ('$vr'-'$f')\n");
|
||
|
+ $version = "$vr-$f";
|
||
|
+ last;
|
||
|
+ }
|
||
|
+ if ( -l $image ) {
|
||
|
+ Info( 4, "readlink...\n");
|
||
|
+ $image = readlink( $image);
|
||
|
+ next;
|
||
|
+ }
|
||
|
+ Info( 4, "last resort: get_kernel_version from original '$Image'...\n");
|
||
|
+ chomp( $version = qx{get_kernel_version $Image});
|
||
|
+ Panic( 1, "$C: failed to get kernel version for '$Image'!\n")
|
||
|
+ unless ( defined( $version) && $version );
|
||
|
}
|
||
|
my $initrd = "initrd-$version";
|
||
|
+$image = "image-$version";
|
||
|
|
||
|
if ( ! -r $ziplimage || ! -r $ziplinitrd || $refresh ) {
|
||
|
- BootCopy( $image, $zipldir, "image");
|
||
|
- BootCopy( $initrd, $zipldir, "initrd")
|
||
|
+ BootCopy( $Image, $image, $zipldir, "image");
|
||
|
+ BootCopy( $initrd, $initrd, $zipldir, "initrd")
|
||
|
if (-r "/boot/$initrd" && ! exists( $fsdev{"/boot"}));
|
||
|
}
|
||
|
if ( $refresh || ChkInitrd( $zipldir, "initrd") <= 0 ) {
|
||
|
@@ -463,7 +478,7 @@ if ( ! $debug ) {
|
||
|
}
|
||
|
|
||
|
# now: go for it!
|
||
|
-my @C = ( "/sbin/zipl", (($verbose) ? "-Vnc" : "-nc"), "$ziplconf" );
|
||
|
+my @C = ( "/sbin/zipl", (($verbose > 1) ? "-Vnc" : "-nc"), "$ziplconf" );
|
||
|
System( @C);
|
||
|
exit( $miss);
|
||
|
|