forked from pool/grub2
Accepting request 704131 from Base:System
OBS-URL: https://build.opensuse.org/request/show/704131 OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/grub2?expand=0&rev=204
This commit is contained in:
parent
aae815a241
commit
76d0556545
@ -47,27 +47,30 @@ V16:
|
||||
* dracut-grub2.sh: force read-only '/usr' for kexec. [bsc#932951]
|
||||
V17:
|
||||
* grub2-zipl-setup: remove arybase dependency by not referencing $[. [bsc#1055280]
|
||||
V18:
|
||||
* dracut-zipl-refresh.sh.in: initial submission. [bsc#1127293]
|
||||
* dracut-grub2.sh: try to call zipl-refresh on failed kexec and drop
|
||||
to an emergency shell otherwise
|
||||
|
||||
---
|
||||
Makefile.util.def | 39 +++
|
||||
configure.ac | 9
|
||||
grub-core/Makefile.core.def | 7
|
||||
grub-core/osdep/basic/no_platform.c | 7
|
||||
grub-core/osdep/unix/platform.c | 11
|
||||
grub-core/osdep/windows/platform.c | 6
|
||||
include/grub/util/install.h | 4
|
||||
util/grub-install-common.c | 1
|
||||
util/grub-install.c | 43 +++
|
||||
util/s390x/dracut-grub2.sh.in | 110 +++++++++
|
||||
util/s390x/dracut-module-setup.sh.in | 19 +
|
||||
util/s390x/zipl2grub.conf.in | 26 ++
|
||||
util/s390x/zipl2grub.pl.in | 424 +++++++++++++++++++++++++++++++++++
|
||||
13 files changed, 702 insertions(+), 4 deletions(-)
|
||||
Makefile.util.def | 46 +++
|
||||
configure.ac | 9
|
||||
grub-core/Makefile.core.def | 7
|
||||
grub-core/osdep/basic/no_platform.c | 7
|
||||
grub-core/osdep/unix/platform.c | 11
|
||||
grub-core/osdep/windows/platform.c | 6
|
||||
include/grub/util/install.h | 4
|
||||
util/grub-install-common.c | 1
|
||||
util/grub-install.c | 43 +++
|
||||
util/s390x/dracut-grub2.sh.in | 126 +++++++++
|
||||
util/s390x/dracut-module-setup.sh.in | 19 +
|
||||
util/s390x/dracut-zipl-refresh.sh.in | 183 ++++++++++++++
|
||||
util/s390x/zipl2grub.conf.in | 26 ++
|
||||
util/s390x/zipl2grub.pl.in | 423 +++++++++++++++++++++++++++++++++
|
||||
14 files changed, 908 insertions(+), 3 deletions(-)
|
||||
|
||||
Index: grub-2.02/Makefile.util.def
|
||||
===================================================================
|
||||
--- grub-2.02.orig/Makefile.util.def
|
||||
+++ grub-2.02/Makefile.util.def
|
||||
--- a/Makefile.util.def
|
||||
+++ b/Makefile.util.def
|
||||
@@ -352,6 +352,7 @@ program = {
|
||||
ldadd = grub-core/gnulib/libgnu.a;
|
||||
ldadd = '$(LIBINTL) $(LIBDEVMAPPER) $(LIBUTIL) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM)';
|
||||
@ -108,7 +111,7 @@ Index: grub-2.02/Makefile.util.def
|
||||
common = grub-core/kern/emu/argp_common.c;
|
||||
common = grub-core/osdep/init.c;
|
||||
|
||||
@@ -697,6 +702,38 @@ script = {
|
||||
@@ -697,6 +702,46 @@ script = {
|
||||
};
|
||||
|
||||
script = {
|
||||
@ -143,11 +146,19 @@ Index: grub-2.02/Makefile.util.def
|
||||
+ installdir = platform;
|
||||
+};
|
||||
+
|
||||
+script = {
|
||||
+ name = dracut-zipl-refresh;
|
||||
+ common = util/s390x/dracut-zipl-refresh.sh.in;
|
||||
+ enable = emu;
|
||||
+ emu_condition = COND_s390x;
|
||||
+ installdir = platform;
|
||||
+};
|
||||
+
|
||||
+script = {
|
||||
name = grub-mkconfig_lib;
|
||||
common = util/grub-mkconfig_lib.in;
|
||||
installdir = noinst;
|
||||
@@ -1308,6 +1345,7 @@ program = {
|
||||
@@ -1308,6 +1353,7 @@ program = {
|
||||
ldadd = libgrubkern.a;
|
||||
ldadd = grub-core/gnulib/libgnu.a;
|
||||
ldadd = '$(LIBINTL) $(LIBDEVMAPPER) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM)';
|
||||
@ -155,10 +166,8 @@ Index: grub-2.02/Makefile.util.def
|
||||
};
|
||||
|
||||
program = {
|
||||
Index: grub-2.02/configure.ac
|
||||
===================================================================
|
||||
--- grub-2.02.orig/configure.ac
|
||||
+++ grub-2.02/configure.ac
|
||||
--- a/configure.ac
|
||||
+++ b/configure.ac
|
||||
@@ -181,9 +181,9 @@ if test x$platform != xemu ; then
|
||||
esac
|
||||
fi
|
||||
@ -182,10 +191,8 @@ Index: grub-2.02/configure.ac
|
||||
|
||||
AM_CONDITIONAL([COND_HOST_HURD], [test x$host_kernel = xhurd])
|
||||
AM_CONDITIONAL([COND_HOST_LINUX], [test x$host_kernel = xlinux])
|
||||
Index: grub-2.02/grub-core/Makefile.core.def
|
||||
===================================================================
|
||||
--- grub-2.02.orig/grub-core/Makefile.core.def
|
||||
+++ grub-2.02/grub-core/Makefile.core.def
|
||||
--- a/grub-core/Makefile.core.def
|
||||
+++ b/grub-core/Makefile.core.def
|
||||
@@ -1057,6 +1057,7 @@ module = {
|
||||
module = {
|
||||
name = videotest;
|
||||
@ -240,10 +247,8 @@ Index: grub-2.02/grub-core/Makefile.core.def
|
||||
};
|
||||
|
||||
module = {
|
||||
Index: grub-2.02/grub-core/osdep/basic/no_platform.c
|
||||
===================================================================
|
||||
--- grub-2.02.orig/grub-core/osdep/basic/no_platform.c
|
||||
+++ grub-2.02/grub-core/osdep/basic/no_platform.c
|
||||
--- a/grub-core/osdep/basic/no_platform.c
|
||||
+++ b/grub-core/osdep/basic/no_platform.c
|
||||
@@ -44,3 +44,10 @@ grub_install_sgi_setup (const char *inst
|
||||
{
|
||||
grub_util_error ("%s", _("no SGI routines are available for your platform"));
|
||||
@ -255,10 +260,8 @@ Index: grub-2.02/grub-core/osdep/basic/no_platform.c
|
||||
+ grub_util_error ("%s", _("no zIPL routines are available for your platform"));
|
||||
+}
|
||||
+
|
||||
Index: grub-2.02/grub-core/osdep/unix/platform.c
|
||||
===================================================================
|
||||
--- grub-2.02.orig/grub-core/osdep/unix/platform.c
|
||||
+++ grub-2.02/grub-core/osdep/unix/platform.c
|
||||
--- a/grub-core/osdep/unix/platform.c
|
||||
+++ b/grub-core/osdep/unix/platform.c
|
||||
@@ -233,3 +233,14 @@ grub_install_sgi_setup (const char *inst
|
||||
imgfile, destname, NULL });
|
||||
grub_util_warn ("%s", _("You will have to set `SystemPartition' and `OSLoader' manually."));
|
||||
@ -274,10 +277,8 @@ Index: grub-2.02/grub-core/osdep/unix/platform.c
|
||||
+ "-z", dest, NULL }))
|
||||
+ grub_util_error (_("`%s' failed.\n"), PACKAGE"-zipl-setup");
|
||||
+}
|
||||
Index: grub-2.02/grub-core/osdep/windows/platform.c
|
||||
===================================================================
|
||||
--- grub-2.02.orig/grub-core/osdep/windows/platform.c
|
||||
+++ grub-2.02/grub-core/osdep/windows/platform.c
|
||||
--- a/grub-core/osdep/windows/platform.c
|
||||
+++ b/grub-core/osdep/windows/platform.c
|
||||
@@ -422,3 +422,9 @@ grub_install_sgi_setup (const char *inst
|
||||
{
|
||||
grub_util_error ("%s", _("no SGI routines are available for your platform"));
|
||||
@ -288,10 +289,8 @@ Index: grub-2.02/grub-core/osdep/windows/platform.c
|
||||
+{
|
||||
+ grub_util_error ("%s", _("no zIPL routines are available for your platform"));
|
||||
+}
|
||||
Index: grub-2.02/include/grub/util/install.h
|
||||
===================================================================
|
||||
--- grub-2.02.orig/include/grub/util/install.h
|
||||
+++ grub-2.02/include/grub/util/install.h
|
||||
--- a/include/grub/util/install.h
|
||||
+++ b/include/grub/util/install.h
|
||||
@@ -99,6 +99,7 @@ enum grub_install_plat
|
||||
GRUB_INSTALL_PLATFORM_I386_XEN,
|
||||
GRUB_INSTALL_PLATFORM_X86_64_XEN,
|
||||
@ -310,10 +309,8 @@ Index: grub-2.02/include/grub/util/install.h
|
||||
int
|
||||
grub_install_compress_gzip (const char *src, const char *dest);
|
||||
int
|
||||
Index: grub-2.02/util/grub-install-common.c
|
||||
===================================================================
|
||||
--- grub-2.02.orig/util/grub-install-common.c
|
||||
+++ grub-2.02/util/grub-install-common.c
|
||||
--- a/util/grub-install-common.c
|
||||
+++ b/util/grub-install-common.c
|
||||
@@ -666,6 +666,7 @@ static struct
|
||||
[GRUB_INSTALL_PLATFORM_ARM_EFI] = { "arm", "efi" },
|
||||
[GRUB_INSTALL_PLATFORM_ARM64_EFI] = { "arm64", "efi" },
|
||||
@ -322,10 +319,8 @@ Index: grub-2.02/util/grub-install-common.c
|
||||
};
|
||||
|
||||
char *
|
||||
Index: grub-2.02/util/grub-install.c
|
||||
===================================================================
|
||||
--- grub-2.02.orig/util/grub-install.c
|
||||
+++ grub-2.02/util/grub-install.c
|
||||
--- a/util/grub-install.c
|
||||
+++ b/util/grub-install.c
|
||||
@@ -66,6 +66,7 @@ static int force_file_id = 0;
|
||||
static char *disk_module = NULL;
|
||||
static char *efidir = NULL;
|
||||
@ -467,11 +462,9 @@ Index: grub-2.02/util/grub-install.c
|
||||
case GRUB_INSTALL_PLATFORM_MIPSEL_LOONGSON:
|
||||
case GRUB_INSTALL_PLATFORM_MIPSEL_QEMU_MIPS:
|
||||
case GRUB_INSTALL_PLATFORM_MIPS_QEMU_MIPS:
|
||||
Index: grub-2.02/util/s390x/dracut-grub2.sh.in
|
||||
===================================================================
|
||||
--- /dev/null
|
||||
+++ grub-2.02/util/s390x/dracut-grub2.sh.in
|
||||
@@ -0,0 +1,110 @@
|
||||
+++ b/util/s390x/dracut-grub2.sh.in
|
||||
@@ -0,0 +1,126 @@
|
||||
+#!/bin/sh
|
||||
+# -*- mode: shell-script; indent-tabs-mode: nil; sh-basic-offset: 4; -*-
|
||||
+# ex: ts=8 sw=4 sts=4 et filetype=sh
|
||||
@ -566,8 +559,23 @@ Index: grub-2.02/util/s390x/dracut-grub2.sh.in
|
||||
+
|
||||
+ debug "Trying grub2-emu (ro=$grub2rofs, TERM=$TERM, ctty=$_ctty)..."
|
||||
+ setsid $CTTY -- chroot /sysroot $bindir/grub2-emu -X -X 0<>$_ctty 1>&0 2>&0
|
||||
+ if [ -e /grub2force ] && [ $(cat /sys/kernel/kexec_loaded) = 1 ]; then
|
||||
+ systemctl kexec
|
||||
+
|
||||
+ if [ -x /sysroot/usr/share/grub2/zipl-refresh ]; then
|
||||
+ setsid $CTTY -- /sysroot/usr/share/grub2/zipl-refresh 0<>$_ctty 1>&0 2>&0
|
||||
+ if [ $? != 0 ]; then
|
||||
+ warn "Not continuing"
|
||||
+ emergency_shell -n grub2-emu-zipl-refresh
|
||||
+ else
|
||||
+ echo "+ reboot" >& $_ctty
|
||||
+ sleep 3
|
||||
+ reboot
|
||||
+ fi
|
||||
+ else
|
||||
+ echo "
|
||||
+ Attention: 'grub2' failed to start the target kernel and 'zipl-refresh'
|
||||
+ is not available. This should never happen. Please contact support." >& $_ctty
|
||||
+ warn "Not continuing"
|
||||
+ emergency_shell -n grub2-emu-kexec
|
||||
+ fi
|
||||
+
|
||||
+ $grub2snap || umount /sysroot/.snapshots
|
||||
@ -578,14 +586,13 @@ Index: grub-2.02/util/s390x/dracut-grub2.sh.in
|
||||
+ $grub2roufs || mount -o remount,rw /sysroot/usr
|
||||
+ $grub2rofs || mount -o remount,rw /sysroot
|
||||
+ else
|
||||
+ info "No $bindir/grub2-emu in /sysroot--trying to proceed without kexec..."
|
||||
+ warn "No $bindir/grub2-emu in /sysroot--dropping to emergency shell..."
|
||||
+ emergency_shell -n no-grub2-emu
|
||||
+ fi
|
||||
+fi
|
||||
+
|
||||
Index: grub-2.02/util/s390x/dracut-module-setup.sh.in
|
||||
===================================================================
|
||||
--- /dev/null
|
||||
+++ grub-2.02/util/s390x/dracut-module-setup.sh.in
|
||||
+++ b/util/s390x/dracut-module-setup.sh.in
|
||||
@@ -0,0 +1,19 @@
|
||||
+#!/bin/bash
|
||||
+# -*- mode: shell-script; indent-tabs-mode: nil; sh-basic-offset: 4; -*-
|
||||
@ -606,10 +613,8 @@ Index: grub-2.02/util/s390x/dracut-module-setup.sh.in
|
||||
+ #inst_multiple grub2-emu kexec
|
||||
+}
|
||||
+
|
||||
Index: grub-2.02/util/s390x/zipl2grub.conf.in
|
||||
===================================================================
|
||||
--- /dev/null
|
||||
+++ grub-2.02/util/s390x/zipl2grub.conf.in
|
||||
+++ b/util/s390x/zipl2grub.conf.in
|
||||
@@ -0,0 +1,26 @@
|
||||
+## This is the template for '@zipldir@/config' and is subject to
|
||||
+## rpm's %config file handling in case of grub2-s390x-emu package update.
|
||||
@ -637,10 +642,8 @@ Index: grub-2.02/util/s390x/zipl2grub.conf.in
|
||||
+ 1 = grub2
|
||||
+ 2 = skip-grub2
|
||||
+
|
||||
Index: grub-2.02/util/s390x/zipl2grub.pl.in
|
||||
===================================================================
|
||||
--- /dev/null
|
||||
+++ grub-2.02/util/s390x/zipl2grub.pl.in
|
||||
+++ b/util/s390x/zipl2grub.pl.in
|
||||
@@ -0,0 +1,423 @@
|
||||
+#!/usr/bin/perl
|
||||
+use strict;
|
||||
@ -1065,3 +1068,189 @@ Index: grub-2.02/util/s390x/zipl2grub.pl.in
|
||||
+System( @C);
|
||||
+exit( $miss);
|
||||
+
|
||||
--- /dev/null
|
||||
+++ b/util/s390x/dracut-zipl-refresh.sh.in
|
||||
@@ -0,0 +1,183 @@
|
||||
+#!/bin/bash
|
||||
+# ex: ts=8 sw=4 sts=4 et filetype=sh syntax=off
|
||||
+
|
||||
+debug=false
|
||||
+TIMEOUT=60
|
||||
+[ -n "$SYSROOT" ] ||
|
||||
+SYSROOT=/sysroot
|
||||
+[ -d $SYSROOT/boot ] || SYSROOT=
|
||||
+
|
||||
+sync() { $SYSROOT/usr/bin/sync "$@"; }
|
||||
+readlink() { $SYSROOT/usr/bin/readlink "$@"; }
|
||||
+newline() { echo ""; }
|
||||
+verbose() {
|
||||
+ local a
|
||||
+ local m
|
||||
+ [ -n "$*" ] || return 0
|
||||
+ m="+"
|
||||
+ for a in "$@"; do
|
||||
+ case "$a" in
|
||||
+ (*" "*|*" "*|"") m="$m '$a'";;
|
||||
+ (*) m="$m $a";;
|
||||
+ esac
|
||||
+ done
|
||||
+ echo "$m"
|
||||
+ [ -n "$SYSROOT" -o "$1" = "chroot" ] || return 0
|
||||
+ "$@"
|
||||
+}
|
||||
+
|
||||
+SYSK="$(readlink $SYSROOT/boot/image)"
|
||||
+SYSK="${SYSK#image-}"
|
||||
+ZIPK="$(readlink $SYSROOT/boot/zipl/image)"
|
||||
+ZIPK="${ZIPK#image-}"
|
||||
+PRVK="$(readlink $SYSROOT/boot/zipl/image.prev 2> /dev/null)"
|
||||
+PRVK="${PRVK#image-}"
|
||||
+RUNK="$(uname -r)"
|
||||
+# if /boot/zipl is not accessible ZIPK will be empty, assume running kernel
|
||||
+[ -n "$ZIPK" ] || ZIPK="$RUNK"
|
||||
+
|
||||
+[ -n "$SYSROOT" ] || {
|
||||
+ echo "$0 is not intended for interactive use!"
|
||||
+ $debug ||
|
||||
+ exit 0
|
||||
+ ## test:
|
||||
+ TIMEOUT=6
|
||||
+ RUNK=110; ZIPK=110; PRVK=101; SYSK=194
|
||||
+ ##RUNK=$PRVK; ZIPK=$SYSK # previous booted, newest is default
|
||||
+ ##t=$ZIPK; ZIPK=$PRVK; PRVK=$t; SYSK=$PRVK # unknown booted
|
||||
+ ##ZIPK=$SYSK; PRVK="" # no update
|
||||
+ ##ZIPK=$SYSK # try previous
|
||||
+ echo "R=$RUNK S=$SYSK Z=$ZIPK P=$PRVK"
|
||||
+ #verbose echo "a b" z
|
||||
+ #verbose echo "^h ^j" ^z
|
||||
+}
|
||||
+
|
||||
+trap newline EXIT
|
||||
+
|
||||
+echo -n "
|
||||
+ Attention: 'grub2' failed to start the target kernel"
|
||||
+
|
||||
+if [ "$ZIPK" != "$RUNK" -a "$RUNK" != "$SYSK" ]; then
|
||||
+ # i.e. "previous" has been selected via zipl, but it fails!?
|
||||
+ [ "$RUNK" = "$PRVK" ] &&
|
||||
+ echo " from previous" ||
|
||||
+ echo " from unknown"
|
||||
+
|
||||
+ echo " ZIPL kernel ($RUNK). If default ($ZIPK)
|
||||
+ fails as well, please contact support."
|
||||
+ exit 1
|
||||
+fi
|
||||
+echo "."
|
||||
+if [ "$ZIPK" = "$SYSK" ]; then
|
||||
+ [ -z "$PRVK" ] &&
|
||||
+ echo "
|
||||
+ No kernel update readily available/installed. Please contact support." ||
|
||||
+ echo "
|
||||
+ You may want to try the previous kernel ($PRVK) with
|
||||
+ 'IPL ... LOADPARM 4', as no update kernel is readily available/installed."
|
||||
+ exit 1
|
||||
+fi
|
||||
+
|
||||
+echo "
|
||||
+ A newer kernel ($SYSK) is available and will be deployed
|
||||
+ in $TIMEOUT seconds. To facilitate this, the affected file-systems have
|
||||
+ to be made writable, then 'grub2-install --force' needs to be run,
|
||||
+ and, on success, a 'reboot' will be initiated.
|
||||
+
|
||||
+ Press 'c[Enter]' to interrupt... "
|
||||
+
|
||||
+trap interrupted=1 INT
|
||||
+interrupted=0
|
||||
+input=""
|
||||
+read -t $TIMEOUT input
|
||||
+case "$input" in
|
||||
+ ([Cc]) interrupted=2 ;;
|
||||
+esac
|
||||
+if [ $interrupted != 0 ]; then
|
||||
+ echo "
|
||||
+ Automatic update cancelled..."
|
||||
+ exit 1
|
||||
+fi
|
||||
+trap - INT
|
||||
+echo "
|
||||
+ Attempting automatic update..."
|
||||
+
|
||||
+ismounted() {
|
||||
+ local mode="$1"
|
||||
+ local tgt="$2"
|
||||
+ local dev mp fs opts dc
|
||||
+ while read dev mp fs opts dc; do
|
||||
+ [ "$mp" = "$tgt" ] || continue
|
||||
+ case ",$opts," in
|
||||
+ (*,$mode,*) return 0;;
|
||||
+ esac
|
||||
+ done < /proc/mounts
|
||||
+ return 1
|
||||
+}
|
||||
+ismp() {
|
||||
+ local sysr="$1"
|
||||
+ local tgt="$2"
|
||||
+ local dev mp fs opts dc
|
||||
+ while read dev mp fs opts dc; do
|
||||
+ case "$dev" in
|
||||
+ ("#"*) continue;;
|
||||
+ esac
|
||||
+ [ "$mp" = "$tgt" ] || continue
|
||||
+ return 0
|
||||
+ done < $sysr/etc/fstab
|
||||
+ return 1
|
||||
+}
|
||||
+chroot() {
|
||||
+ local tgt="$1"; shift
|
||||
+ if [ -z "$tgt" ]; then
|
||||
+ echo -n "+"
|
||||
+ verbose "$@"
|
||||
+ else
|
||||
+ /usr/bin/chroot "$tgt" "$@"
|
||||
+ fi
|
||||
+}
|
||||
+cleanup() {
|
||||
+ local mp
|
||||
+ echo " # cleanup"
|
||||
+ for mp in $UMOUNT; do
|
||||
+ verbose chroot "$SYSROOT" umount $mp
|
||||
+ done
|
||||
+ for mp in $WMOUNT; do
|
||||
+ verbose mount -o remount,ro $mp
|
||||
+ done
|
||||
+ sync; sync
|
||||
+ [ -z "$EXIT" ] || echo "$EXIT"
|
||||
+ echo ""
|
||||
+}
|
||||
+trap cleanup EXIT
|
||||
+UMOUNT=""
|
||||
+WMOUNT=""
|
||||
+EXIT=""
|
||||
+
|
||||
+echo " # prepare"
|
||||
+# remount $SYSROOT{,/boot{,/zipl}} read-write
|
||||
+for mp in {"",/boot{,/zipl}}; do
|
||||
+ [ -n "$SYSROOT$mp" ] || continue
|
||||
+ if ismounted rw $SYSROOT$mp; then
|
||||
+ echo " # $mp: already read-write: ignore"
|
||||
+ elif ismounted ro $SYSROOT$mp; then
|
||||
+ verbose mount -o remount,rw $SYSROOT$mp
|
||||
+ WMOUNT="$SYSROOT$mp $WMOUNT"
|
||||
+ elif ismp "$SYSROOT" $mp; then
|
||||
+ verbose chroot "$SYSROOT" mount -w $mp || exit 1
|
||||
+ UMOUNT="$mp $UMOUNT"
|
||||
+ fi
|
||||
+done
|
||||
+if [ ! -w $SYSROOT/boot/zipl/config ]; then
|
||||
+ EXIT="ERROR: $SYSROOT/boot/zipl/config not writable! Aborting..."
|
||||
+ exit 1
|
||||
+fi
|
||||
+echo " # action"
|
||||
+verbose chroot "$SYSROOT" grub2-zipl-setup --force
|
||||
+ret=$?
|
||||
+if [ $ret != 0 ]; then
|
||||
+ EXIT=" # failed ($ret)"
|
||||
+else
|
||||
+ EXIT=" # done"
|
||||
+fi
|
||||
+exit $ret
|
||||
|
@ -1,22 +1,68 @@
|
||||
---
|
||||
util/s390x/zipl2grub.conf.in | 2 +-
|
||||
util/s390x/zipl2grub.pl.in | 19 +++++++++++--------
|
||||
2 files changed, 12 insertions(+), 9 deletions(-)
|
||||
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
|
||||
@@ -8,7 +8,7 @@ defaultmenu = menu
|
||||
@@ -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_EMU_CONMODE@ @GRUB_CMDLINE_LINUX@ @GRUB_CMDLINE_LINUX_DEFAULT@ initgrub quiet splash=silent plymouth.enable=0 "
|
||||
+ parameters = "root=@GRUB_DEVICE@ @GRUB_EMU_CONMODE@ @GRUB_CMDLINE_LINUX@ @GRUB_CMDLINE_LINUX_DEFAULT@ initgrub quiet splash=silent plymouth.enable=0 mem=1G "
|
||||
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@ "
|
||||
|
||||
[skip-grub2]
|
||||
: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
|
||||
@@ -44,12 +44,12 @@ sub System(@) {
|
||||
@@ -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) {
|
||||
@ -32,7 +78,46 @@
|
||||
}
|
||||
return( 0);
|
||||
}
|
||||
@@ -166,7 +166,9 @@ sub Usage($) {
|
||||
@@ -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.",
|
||||
@ -43,7 +128,7 @@
|
||||
""
|
||||
);
|
||||
my $msg = "";
|
||||
@@ -190,7 +192,8 @@ while ( $#ARGV >= 0 ) {
|
||||
@@ -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);
|
||||
@ -53,7 +138,39 @@
|
||||
(/^-/) && (Usage(1));
|
||||
Usage(1);
|
||||
}
|
||||
@@ -403,15 +406,15 @@ if ( -l $Image ) {
|
||||
@@ -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/)?([^-]+-(.+))$});
|
||||
@ -72,3 +189,21 @@
|
||||
}
|
||||
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);
|
||||
|
@ -8,7 +8,14 @@ GRUB_ONCE="/usr/sbin/grub2-once"
|
||||
GRUB_ENV="/boot/grub2/grubenv"
|
||||
GRUB_EDITENV="/usr/bin/grub2-editenv"
|
||||
GRUB_CONF="/boot/grub2/grub.cfg"
|
||||
GRUB_SETUP=
|
||||
BLKID="/usr/sbin/blkid"
|
||||
ARCH=`uname -m`
|
||||
VMLINUZ="vmlinuz"
|
||||
case $ARCH in
|
||||
ppc*) VMLINUZ="vmlinux" ;;
|
||||
s390*) VMLINUZ="image"; GRUB_SETUP="/usr/sbin/grub2-zipl-setup" ;;
|
||||
esac
|
||||
|
||||
error_quit()
|
||||
{
|
||||
@ -117,7 +124,6 @@ grub-once-restore()
|
||||
find-kernel-entry()
|
||||
{
|
||||
NEXT_BOOT=""
|
||||
ARCH=`uname -m`
|
||||
declare -i I=0
|
||||
# DEBUG "running kernel: $RUNNING" DIAG
|
||||
while [ -n "${KERNELS[$I]}" ]; do
|
||||
@ -126,10 +132,7 @@ find-kernel-entry()
|
||||
# DEBUG "Found kernel symlink $BOOTING => $IMAGE" INFO
|
||||
BOOTING=$IMAGE
|
||||
fi
|
||||
case $ARCH in
|
||||
ppc*) BOOTING="${BOOTING#*vmlinux-}" ;;
|
||||
*) BOOTING="${BOOTING#*vmlinuz-}" ;;
|
||||
esac
|
||||
BOOTING="${BOOTING#*${VMLINUZ}-}"
|
||||
if [ "$RUNNING" == "$BOOTING" -a -n "${MENU_ENTRIES[$I]}" ]; then
|
||||
NEXT_BOOT="${MENU_ENTRIES[$I]}"
|
||||
echo " running kernel is grub menu entry $NEXT_BOOT (${KERNELS[$I]})"
|
||||
@ -149,7 +152,7 @@ find-kernel-entry()
|
||||
# if we did not find a kernel (or BOOT_LOADER is not GRUB) check,
|
||||
# if the running kernel is still the one that will (probably) be booted for
|
||||
# resume (default entry in menu.lst or, if there is none, the kernel file
|
||||
# /boot/vmlinuz points to.)
|
||||
# /boot/${VMLINUZ} points to.)
|
||||
# This will only work, if you use "original" SUSE kernels.
|
||||
# you can always override with the config variable set to "yes"
|
||||
prepare-grub()
|
||||
@ -164,13 +167,14 @@ prepare-grub()
|
||||
# which kernel is booted with the default entry?
|
||||
BOOTING="${KERNELS[$DEFAULT_BOOT]}"
|
||||
# if there is no default entry (no menu.lst?) we fall back to
|
||||
# the default of /boot/vmlinuz.
|
||||
[ -z "$BOOTING" ] && BOOTING="vmlinuz"
|
||||
# the default of /boot/${VMLINUZ}.
|
||||
[ -z "$BOOTING" ] && BOOTING="${VMLINUZ}"
|
||||
if IMAGE=`readlink /boot/$BOOTING` && [ -e "/boot/${IMAGE##*/}" ]; then
|
||||
BOOTING=$IMAGE
|
||||
fi
|
||||
BOOTING="${BOOTING#*vmlinuz-}"
|
||||
BOOTING="${BOOTING#*${VMLINUZ}-}"
|
||||
echo "running kernel: '$RUNNING', probably booting kernel: '$BOOTING'"
|
||||
check-setup "$RUNNING"
|
||||
if [ "$BOOTING" != "$RUNNING" ]; then
|
||||
error_quit "ERROR: kernel version mismatch, cannot suspend to disk"
|
||||
fi
|
||||
@ -180,6 +184,7 @@ prepare-grub()
|
||||
T1=`date +"%s%N"`
|
||||
sync; sync; sync # this is needed to speed up grub-once on reiserfs
|
||||
T2=`date +"%s%N"`
|
||||
check-setup "$RUNNING"
|
||||
echo " running $GRUB_ONCE \"${NEXT_BOOT}\""
|
||||
${GRUB_ONCE} "$NEXT_BOOT"
|
||||
T3=`date +"%s%N"`
|
||||
@ -191,6 +196,24 @@ prepare-grub()
|
||||
echo "INFO: Done."
|
||||
}
|
||||
|
||||
#############################################################################
|
||||
check-setup()
|
||||
{
|
||||
local WANT="$VMLINUZ-$1"
|
||||
|
||||
[ -n "$GRUB_SETUP" ] || return
|
||||
# implementation below is s390x-only (for now)
|
||||
echo "INFO: check-setup \"$WANT\" .."
|
||||
HAVE="/boot/zipl/$VMLINUZ"
|
||||
[ -r "$HAVE" ] ||
|
||||
error_quit "ERROR: no zipl kernel, cannot suspend to disk"
|
||||
HAVE=$(readlink $HAVE) ||
|
||||
error_quit "ERROR: zipl kernel no sym-link, cannot suspend to disk"
|
||||
[ "$HAVE" != "$WANT" ] ||
|
||||
{ echo " zipl kernel already in sync, nothing to do"; return; }
|
||||
echo " running $GRUB_SETUP # (incl. dracut!)" # no --image as running is preferred!
|
||||
${GRUB_SETUP} > /dev/null 2>&1
|
||||
}
|
||||
|
||||
###### main()
|
||||
|
||||
|
@ -1,8 +1,10 @@
|
||||
Index: grub-2.02~beta2/util/s390x/zipl2grub.pl.in
|
||||
===================================================================
|
||||
--- grub-2.02~beta2.orig/util/s390x/zipl2grub.pl.in
|
||||
+++ grub-2.02~beta2/util/s390x/zipl2grub.pl.in
|
||||
@@ -361,6 +361,10 @@ while ( <IN> ) {
|
||||
---
|
||||
util/s390x/zipl2grub.pl.in | 4 ++++
|
||||
1 file changed, 4 insertions(+)
|
||||
|
||||
--- a/util/s390x/zipl2grub.pl.in
|
||||
+++ b/util/s390x/zipl2grub.pl.in
|
||||
@@ -384,6 +384,10 @@ while ( <IN> ) {
|
||||
} else {
|
||||
$v = "";
|
||||
}
|
||||
@ -12,4 +14,4 @@ Index: grub-2.02~beta2/util/s390x/zipl2grub.pl.in
|
||||
+ }
|
||||
s{\@$k\@}{$v}g;
|
||||
}
|
||||
Info( 2, $_);
|
||||
Info( 3, $_);
|
||||
|
@ -1,3 +1,21 @@
|
||||
-------------------------------------------------------------------
|
||||
Fri May 17 13:57:29 UTC 2019 - rw@suse.com
|
||||
|
||||
- Check/refresh zipl-kernel before hibernate on s390x. (bsc#940457)
|
||||
(Getting rid of hardcoded 'vmlinuz', which failed on PPC as well.)
|
||||
* grub2-systemd-sleep.sh
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Fri May 17 12:22:55 UTC 2019 - rw@suse.com
|
||||
|
||||
- Try to refresh zipl-kernel on failed kexec. (bsc#1127293)
|
||||
* grub2-s390x-04-grub2-install.patch
|
||||
- Fully support "previous" zipl-kernel,
|
||||
with 'mem=1G' being available on dedicated entries. (bsc#928131)
|
||||
* grub2-s390x-09-improve-zipl-setup.patch
|
||||
- Refresh
|
||||
* grub2-zipl-setup-fix-btrfs-multipledev.patch
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Fri May 3 02:42:27 UTC 2019 - mchang <mchang@suse.com>
|
||||
|
||||
|
@ -941,6 +941,8 @@ install -m 755 -d $R%{dracutgrubmoddir}
|
||||
for f in module-setup.sh grub2.sh; do
|
||||
mv $R%{_datadir}/%{name}/%{grubarch}/dracut-$f $R%{dracutgrubmoddir}/$f
|
||||
done
|
||||
mv $R%{_datadir}/%{name}/%{grubarch}/dracut-zipl-refresh \
|
||||
$R%{_datadir}/%{name}/zipl-refresh
|
||||
rm -f $R%{_sysconfdir}/grub.d/30_os-prober
|
||||
|
||||
perl -ni -e '
|
||||
@ -1149,6 +1151,7 @@ fi
|
||||
%config(noreplace) %{_sysconfdir}/default/zipl2grub.conf.in
|
||||
%{dracutlibdir}
|
||||
%{_sbindir}/%{name}-zipl-setup
|
||||
%{_datadir}/%{name}/zipl-refresh
|
||||
%endif
|
||||
%{_sbindir}/%{name}-install
|
||||
%{_sbindir}/%{name}-mkconfig
|
||||
|
Loading…
Reference in New Issue
Block a user