From cd3d9e04cf055e9643913f0cddf98eeb036f615ca46b349fc600d31d19b3e861 Mon Sep 17 00:00:00 2001 From: Tony Jones Date: Fri, 21 Feb 2014 17:41:59 +0000 Subject: [PATCH] Accepting request 223425 from home:jones_tony:branches:Kernel:kdump OBS-URL: https://build.opensuse.org/request/show/223425 OBS-URL: https://build.opensuse.org/package/show/Kernel:kdump/kexec-tools?expand=0&rev=39 --- kexec-bootloader | 30 ++++++++---- kexec-bootloader.8.txt | 6 +++ kexec-load.service | 12 +++++ kexec-tools-i386-bzimage_efi.patch | 6 ++- kexec-tools-xen-e820-redefinition.patch | 9 +++- kexec-tools.changes | 11 +++++ kexec-tools.spec | 42 +++++++---------- kexec.init | 62 ------------------------- 8 files changed, 77 insertions(+), 101 deletions(-) create mode 100644 kexec-load.service delete mode 100644 kexec.init diff --git a/kexec-bootloader b/kexec-bootloader index 2527b6e..fdf8a2f 100644 --- a/kexec-bootloader +++ b/kexec-bootloader @@ -149,11 +149,22 @@ if (!$section) { exit(1); } +my $image=$section->{"image"}; +my $initrd=$section->{"initrd"}; + +# handle btfs /@ -> / +if (substr ($image, 0, 3) eq "/@/") { + $image = substr ($image, 2); +} +if ($initrd && substr ($initrd, 0, 3) eq "/@/") { + $initrd = substr ($initrd, 2); +} + if ($debug) { print "Type : " . $section->{"type"}."\n"; print "Name : " . $section->{"name"}."\n"; - print "Image : " . $section->{"image"}."\n"; - print "Initrd : " . $section->{"initrd"}."\n"; + print "Image : " . $image."\n"; + print "Initrd : " . $initrd."\n"; print "VGA : " . $section->{"vgamode"}."\n"; print "Append : " . $section->{"append"}."\n"; print "Root : " . $section->{"root"}."\n"; @@ -164,15 +175,16 @@ if ($section->{"type"} ne "image") { exit(1); } + # check if the image exists -if (! -f $section->{"image"}) { - print STDERR "Image '" . $section->{"image"} . "' does not exist.\n"; +if (! -f $image) { + print STDERR "Image '" . $image . "' does not exist.\n"; exit(1); } # check if the initrd exists -if ($section->{"initrd"} && ! -f $section->{"initrd"}) { - print STDERR "Initrd '" . $section->{"initrd"} . "' does not exist.\n"; +if ($initrd && ! -f $initrd) { + print STDERR "Initrd '" . $initrd . "' does not exist.\n"; exit(1); } @@ -186,11 +198,11 @@ if (system("which kexec &>/dev/null") != 0) { my $cmd = "kexec"; # append image -$cmd .= " -l '" . $section->{"image"} . "'"; +$cmd .= " -l '" . $image . "'"; # append initrd if available -if ($section->{"initrd"}) { - $cmd .= " --initrd='" . $section->{"initrd"} . "'"; +if ($initrd) { + $cmd .= " --initrd='" . $initrd . "'"; } # build append line diff --git a/kexec-bootloader.8.txt b/kexec-bootloader.8.txt index 6eedf67..983331e 100644 --- a/kexec-bootloader.8.txt +++ b/kexec-bootloader.8.txt @@ -48,6 +48,12 @@ Description kexec-bootloader takes the default section of bootloader configuration and loads that kernel, initrd with _kexec -l_ and the respective command line. +Under systemd kexec-bootloader may be invoked by kexec-load.service +(/usr/bin/systemctl kexec) to perform a kexec. To emulate previous SLE +configurable behaviour where kexec occurs automatically at system reboot +the systemd reboot target should be altered via +'ln -s /usr/lib/systemd/system/kexec.target /etc/systemd/system/reboot.target + Options ------- *-h* | *--help*:: diff --git a/kexec-load.service b/kexec-load.service new file mode 100644 index 0000000..e6667c7 --- /dev/null +++ b/kexec-load.service @@ -0,0 +1,12 @@ +[Unit] +Description=load default kernel into the current kernel +Documentation=man:kexec(8) +DefaultDependencies=no +Before=shutdown.target umount.target final.target + +[Service] +Type=oneshot +ExecStart=/usr/sbin/kexec-bootloader + +[Install] +WantedBy=kexec.target diff --git a/kexec-tools-i386-bzimage_efi.patch b/kexec-tools-i386-bzimage_efi.patch index 492fd07..70cf2ff 100644 --- a/kexec-tools-i386-bzimage_efi.patch +++ b/kexec-tools-i386-bzimage_efi.patch @@ -1,11 +1,13 @@ From: Tony Jones -Subject: fix build error on i386 -Upstream: pending +Subject: i386: fix build failure (bzImage_support_efi_boot) +Upstream: yes +Git-commit: 9bcefc97bc6c03b6acc8c25f6b1d4e796521ea4c Commit 9c200a85de2245a850546fded96a1977b84ad24d referenced 'bzImage_support_efi_boot' without matching 32-bit definition. Signed-off-by: Tony Jones +Signed-off-by: Simon Horman --- kexec/arch/i386/kexec-bzImage.c | 1 + 1 file changed, 1 insertion(+) diff --git a/kexec-tools-xen-e820-redefinition.patch b/kexec-tools-xen-e820-redefinition.patch index 8ccf424..097affd 100644 --- a/kexec-tools-xen-e820-redefinition.patch +++ b/kexec-tools-xen-e820-redefinition.patch @@ -1,8 +1,13 @@ From: Tony Jones Subject: fix redefinition error for e820 -Upstream: pending +Upstream: yes +Git-commit: 941fa1f6e31bc7cb1b014277de36b80425da7010 -Our xenctrl.h duplicates e820 definition. +At least on our systems, xenctrl.h defines (unguarded) struct e820entry +Move the (guarded) definition in include/x86/x86-linux.h to below. + +Signed-off-by: Tony Jones +Signed-off-by: Simon Horman --- kexec/arch/i386/crashdump-x86.c | 3 ++- diff --git a/kexec-tools.changes b/kexec-tools.changes index 45a281b..47e342f 100644 --- a/kexec-tools.changes +++ b/kexec-tools.changes @@ -1,3 +1,14 @@ +------------------------------------------------------------------- +Thu Feb 6 01:14:24 UTC 2014 - tonyj@suse.com + +- Drop obsolete /etc/init.d/kexec (bnc# 862143). +- Handle btrfs root subvolume (bnc# 862143c35) +- Create kexec-load.service (bnc# 862143) +- Update kexec-bootloader manpage (document reboot using kexec) +- Remove old 11.1 conditionals +- Update kexec-tools-i386-bzimage_efi.patch and + kexec-tools-xen-e820-redefinition.patch with upstream commit ids + ------------------------------------------------------------------- Wed Feb 5 17:53:56 UTC 2014 - tonyj@suse.com diff --git a/kexec-tools.spec b/kexec-tools.spec index 8e0afea..e75323e 100644 --- a/kexec-tools.spec +++ b/kexec-tools.spec @@ -31,7 +31,7 @@ Release: 0 Source: ftp://kernel.org/pub/linux/utils/kernel/kexec/%{name}-%{version}.tar.xz Source1: kexec-bootloader Source2: kexec-bootloader.8.txt -Source3: kexec.init +Source3: kexec-load.service Source4: %{name}-rpmlintrc Patch1: %{name}-xen-static.patch Patch2: %{name}-xen-balloon-up.patch @@ -43,12 +43,10 @@ Patch7: %{name}-i386-bzimage_efi.patch Url: ftp://kernel.org/pub/linux/utils/kernel/kexec/%{name}-%{version}.tar.bz2 BuildRoot: %{_tmppath}/%{name}-%{version}-build #!BuildIgnore: fop -BuildRequires: automake -BuildRequires: zlib-devel -%if 0%{?suse_version} >= 1110 BuildRequires: asciidoc +BuildRequires: automake BuildRequires: libxslt -%endif +BuildRequires: zlib-devel %ifarch x86_64 BuildRequires: xen-devel %endif @@ -85,24 +83,17 @@ CFLAGS=$RPM_OPT_FLAGS BUILD_CFLAGS=$RPM_OPT_FLAGS \ %configure %endif make -cp %{S:1} . -cp %{S:2} . -cp %{S:3} . -%if 0%{?suse_version} >= 1110 -a2x -d manpage -f manpage kexec-bootloader.8.txt -%endif +a2x -D . -d manpage -f manpage %{S:2} %install %makeinstall mkdir -p $RPM_BUILD_ROOT%{_mandir}/man8 install -c -m 0644 kexec/kexec.8 $RPM_BUILD_ROOT%{_mandir}/man8 -%if 0%{?suse_version} >= 1110 install -c -m 0644 kexec-bootloader.8 $RPM_BUILD_ROOT%{_mandir}/man8 mkdir -p $RPM_BUILD_ROOT%{_sbindir} -install -m 0755 kexec-bootloader $RPM_BUILD_ROOT%{_sbindir} -mkdir -p ${RPM_BUILD_ROOT}/etc/init.d -install -m 0755 kexec.init ${RPM_BUILD_ROOT}/etc/init.d/kexec -%endif +install -m 0755 %{S:1} $RPM_BUILD_ROOT%{_sbindir} +mkdir -p $RPM_BUILD_ROOT%{_unitdir} +install -m644 %{S:3} $RPM_BUILD_ROOT%{_unitdir} #UsrMerge mkdir -p $RPM_BUILD_ROOT/sbin ln -s %{_sbindir}/kdump $RPM_BUILD_ROOT/sbin @@ -111,17 +102,18 @@ ln -s %{_sbindir}/kexec $RPM_BUILD_ROOT/sbin %clean [ "$RPM_BUILD_ROOT" != "/" ] && rm -rf $RPM_BUILD_ROOT -%if 0%{?suse_version} >= 1110 %post -%{fillup_and_insserv -n kexec kexec} -%endif -# +%service_add_post kexec-load.service %postun -%if 0%{?suse_version} >= 1110 -%insserv_cleanup -%endif +%service_del_postun kexec-load.service + +%pre +%service_add_pre kexec-load.service + +%preun +%service_del_preun kexec-load.service %files %defattr(-, root, root) @@ -131,9 +123,7 @@ ln -s %{_sbindir}/kexec $RPM_BUILD_ROOT/sbin /sbin/* #EndUsrMerge %{_sbindir}/* -%if 0%{?suse_version} >= 1110 %{_sbindir}/kexec-bootloader -%config /etc/init.d/kexec -%endif +%{_unitdir}/kexec-load.service %changelog diff --git a/kexec.init b/kexec.init deleted file mode 100644 index 2ee3482..0000000 --- a/kexec.init +++ /dev/null @@ -1,62 +0,0 @@ -#!/bin/bash -# -# Copyright (c) 2008 SUSE LINUX Products GmbH -# Author: Bernhard Walle -# -### BEGIN INIT INFO -# Provides: kexec -# Required-Start: $null -# Should-Start: -# Should-Stop: -# Required-Stop: $local_fs $remote_fs -# Default-Start: 1 2 3 5 S -# Default-Stop: 1 2 3 5 S -# Short-Description: Enables reboot through kexec -# Description: Enables reboot through kexec -### END INIT INFO - -. /etc/rc.status - -KEXEC_BOOTLOADER=/usr/sbin/kexec-bootloader - -case "$1" in - start) - ;; - stop) - # Only execute that script if we're going to reboot the system. - if [ "$RUNLEVEL" -eq 6 ] ; then - if ! [ -f /sys/kernel/kexec_loaded ] ; then - echo -n "Cannot check if kexec kernel has been loaded." - rc_failed - else - read -t 2 kexec_loaded < /sys/kernel/kexec_loaded - if [ "$kexec_loaded" -ne 0 ] ; then - echo -n "kexec kernel already loaded." - rc_status -s - else - echo -n "Loading kexec kernel for reboot ..." - $KEXEC_BOOTLOADER - rc_status -v - fi - fi - else - echo "Loading kexec kernel ..." - rc_status -s - fi - ;; - status) - echo "not implemented" - rc_status -s - ;; - restart|reload) - $0 stop - $0 start - ;; - *) - echo $"Usage: $0 {start|stop|status|restart|reload|try-reload}" - exit 1 -esac - -rc_exit - -# vim: set ts=4 sw=4 et: :mode=shellscript: