df62b2deb2
- Check/refresh zipl-kernel before hibernate on s390x. (bsc#940457) (Getting rid of hardcoded 'vmlinuz', which failed on PPC as well.) - Try to refresh zipl-kernel on failed kexec. (bsc#1127293) - Fully support "previous" zipl-kernel, with 'mem=1G' being available on dedicated entries. (bsc#928131) OBS-URL: https://build.opensuse.org/request/show/703735 OBS-URL: https://build.opensuse.org/package/show/Base:System/grub2?expand=0&rev=333
210 lines
6.7 KiB
Diff
210 lines
6.7 KiB
Diff
---
|
|
util/s390x/zipl2grub.conf.in | 30 +++++++++++++++++++-
|
|
util/s390x/zipl2grub.pl.in | 64 +++++++++++++++++++++++++++++--------------
|
|
2 files changed, 73 insertions(+), 21 deletions(-)
|
|
|
|
--- a/util/s390x/zipl2grub.conf.in
|
|
+++ b/util/s390x/zipl2grub.conf.in
|
|
@@ -10,17 +10,45 @@ defaultmenu = menu
|
|
image = @zipldir@/image
|
|
parameters = "root=@GRUB_DEVICE@ @GRUB_EMU_CONMODE@ @GRUB_CMDLINE_LINUX@ @GRUB_CMDLINE_LINUX_DEFAULT@ initgrub quiet splash=silent plymouth.enable=0 "
|
|
|
|
+[grub2-mem1G]
|
|
+ target = @zipldir@
|
|
+ image = @zipldir@/image
|
|
+ ramdisk = @zipldir@/initrd,0x2000000
|
|
+ parameters = "root=@GRUB_DEVICE@ @GRUB_EMU_CONMODE@ @GRUB_CMDLINE_LINUX@ @GRUB_CMDLINE_LINUX_DEFAULT@ initgrub quiet splash=silent plymouth.enable=0 mem=1G "
|
|
+
|
|
[skip-grub2]
|
|
target = @zipldir@
|
|
ramdisk = @zipldir@/initrd,0x2000000
|
|
image = @zipldir@/image
|
|
parameters = "root=@GRUB_DEVICE@ @GRUB_CONMODE@ @GRUB_CMDLINE_LINUX@ @GRUB_CMDLINE_LINUX_DEFAULT@ "
|
|
+#@
|
|
+#@[grub2-previous]
|
|
+#@ target = @zipldir@
|
|
+#@ image = @zipldir@/image.prev
|
|
+#@ ramdisk = @zipldir@/initrd.prev,0x2000000
|
|
+#@ parameters = "root=@GRUB_DEVICE@ @GRUB_EMU_CONMODE@ @GRUB_CMDLINE_LINUX@ @GRUB_CMDLINE_LINUX_DEFAULT@ initgrub quiet splash=silent plymouth.enable=0 "
|
|
+#@
|
|
+#@[grub2-mem1G-previous]
|
|
+#@ target = @zipldir@
|
|
+#@ image = @zipldir@/image.prev
|
|
+#@ ramdisk = @zipldir@/initrd.prev,0x2000000
|
|
+#@ parameters = "root=@GRUB_DEVICE@ @GRUB_EMU_CONMODE@ @GRUB_CMDLINE_LINUX@ @GRUB_CMDLINE_LINUX_DEFAULT@ initgrub quiet splash=silent plymouth.enable=0 mem=1G "
|
|
+#@
|
|
+#@[skip-grub2-previous]
|
|
+#@ target = @zipldir@
|
|
+#@ image = @zipldir@/image.prev
|
|
+#@ ramdisk = @zipldir@/initrd.prev,0x2000000
|
|
+#@ parameters = "root=@GRUB_DEVICE@ @GRUB_CONMODE@ @GRUB_CMDLINE_LINUX@ @GRUB_CMDLINE_LINUX_DEFAULT@ "
|
|
|
|
:menu
|
|
target = @zipldir@
|
|
- timeout = 16
|
|
+ timeout = 60
|
|
default = 1
|
|
prompt = 0
|
|
1 = grub2
|
|
2 = skip-grub2
|
|
+ 3 = grub2-mem1G
|
|
+#@ 4 = grub2-previous
|
|
+#@ 5 = skip-grub2-previous
|
|
+#@ 6 = grub2-mem1G-previous
|
|
|
|
--- a/util/s390x/zipl2grub.pl.in
|
|
+++ b/util/s390x/zipl2grub.pl.in
|
|
@@ -10,6 +10,7 @@ my $sysconfbl = '@sysconfdir@/sysconfig/
|
|
my $defimage = "/boot/image";
|
|
my $definitrd = "/boot/initrd";
|
|
my $Image = "$defimage";
|
|
+my $previous = ".prev";
|
|
my $zipldir = "";
|
|
my $running = "";
|
|
my $refresh = 1; # needs to default to "on" until most bugs are shaken out!
|
|
@@ -44,12 +45,12 @@ sub System(@) {
|
|
return 0 if ($debug);
|
|
system( @C);
|
|
if ($? == -1) {
|
|
- Panic( $?, "$C[0]: Failed to execute: $!\n");
|
|
+ Panic( 1, "$C[0]: Failed to execute: $!\n");
|
|
} elsif ($? & 127) {
|
|
- Panic( $?, sprintf( "$C[0]: Died with signal %d with%s coredump\n",
|
|
+ Panic( 1, sprintf( "$C[0]: Died with signal %d with%s coredump\n",
|
|
($? & 127), ($? & 128) ? '' : 'out'));
|
|
} elsif ( $? >> 8 != 0 ) {
|
|
- Panic( $?, "$C[0]: Failed\n");
|
|
+ Panic( $? >> 8, "$C[0]: Failed\n");
|
|
}
|
|
return( 0);
|
|
}
|
|
@@ -74,11 +75,13 @@ sub ln($$) {
|
|
unlink( $_[1]) || Panic( 1, "$C: unlink: $!.\n") if ( -e $_[1]);
|
|
symlink($_[0], $_[1]) || Panic( 1, "$C: symlink: $!.\n");
|
|
}
|
|
-sub BootCopy($$$) {
|
|
+
|
|
+sub ManagePrev($$$){
|
|
my( $file, $dir, $tgt) = @_;
|
|
my $curr = "$dir/$tgt";
|
|
- my $prev = "$dir/$tgt.prev";
|
|
- Info(4, "Copy /boot/$file $dir $tgt\n");
|
|
+ my $prev = "$dir/$tgt$previous";
|
|
+ my $ret = 0;
|
|
+ Info(2, "Manage $prev\n");
|
|
if ( -l $curr ) {
|
|
my $curf = readlink( $curr);
|
|
if ( $curf ne $file ) {
|
|
@@ -88,7 +91,21 @@ sub BootCopy($$$) {
|
|
rm( $pref);
|
|
}
|
|
mv( $curr, $prev);
|
|
+ $ret = 1;
|
|
+ } else {
|
|
+ Info(2, " nothing to do ($curr -> $file).\n");
|
|
}
|
|
+ } else {
|
|
+ Info(2, " nothing to do ($curr no sym-link).\n");
|
|
+ }
|
|
+ return $ret;
|
|
+}
|
|
+sub BootCopy($$$) {
|
|
+ my( $file, $dir, $tgt) = @_;
|
|
+ my $curr = "$dir/$tgt";
|
|
+ Info(4, "Copy /boot/$file $dir $tgt\n");
|
|
+ if ( $tgt eq "image" && ManagePrev( $file, $dir, $tgt)) {
|
|
+ ManagePrev( $file, $dir, "initrd")
|
|
}
|
|
cp( "/boot/$file", "$dir/$file");
|
|
ln( $file, $curr);
|
|
@@ -163,7 +180,9 @@ sub Usage($) {
|
|
"zIPL directory missing.",
|
|
"Configuration template missing.",
|
|
"Configuration template unreadable.",
|
|
- "zIPL directory not accesible.",
|
|
+ "zIPL directory not accessible.",
|
|
+ "kernel image parameter missing.",
|
|
+ "kernel image unreadable.",
|
|
""
|
|
);
|
|
my $msg = "";
|
|
@@ -186,7 +205,8 @@ while ( $#ARGV >= 0 ) {
|
|
(/^--?help/ || /^-h/) && (Usage(0));
|
|
(/^--zipldir$/ || /^-z$/) && ($zipldir = shift || Usage(2), next);
|
|
(/^--template$/ || /^-T$/) && ($in = shift || Usage(3), next);
|
|
- (/^--image$/ || /^-i$/) && ($Image = shift || Usage(5), $force = 1, next);
|
|
+ (/^--image$/ || /^-i$/) && ($Image = shift || Usage(6),
|
|
+ -r "$Image" || Usage(7), $force = 1, next);
|
|
(/^-/) && (Usage(1));
|
|
Usage(1);
|
|
}
|
|
@@ -345,7 +365,7 @@ if ( $debug && $verbose > 2 ) {
|
|
open( IN, "< $in") ||
|
|
Panic( 1, "$C: Failed to open 'zipl.conf' template: $!.\n");
|
|
while ( <IN> ) {
|
|
- Info( 3, "$.. <$_$.. >");
|
|
+ Info( 4, "$.. <$_$.. >");
|
|
if ( $. == 1 && m{^## This} ) {
|
|
$_ = "## This file was written by 'grub2-install/$C'\n" .
|
|
"## filling '$in' as template\n";
|
|
@@ -366,7 +386,7 @@ while ( <IN> ) {
|
|
}
|
|
s{\@$k\@}{$v}g;
|
|
}
|
|
- Info( 2, $_);
|
|
+ Info( 3, $_);
|
|
$cfg .= $_;
|
|
}
|
|
if ( $miss ) {
|
|
@@ -374,13 +394,6 @@ if ( $miss ) {
|
|
Panic( 1, "$C: 'zipl.conf' template could not be filled. \n");
|
|
}
|
|
|
|
-my $ziplconf = "$zipldir/config";
|
|
-if ( ! $debug ) {
|
|
- open( OUT, "> $ziplconf") || die;
|
|
- print( OUT $cfg) || die;
|
|
- close( OUT);
|
|
-}
|
|
-
|
|
# copy out kernel and initrd
|
|
my $ziplimage = "$zipldir/image";
|
|
my $ziplinitrd = "$zipldir/initrd";
|
|
@@ -399,15 +412,15 @@ if ( -l $Image ) {
|
|
$Image = readlink( $Image);
|
|
}
|
|
my ($image, $version) = ($Image =~ m{^(?:/boot/)?([^-]+-(.+))$});
|
|
-my $initrd = "initrd-$version";
|
|
-
|
|
if ( !defined($image) || !defined($version) || ! -r "/boot/$image" ) {
|
|
Panic( 1, "$C: weird $Image. This should never happen!\n");
|
|
}
|
|
+my $initrd = "initrd-$version";
|
|
|
|
if ( ! -r $ziplimage || ! -r $ziplinitrd || $refresh ) {
|
|
BootCopy( $image, $zipldir, "image");
|
|
- BootCopy( $initrd, $zipldir, "initrd") if (-r "/boot/$initrd");
|
|
+ BootCopy( $initrd, $zipldir, "initrd")
|
|
+ if (-r "/boot/$initrd" && ! exists( $fsdev{"/boot"}));
|
|
}
|
|
if ( $refresh || ChkInitrd( $zipldir, "initrd") <= 0 ) {
|
|
MkInitrd( $initrd, $zipldir, $version);
|
|
@@ -417,6 +430,17 @@ if ( ChkInitrd( $zipldir, "initrd") == 0
|
|
$miss++;
|
|
}
|
|
|
|
+# write zipl config file
|
|
+my $ziplconf = "$zipldir/config";
|
|
+$cfg =~ s{#@}{}g if ( -r "$ziplimage$previous" && -r "$ziplinitrd$previous" );
|
|
+if ( ! $debug ) {
|
|
+ open( OUT, "> $ziplconf") || die;
|
|
+ print( OUT $cfg) || die;
|
|
+ close( OUT);
|
|
+} else {
|
|
+ print( STDERR $cfg);
|
|
+}
|
|
+
|
|
# now: go for it!
|
|
my @C = ( "/sbin/zipl", (($verbose) ? "-Vnc" : "-nc"), "$ziplconf" );
|
|
System( @C);
|