forked from pool/kdump
Accepting request 433330 from home:ptesarik:branches:Kernel:kdump
Update to 0.8.16 OBS-URL: https://build.opensuse.org/request/show/433330 OBS-URL: https://build.opensuse.org/package/show/Kernel:kdump/kdump?expand=0&rev=121
This commit is contained in:
parent
09a0e2b156
commit
ad9a064371
@ -1,26 +0,0 @@
|
||||
From 4ce21a05fdfa91cb894d140c1962b29fb4b1431a Mon Sep 17 00:00:00 2001
|
||||
From: Julian Wolf <juwolf@suse.de>
|
||||
Date: Mon, 1 Sep 2014 15:46:21 +0200
|
||||
Subject: multipath: Write proper regex into multipath.conf
|
||||
|
||||
Signed-off-by: Julian Wolf <juwolf@suse.de>
|
||||
---
|
||||
kdumptool/multipath.cc | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/kdumptool/multipath.cc b/kdumptool/multipath.cc
|
||||
index 4ffe493..a9acafc 100644
|
||||
--- a/kdumptool/multipath.cc
|
||||
+++ b/kdumptool/multipath.cc
|
||||
@@ -206,7 +206,7 @@ void AddBlacklistHandler::outputLine(const string &raw)
|
||||
// -----------------------------------------------------------------------------
|
||||
void AddBlacklistHandler::doBlacklist(lineHandler handler)
|
||||
{
|
||||
- (this->*handler)("\twwid \"*\"\n");
|
||||
+ (this->*handler)("\twwid \".*\"\n");
|
||||
m_blacklist_done = true;
|
||||
}
|
||||
|
||||
--
|
||||
1.8.1.4
|
||||
|
@ -1,9 +0,0 @@
|
||||
diff -Ndur kdump-0.8.15/init/rc.kdump.functions kdump-0.8.15-fix-shebang/init/rc.kdump.functions
|
||||
--- kdump-0.8.15/init/rc.kdump.functions 2014-06-23 18:47:39.000000000 +0300
|
||||
+++ kdump-0.8.15-fix-shebang/init/rc.kdump.functions 2014-11-23 07:28:42.856444929 +0200
|
||||
@@ -1,4 +1,4 @@
|
||||
-#!/bin/sh
|
||||
+#!/bin/bash
|
||||
#
|
||||
# Copyright 2005 Red Hat, Inc.
|
||||
# Author: Jeff Moyer <jmoyer@redhat.com>
|
@ -1,3 +0,0 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:2d492a9b833e571b32721d949ca140889a48aae38ae2288d7988f6c4e3aa5185
|
||||
size 3336592
|
3
kdump-0.8.16.tar.bz2
Normal file
3
kdump-0.8.16.tar.bz2
Normal file
@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:00e4ba5d9b424c7051e28b4014a0d341670ba1f3969226452d52007649e521fc
|
||||
size 3336777
|
@ -1,200 +0,0 @@
|
||||
From: Petr Tesarik <ptesarik@suse.cz>
|
||||
Date: Tue Sep 23 16:12:34 2014 +0200
|
||||
Subject: Add KDUMP_NETCONFIG modes to support IPv6
|
||||
References: bnc#885897
|
||||
Patch-mainline: v0.8.16
|
||||
Git-commit: ffd6542ed47a41be1f1d9f8df95781b6d94123d4
|
||||
|
||||
KDUMP_NETCONFIG had only two modes: static and dhcp, where dhcp
|
||||
actually only means DHCP4. New modes are needed to get an IPv6
|
||||
address on the interface.
|
||||
|
||||
Note that automatic configuration (KDUMP_NETCONFIG=auto) still uses
|
||||
only IPv4, because dracut does not implement multiple alternative
|
||||
ip configurations, and there's no way to determine in advance
|
||||
which stack should be used.
|
||||
|
||||
Signed-off-by: Petr Tesarik <ptesarik@suse.cz>
|
||||
|
||||
---
|
||||
doc/man/kdump.5.txt.in | 35 ++++++++++++++++++++++++++++++-----
|
||||
init/module-setup.sh | 42 ++++++++++++++++++++++++++++++++++--------
|
||||
init/setup-kdump.functions | 39 ++++++++++++++++++++++++++++++++++++++-
|
||||
sysconfig.kdump.in | 4 ++--
|
||||
4 files changed, 104 insertions(+), 16 deletions(-)
|
||||
|
||||
--- a/doc/man/kdump.5.txt.in
|
||||
+++ b/doc/man/kdump.5.txt.in
|
||||
@@ -513,13 +513,38 @@ KDUMP_NETCONFIG
|
||||
|
||||
Network configuration for kdump. Because the dump process runs in initrd, the
|
||||
network configuration is different from the normal network configuration. Use
|
||||
-_auto_ to auto-detect the network configuration, this is also the default.
|
||||
+_auto_ to auto-detect the network configuration (see *auto* mode below). The
|
||||
+interface with the default route will be used. This is the default.
|
||||
+
|
||||
+Auto-detection cannot be used to set up dual-stack (IPv4 and IPv6) hosts
|
||||
+because of limitations in the implementation of the _ip=_ initrd command line
|
||||
+option.
|
||||
|
||||
Use a _netdevice:mode_ string to force a specific network device to be used. A
|
||||
-_netdevice_ is for example "eth0". The _mode_ can be either "dhcp" or "static".
|
||||
-If you use "static", you have to set the IP address with _ip=ipspec_. _ipspec_
|
||||
-is <client>:<server>:<gateway>:<netmask>:<hostname>:<device>:<proto>. See
|
||||
-*mkinitrd*(8) for details.
|
||||
+_netdevice_ is for example "eth0". The _mode_ can be:
|
||||
+
|
||||
+*static*::
|
||||
+ Always re-use the current configuration of _netdevice_ (both IPv4 and IPv6).
|
||||
+ Note that only permanent global IPv6 addresses are stored, because temporary
|
||||
+ addresses are likely to expire before the system crashes, and link-local
|
||||
+ addresses are set up automatically.
|
||||
+
|
||||
+*auto6*::
|
||||
+ Use IPv6 autoconfiguration to get an address on the interface.
|
||||
+
|
||||
+*dhcp*::
|
||||
+*dhcp4*::
|
||||
+ Use DHCP to configure an IPv4 address on the interface.
|
||||
+
|
||||
+*dhcp6*::
|
||||
+ Use DHCP6 to configure an IPv6 address on the interface.
|
||||
+
|
||||
+*auto*::
|
||||
+ Select the mode depending on the current state of the interface:
|
||||
+
|
||||
+ * use DHCP4 if it has an IPv4 address (IPv6 not set up),
|
||||
+ * use DHCP6 if it has a permanent IPv6 address (IPv4 not set up),
|
||||
+ * use IPv6 auto-configuration if it has neither (IPv4 not set up).
|
||||
|
||||
You can set KDUMP_NETCONFIG to "" if you want no network in initrd, i.e. you use
|
||||
disk dumping.
|
||||
--- a/init/module-setup.sh
|
||||
+++ b/init/module-setup.sh
|
||||
@@ -65,24 +65,50 @@ kdump_cmdline_ip() {
|
||||
[ "$kdump_neednet" = y ] || return 0
|
||||
|
||||
echo -n "rd.neednet=1"
|
||||
+
|
||||
+ local _if _mode
|
||||
if [ "$KDUMP_NETCONFIG" = "auto" ] ; then
|
||||
- echo -n " ip=any"
|
||||
+ _if=default
|
||||
+ _mode=auto
|
||||
else
|
||||
set -- ${KDUMP_NETCONFIG//:/ }
|
||||
local _if=$1
|
||||
local _mode=$2
|
||||
+ fi
|
||||
|
||||
- if [ "$_if" = "default" ] ; then
|
||||
- _if=$(kdump_default_netdev)
|
||||
- fi
|
||||
- printf " %s" $(kdump_ifname_config "$_if")
|
||||
+ [ "$_if" = "default" ] && _if=$(kdump_default_netdev)
|
||||
|
||||
- if [ "$_mode" = "static" ] ; then
|
||||
- printf " %s" $(kdump_ip_config "$_if")
|
||||
+ printf " %s" $(kdump_ifname_config "$_if")
|
||||
+
|
||||
+ if [ "$_mode" = "auto" ] ; then
|
||||
+ if [ -n $(kdump_ip_config "$_if") ] ; then
|
||||
+ _mode=dhcp4
|
||||
+ elif [ -n $(kdump_ip6_config "$_if") ] ; then
|
||||
+ _mode=dhcp6
|
||||
else
|
||||
- echo -n " ip=${_if}:dhcp"
|
||||
+ _mode=auto6
|
||||
fi
|
||||
fi
|
||||
+
|
||||
+ case "$_mode" in
|
||||
+ static)
|
||||
+ printf " %s" \
|
||||
+ $(kdump_ip_config "$_if") \
|
||||
+ $(kdump_ip6_config "$_if")
|
||||
+ ;;
|
||||
+ dhcp|dhcp4)
|
||||
+ echo " ip=${_if}:dhcp"
|
||||
+ ;;
|
||||
+ dhcp6)
|
||||
+ echo " ip=${_if}:dhcp6"
|
||||
+ ;;
|
||||
+ auto6)
|
||||
+ echo " ip=${_if}:auto6"
|
||||
+ ;;
|
||||
+ *)
|
||||
+ derror "Wrong KDUMP_NETCONFIG mode: $_mode"
|
||||
+ ;;
|
||||
+ esac
|
||||
}
|
||||
|
||||
cmdline() {
|
||||
--- a/init/setup-kdump.functions
|
||||
+++ b/init/setup-kdump.functions
|
||||
@@ -230,7 +230,7 @@ kdump_prefix2netmask() { # {{{
|
||||
} # }}}
|
||||
|
||||
#
|
||||
-# Get the ip= parameter for a given device
|
||||
+# Get the IPv4 ip= parameter for a given device
|
||||
#
|
||||
# Parameters:
|
||||
# 1) device device name
|
||||
@@ -267,6 +267,43 @@ function kdump_ip_config() # {{{
|
||||
} # }}}
|
||||
|
||||
#
|
||||
+# Get the IPv6 ip= parameter for a given device
|
||||
+#
|
||||
+# Parameters:
|
||||
+# 1) device device name
|
||||
+# Output:
|
||||
+# ip configuration string that can be used for the ip= initrd parameter
|
||||
+function kdump_ip6_config() # {{{
|
||||
+{
|
||||
+ local iface="$1"
|
||||
+ local ipaddr peeraddr gwaddr hostname
|
||||
+ local family cidr rest prefix
|
||||
+
|
||||
+ hostname=$(hostname)
|
||||
+ gwaddr=$(ip -6 route show ::/0 | sed -n 's/.* via \([^ ]*\).*/[\1]/p')
|
||||
+
|
||||
+ while read family cidr rest
|
||||
+ do
|
||||
+ [ "$family" = "inet6" ] || continue
|
||||
+
|
||||
+ ipaddr="${cidr%/*}"
|
||||
+ prefix="${cidr:${#ipaddr}}"
|
||||
+ ipaddr="[$ipaddr]$prefix"
|
||||
+ set -- $rest
|
||||
+
|
||||
+ if [ "$1" == "peer" ] ; then
|
||||
+ peeraddr="${2%/*}"
|
||||
+ prefix="${2:${#peeraddr}}"
|
||||
+ peeraddr="[$peeraddr]"
|
||||
+ else
|
||||
+ peeraddr=
|
||||
+ fi
|
||||
+
|
||||
+ echo "ip=$ipaddr:$peeraddr:$gwaddr::$hostname:$iface:none"
|
||||
+ done < <(ip -6 address show dev "$iface" permanent scope global)
|
||||
+} # }}}
|
||||
+
|
||||
+#
|
||||
# Get the save directory and protocol.
|
||||
#
|
||||
# Output variables:
|
||||
--- a/sysconfig.kdump.in
|
||||
+++ b/sysconfig.kdump.in
|
||||
@@ -279,8 +279,8 @@ KDUMPTOOL_FLAGS=""
|
||||
## ServiceRestart: kdump
|
||||
#
|
||||
# Network configuration. Use "auto" for auto-detection in initrd, or a string
|
||||
-# that contains the network device and the mode (dhcp,static), separated by
|
||||
-# a colon. Example: "eth0:static" or "eth1:dhcp".
|
||||
+# that contains the network device and the mode (static, dhcp, dhcp6, auto6),
|
||||
+# separated by a colon. Example: "eth0:static" or "eth1:dhcp".
|
||||
#
|
||||
# For static configuration, you have to add the configuration to
|
||||
# KDUMP_COMMANDLINE_APPEND.
|
@ -1,59 +0,0 @@
|
||||
Date: Fri Sep 26 11:43:33 2014 +0200
|
||||
From: Petr Tesarik <ptesarik@suse.cz>
|
||||
Subject: kdump-Bootloader: add support for GRUB2
|
||||
References: bsc#889192
|
||||
Patch-mainline: v0.8.16
|
||||
Git-commit: 30d4271c72251c5f1c995d0580b19aa000ade1d6
|
||||
|
||||
GRUB2 is very different from the other bootloader, because the final
|
||||
configuration file is generated by an external utility. This means
|
||||
that the command line must be modified in the global settings instead
|
||||
of the individual section.
|
||||
|
||||
Signed-off-by: Petr Tesarik <ptesarik@suse.cz>
|
||||
|
||||
---
|
||||
init/kdump-bootloader.pl | 22 +++++++++++++++++-----
|
||||
1 file changed, 17 insertions(+), 5 deletions(-)
|
||||
|
||||
--- a/init/kdump-bootloader.pl
|
||||
+++ b/init/kdump-bootloader.pl
|
||||
@@ -4,11 +4,19 @@ use Bootloader::Tools;
|
||||
|
||||
Bootloader::Tools::InitLibrary();
|
||||
|
||||
+my $grub2;
|
||||
+my $section;
|
||||
+if (Bootloader::Tools::GetBootloader() =~ /^(grub2|grub2-efi)$/) {
|
||||
+ $grub2 = true;
|
||||
+ $section = Bootloader::Tools::GetGlobals();
|
||||
+} else {
|
||||
+ $grub2 = false;
|
||||
+ $section = Bootloader::Tools::GetDefaultSection();
|
||||
+}
|
||||
+
|
||||
if ($ARGV[0] eq "--get") {
|
||||
- my $section = Bootloader::Tools::GetDefaultSection ();
|
||||
print $section->{"append"};
|
||||
} elsif ($ARGV[0] eq "--update") {
|
||||
- my $section = Bootloader::Tools::GetDefaultSection ();
|
||||
my $input = $section->{"append"};
|
||||
my $result;
|
||||
while (length($input)) {
|
||||
@@ -28,9 +36,13 @@ if ($ARGV[0] eq "--get") {
|
||||
shift @ARGV;
|
||||
$result .= " " if length($result);
|
||||
$result .= join(" ", @ARGV);
|
||||
- $section->{"append"} = $result;
|
||||
- $section->{"__modified"} = 1;
|
||||
- Bootloader::Tools::SetGlobals();
|
||||
+ if ($grub2) {
|
||||
+ Bootloader::Tools::SetGlobals("append" => $result);
|
||||
+ } else {
|
||||
+ $section->{"append"} = $result;
|
||||
+ $section->{"__modified"} = 1;
|
||||
+ Bootloader::Tools::SetGlobals();
|
||||
+ }
|
||||
} else {
|
||||
die "Need an action (--get or --update)";
|
||||
}
|
@ -1,99 +0,0 @@
|
||||
From: Petr Tesarik <ptesarik@suse.cz>
|
||||
Date: Thu Sep 18 17:03:46 2014 +0200
|
||||
Subject: Calibrate: update the initramfs size
|
||||
References: bnc#883883
|
||||
Patch-mainline: v0.8.16
|
||||
Git-commit: b2ab003f54da780cc1ca8ebfe47f39ddd936b34a
|
||||
|
||||
Yes, systemd also needs some space in the initramfs, causing approx.
|
||||
20% increase. Let's account for it...
|
||||
|
||||
Signed-off-by: Petr Tesarik <ptesarik@suse.cz>
|
||||
|
||||
---
|
||||
kdumptool/calibrate.cc | 18 +++++++++---------
|
||||
1 file changed, 9 insertions(+), 9 deletions(-)
|
||||
|
||||
--- a/kdumptool/calibrate.cc
|
||||
+++ b/kdumptool/calibrate.cc
|
||||
@@ -59,7 +59,7 @@
|
||||
#if defined(__x86_64__)
|
||||
# define DEF_RESERVE_KB MB(128)
|
||||
# define KERNEL_KB MB(16)
|
||||
-# define INIT_KB MB(28)
|
||||
+# define INIT_KB MB(34)
|
||||
# define INIT_NET_KB MB(3)
|
||||
# define SIZE_STRUCT_PAGE 56
|
||||
# define KDUMP_PHYS_LOAD 0
|
||||
@@ -69,7 +69,7 @@
|
||||
#elif defined(__i386__)
|
||||
# define DEF_RESERVE_KB MB(128)
|
||||
# define KERNEL_KB MB(14)
|
||||
-# define INIT_KB MB(24)
|
||||
+# define INIT_KB MB(29)
|
||||
# define INIT_NET_KB MB(2)
|
||||
# define SIZE_STRUCT_PAGE 32
|
||||
# define KDUMP_PHYS_LOAD 0
|
||||
@@ -79,7 +79,7 @@
|
||||
#elif defined(__powerpc64__)
|
||||
# define DEF_RESERVE_KB MB(256)
|
||||
# define KERNEL_KB MB(16)
|
||||
-# define INIT_KB MB(48)
|
||||
+# define INIT_KB MB(58)
|
||||
# define INIT_NET_KB MB(4)
|
||||
# define SIZE_STRUCT_PAGE 64
|
||||
# define KDUMP_PHYS_LOAD MB(128)
|
||||
@@ -89,7 +89,7 @@
|
||||
#elif defined(__powerpc__)
|
||||
# define DEF_RESERVE_KB MB(128)
|
||||
# define KERNEL_KB MB(12)
|
||||
-# define INIT_KB MB(28)
|
||||
+# define INIT_KB MB(34)
|
||||
# define INIT_NET_KB MB(2)
|
||||
# define SIZE_STRUCT_PAGE 32
|
||||
# define KDUMP_PHYS_LOAD MB(128)
|
||||
@@ -99,7 +99,7 @@
|
||||
#elif defined(__s390x__)
|
||||
# define DEF_RESERVE_KB MB(128)
|
||||
# define KERNEL_KB MB(13)
|
||||
-# define INIT_KB MB(28)
|
||||
+# define INIT_KB MB(34)
|
||||
# define INIT_NET_KB MB(2)
|
||||
# define SIZE_STRUCT_PAGE 56
|
||||
# define KDUMP_PHYS_LOAD 0
|
||||
@@ -111,7 +111,7 @@
|
||||
#elif defined(__s390__)
|
||||
# define DEF_RESERVE_KB MB(128)
|
||||
# define KERNEL_KB MB(12)
|
||||
-# define INIT_KB MB(24)
|
||||
+# define INIT_KB MB(29)
|
||||
# define INIT_NET_KB MB(2)
|
||||
# define SIZE_STRUCT_PAGE 32
|
||||
# define KDUMP_PHYS_LOAD 0
|
||||
@@ -123,7 +123,7 @@
|
||||
#elif defined(__ia64__)
|
||||
# define DEF_RESERVE_KB MB(512)
|
||||
# define KERNEL_KB MB(32)
|
||||
-# define INIT_KB MB(36)
|
||||
+# define INIT_KB MB(44)
|
||||
# define INIT_NET_KB MB(4)
|
||||
# define SIZE_STRUCT_PAGE 56
|
||||
# define KDUMP_PHYS_LOAD 0
|
||||
@@ -133,7 +133,7 @@
|
||||
#elif defined(__aarch64__)
|
||||
# define DEF_RESERVE_KB MB(128)
|
||||
# define KERNEL_KB MB(10)
|
||||
-# define INIT_KB MB(24)
|
||||
+# define INIT_KB MB(29)
|
||||
# define INIT_NET_KB MB(2)
|
||||
# define SIZE_STRUCT_PAGE 56
|
||||
# define KDUMP_PHYS_LOAD 0
|
||||
@@ -143,7 +143,7 @@
|
||||
#elif defined(__arm__)
|
||||
# define DEF_RESERVE_KB MB(128)
|
||||
# define KERNEL_KB MB(12)
|
||||
-# define INIT_KB MB(24)
|
||||
+# define INIT_KB MB(29)
|
||||
# define INIT_NET_KB MB(2)
|
||||
# define SIZE_STRUCT_PAGE 32
|
||||
# define KDUMP_PHYS_LOAD 0
|
@ -1,49 +0,0 @@
|
||||
From: Petr Tesarik <ptesarik@suse.cz>
|
||||
Date: Thu Sep 18 17:01:08 2014 +0200
|
||||
Subject: Calibrate: update user-space run-time requirements for systemd
|
||||
References: bnc#883883
|
||||
Patch-mainline: v0.8.16
|
||||
Git-commit: 04bc6fa91a88e7ff91acb6d2924774bf28463c6b
|
||||
|
||||
If systemd is included, journald is also started, so the estimate
|
||||
must add:
|
||||
|
||||
1. the process
|
||||
2. the journal, which is stored in ramfs
|
||||
|
||||
I would love to reduce the size of the journal, but systemd hard-codes
|
||||
the minimum to 4M, see src/journal/journal-file.c:
|
||||
|
||||
/* This is the minimum journal file size */
|
||||
#define JOURNAL_FILE_SIZE_MIN (4ULL*1024ULL*1024ULL) /* 4 MiB */
|
||||
|
||||
Strictly speaking, journald is allowed to use at least twice as much,
|
||||
but let's hope it doesn't in practice.
|
||||
|
||||
Signed-off-by: Petr Tesarik <ptesarik@suse.cz>
|
||||
|
||||
---
|
||||
kdumptool/calibrate.cc | 8 +++++---
|
||||
1 file changed, 5 insertions(+), 3 deletions(-)
|
||||
|
||||
--- a/kdumptool/calibrate.cc
|
||||
+++ b/kdumptool/calibrate.cc
|
||||
@@ -203,13 +203,15 @@ static inline unsigned long s390x_align_
|
||||
#define DIRTY_RATIO 20
|
||||
|
||||
// Userspace base requirements:
|
||||
-// bash (PID 1) 3 M
|
||||
+// systemd (PID 1) 3 M
|
||||
+// journald 2 M
|
||||
+// the journal itself 4 M
|
||||
// 10 * udevd 12 M
|
||||
// kdumptool 4 M
|
||||
// makedumpfile 1 M
|
||||
// -------------------------
|
||||
-// TOTAL: 20 M
|
||||
-#define USER_BASE_KB MB(20)
|
||||
+// TOTAL: 26 M
|
||||
+#define USER_BASE_KB MB(26)
|
||||
|
||||
// Additional requirements when network is configured
|
||||
// dhclient 7 M
|
22
kdump-cmake-compat.patch
Normal file
22
kdump-cmake-compat.patch
Normal file
@ -0,0 +1,22 @@
|
||||
From: Petr Tesarik <ptesarik@suse.com>
|
||||
Subject: Avoid using TARGET_* cmake directives
|
||||
Patch-mainline: never; compatibility with older SUSE distros
|
||||
|
||||
This patch can be removed when we stop caring about SLES11...
|
||||
|
||||
Signed-off-by: Petr Tesarik <ptesarik@suse.com>
|
||||
---
|
||||
init/CMakeLists.txt | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
--- a/init/CMakeLists.txt
|
||||
+++ b/init/CMakeLists.txt
|
||||
@@ -20,7 +20,7 @@
|
||||
ADD_EXECUTABLE(device-timeout-generator
|
||||
device-timeout-generator.c
|
||||
)
|
||||
-TARGET_INCLUDE_DIRECTORIES(device-timeout-generator
|
||||
+INCLUDE_DIRECTORIES(device-timeout-generator
|
||||
PUBLIC ${BLKID_INCLUDE_DIRS})
|
||||
TARGET_LINK_LIBRARIES(device-timeout-generator
|
||||
${BLKID_LIBRARIES})
|
@ -1,252 +0,0 @@
|
||||
From: Petr Tesarik <ptesarik@suse.cz>
|
||||
Date: Mon Sep 8 17:33:38 2014 +0200
|
||||
Subject: Take constant-size slabs into account for "kdump calibrate"
|
||||
References: bnc#879460
|
||||
Patch-mainline: v0.8.16
|
||||
Git-commit: 3a7c9b3a02893ab9ac39e23cae5ead9e42716927
|
||||
Git-commit: 8c0a42e80a89100addc09d584253f1c8accde500
|
||||
|
||||
Some slabs do not depend on available memory or system utilization.
|
||||
Their size can be taken directly from the running kernel.
|
||||
|
||||
Note that the size of the ACPI slab cache may vary widely across
|
||||
machines (e.g. mine has only a few hundred kilobytes, while another
|
||||
one I saw had over 10 megabytes).
|
||||
|
||||
Signed-off-by: Petr Tesarik <ptesarik@suse.cz>
|
||||
|
||||
---
|
||||
kdumptool/calibrate.cc | 215 +++++++++++++++++++++++++++++++++++++++++++++++++
|
||||
1 file changed, 215 insertions(+)
|
||||
|
||||
--- a/kdumptool/calibrate.cc
|
||||
+++ b/kdumptool/calibrate.cc
|
||||
@@ -448,6 +448,201 @@ unsigned long Framebuffers::size(void) c
|
||||
}
|
||||
|
||||
//}}}
|
||||
+//{{{ SlabInfo -----------------------------------------------------------------
|
||||
+
|
||||
+class SlabInfo {
|
||||
+
|
||||
+ public:
|
||||
+ /**
|
||||
+ * Initialize a new SlabInfo object.
|
||||
+ *
|
||||
+ * @param[in] line Line from /proc/slabinfo
|
||||
+ */
|
||||
+ SlabInfo(const KString &line);
|
||||
+
|
||||
+ protected:
|
||||
+ bool m_comment;
|
||||
+ KString m_name;
|
||||
+ unsigned long m_active_objs;
|
||||
+ unsigned long m_num_objs;
|
||||
+ unsigned long m_obj_size;
|
||||
+ unsigned long m_obj_per_slab;
|
||||
+ unsigned long m_pages_per_slab;
|
||||
+ unsigned long m_active_slabs;
|
||||
+ unsigned long m_num_slabs;
|
||||
+
|
||||
+ public:
|
||||
+ bool isComment(void) const
|
||||
+ throw ()
|
||||
+ { return m_comment; }
|
||||
+
|
||||
+ const KString &name(void) const
|
||||
+ throw ()
|
||||
+ { return m_name; }
|
||||
+
|
||||
+ unsigned long activeObjs(void) const
|
||||
+ throw ()
|
||||
+ { return m_active_objs; }
|
||||
+
|
||||
+ unsigned long numObjs(void) const
|
||||
+ throw ()
|
||||
+ { return m_num_objs; }
|
||||
+
|
||||
+ unsigned long objSize(void) const
|
||||
+ throw ()
|
||||
+ { return m_obj_size; }
|
||||
+
|
||||
+ unsigned long objPerSlab(void) const
|
||||
+ throw ()
|
||||
+ { return m_obj_per_slab; }
|
||||
+
|
||||
+ unsigned long pagesPerSlab(void) const
|
||||
+ throw ()
|
||||
+ { return m_pages_per_slab; }
|
||||
+
|
||||
+ unsigned long activeSlabs(void) const
|
||||
+ throw ()
|
||||
+ { return m_active_slabs; }
|
||||
+
|
||||
+ unsigned long numSlabs(void) const
|
||||
+ throw ()
|
||||
+ { return m_num_slabs; }
|
||||
+};
|
||||
+
|
||||
+// -----------------------------------------------------------------------------
|
||||
+SlabInfo::SlabInfo(const KString &line)
|
||||
+{
|
||||
+ static const char slabdata_mark[] = " : slabdata ";
|
||||
+
|
||||
+ std::istringstream ss(line);
|
||||
+ ss >> m_name;
|
||||
+ if (!ss)
|
||||
+ throw KError("Invalid slabinfo line: " + line);
|
||||
+
|
||||
+ if (m_name[0] == '#') {
|
||||
+ m_comment = true;
|
||||
+ return;
|
||||
+ }
|
||||
+ m_comment = false;
|
||||
+
|
||||
+ ss >> m_active_objs >> m_num_objs >> m_obj_size
|
||||
+ >> m_obj_per_slab >> m_pages_per_slab;
|
||||
+ if (!ss)
|
||||
+ throw KError("Invalid slabinfo line: " + line);
|
||||
+
|
||||
+ size_t sdpos = line.find(slabdata_mark, ss.tellg());
|
||||
+ if (sdpos == KString::npos)
|
||||
+ throw KError("Invalid slabinfo line: " + line);
|
||||
+
|
||||
+ ss.seekg(sdpos + sizeof(slabdata_mark) - 1, ss.beg);
|
||||
+ ss >> m_active_slabs >> m_num_slabs;
|
||||
+ if (!ss)
|
||||
+ throw KError("Invalid slabinfo line: " + line);
|
||||
+}
|
||||
+
|
||||
+//}}}
|
||||
+//{{{ SlabInfos ----------------------------------------------------------------
|
||||
+
|
||||
+// Taken from procps:
|
||||
+#define SLABINFO_LINE_LEN 2048
|
||||
+#define SLABINFO_VER_LEN 100
|
||||
+
|
||||
+class SlabInfos {
|
||||
+
|
||||
+ public:
|
||||
+ typedef std::map<KString, const SlabInfo*> Map;
|
||||
+
|
||||
+ /**
|
||||
+ * Initialize a new SlabInfos object.
|
||||
+ *
|
||||
+ * @param[in] procdir Mount point for procfs
|
||||
+ */
|
||||
+ SlabInfos(const char *procdir = "/proc")
|
||||
+ throw ()
|
||||
+ : m_path(FilePath(procdir).appendPath("slabinfo"))
|
||||
+ {}
|
||||
+
|
||||
+ ~SlabInfos()
|
||||
+ { destroyInfo(); }
|
||||
+
|
||||
+ protected:
|
||||
+ /**
|
||||
+ * Path to the slabinfo file
|
||||
+ */
|
||||
+ const FilePath m_path;
|
||||
+
|
||||
+ /**
|
||||
+ * SlabInfo for each slab
|
||||
+ */
|
||||
+ Map m_info;
|
||||
+
|
||||
+ private:
|
||||
+ /**
|
||||
+ * Destroy SlabInfo objects in m_info.
|
||||
+ */
|
||||
+ void destroyInfo(void)
|
||||
+ throw();
|
||||
+
|
||||
+ public:
|
||||
+ /**
|
||||
+ * Read the information about each slab.
|
||||
+ */
|
||||
+ const Map& getInfo(void);
|
||||
+};
|
||||
+
|
||||
+// -----------------------------------------------------------------------------
|
||||
+void SlabInfos::destroyInfo(void)
|
||||
+ throw()
|
||||
+{
|
||||
+ Map::iterator it;
|
||||
+ for (it = m_info.begin(); it != m_info.end(); ++it)
|
||||
+ delete it->second;
|
||||
+ m_info.clear();
|
||||
+}
|
||||
+
|
||||
+// -----------------------------------------------------------------------------
|
||||
+const SlabInfos::Map& SlabInfos::getInfo(void)
|
||||
+{
|
||||
+ static const char verhdr[] = "slabinfo - version: ";
|
||||
+ char buf[SLABINFO_VER_LEN], *p, *end;
|
||||
+ unsigned long major, minor;
|
||||
+
|
||||
+ std::ifstream f(m_path.c_str());
|
||||
+ if (!f)
|
||||
+ throw KError(m_path + ": Open failed");
|
||||
+ f.getline(buf, sizeof buf);
|
||||
+ if (f.bad())
|
||||
+ throw KError(m_path + ": Read failed");
|
||||
+ else if (!f || strncmp(buf, verhdr, sizeof(verhdr)-1))
|
||||
+ throw KError(m_path + ": Invalid version");
|
||||
+ p = buf + sizeof(verhdr) - 1;
|
||||
+
|
||||
+ major = strtoul(p, &end, 10);
|
||||
+ if (end == p || *end != '.')
|
||||
+ throw KError(m_path + ": Invalid version");
|
||||
+ p = end + 1;
|
||||
+ minor = strtoul(p, &end, 10);
|
||||
+ if (end == p || *end != '\0')
|
||||
+ throw KError(m_path + ": Invalid version");
|
||||
+ Debug::debug()->dbg("Found slabinfo version %lu.%lu", major, minor);
|
||||
+
|
||||
+ if (major != 2)
|
||||
+ throw KError(m_path + ": Unsupported slabinfo version");
|
||||
+
|
||||
+ char line[SLABINFO_LINE_LEN];
|
||||
+ while(f.getline(line, SLABINFO_LINE_LEN)) {
|
||||
+ SlabInfo *si = new SlabInfo(line);
|
||||
+ if (si->isComment()) {
|
||||
+ delete si;
|
||||
+ continue;
|
||||
+ }
|
||||
+ m_info[si->name()] = si;
|
||||
+ }
|
||||
+
|
||||
+ return m_info;
|
||||
+}
|
||||
+
|
||||
+//}}}
|
||||
//{{{ Calibrate ----------------------------------------------------------------
|
||||
|
||||
// -----------------------------------------------------------------------------
|
||||
@@ -498,6 +693,26 @@ void Calibrate::execute()
|
||||
required += DEF_FRAMEBUFFER_KB;
|
||||
}
|
||||
|
||||
+ // Add space for constant slabs
|
||||
+ try {
|
||||
+ SlabInfos slab;
|
||||
+ SlabInfos::Map info = slab.getInfo();
|
||||
+ SlabInfos::Map::iterator it;
|
||||
+ for (it = info.begin(); it != info.end(); ++it) {
|
||||
+ if (it->first.startsWith("Acpi-") ||
|
||||
+ it->first.startsWith("ftrace_") ) {
|
||||
+ unsigned long slabsize = it->second->numSlabs() *
|
||||
+ it->second->pagesPerSlab() * pagesize / 1024;
|
||||
+ required += slabsize;
|
||||
+
|
||||
+ Debug::debug()->dbg("Adding %ld KiB for %s slab cache",
|
||||
+ slabsize, it->second->name().c_str());
|
||||
+ }
|
||||
+ }
|
||||
+ } catch (KError e) {
|
||||
+ Debug::debug()->dbg("Cannot get slab sizes: %s", e.what());
|
||||
+ }
|
||||
+
|
||||
// Add memory based on CPU count
|
||||
unsigned long cpus;
|
||||
if (CAN_REDUCE_CPUS) {
|
@ -1,228 +0,0 @@
|
||||
From: Petr Tesarik <ptesarik@suse.cz>
|
||||
Date: Mon Sep 8 09:28:04 2014 +0200
|
||||
Subject: Take framebuffer size into account for "kdumptool calibrate"
|
||||
References: bnc#879460
|
||||
Patch-mainline: v0.8.16
|
||||
Git-commit: 77ad2fff73fc6dd2dd0615e56967721ba9b96d83
|
||||
Git-commit: 7cd4e826671ded8fe36a4b4bdeef1223ce8397ca
|
||||
|
||||
Depending on the resolution, framebuffer(s) may considerably influence
|
||||
kdump kernel requirements.
|
||||
|
||||
Note that there is no framebuffer on z/Series, so after reading sysfs
|
||||
fails, the default size for s390(x) is zero.
|
||||
|
||||
Signed-off-by: Petr Tesarik <ptesarik@suse.cz>
|
||||
|
||||
---
|
||||
kdumptool/calibrate.cc | 153 +++++++++++++++++++++++++++++++++++++++++++++++++
|
||||
kdumptool/fileutil.cc | 2
|
||||
kdumptool/fileutil.h | 2
|
||||
3 files changed, 155 insertions(+), 2 deletions(-)
|
||||
|
||||
--- a/kdumptool/fileutil.cc
|
||||
+++ b/kdumptool/fileutil.cc
|
||||
@@ -295,7 +295,7 @@ FilePath FilePath::getCanonicalPath(cons
|
||||
}
|
||||
|
||||
// -----------------------------------------------------------------------------
|
||||
-StringVector FilePath::listDir(const ListDirFilter &filter)
|
||||
+StringVector FilePath::listDir(const ListDirFilter &filter) const
|
||||
throw (KError)
|
||||
{
|
||||
StringVector v;
|
||||
--- a/kdumptool/fileutil.h
|
||||
+++ b/kdumptool/fileutil.h
|
||||
@@ -224,7 +224,7 @@ class FilePath : public KString {
|
||||
* list, @c false if all files should be included
|
||||
* @exception KError if something went wrong
|
||||
*/
|
||||
- StringVector listDir(const ListDirFilter &filter)
|
||||
+ StringVector listDir(const ListDirFilter &filter) const
|
||||
throw (KError);
|
||||
|
||||
/**
|
||||
--- a/kdumptool/calibrate.cc
|
||||
+++ b/kdumptool/calibrate.cc
|
||||
@@ -19,7 +19,10 @@
|
||||
#include <iostream>
|
||||
#include <fstream>
|
||||
#include <cerrno>
|
||||
+#include <cstring>
|
||||
+#include <cstdlib>
|
||||
#include <unistd.h>
|
||||
+#include <dirent.h>
|
||||
|
||||
#include "subcommand.h"
|
||||
#include "debug.h"
|
||||
@@ -173,6 +176,13 @@ static inline unsigned long s390x_align_
|
||||
// Estimated non-changing dynamic data (sysfs, procfs, etc.)
|
||||
#define KERNEL_DYNAMIC_KB MB(4)
|
||||
|
||||
+// Default framebuffer size: 1024x768 @ 32bpp, except on mainframe
|
||||
+#if defined(__s390__) || defined(__s390x__)
|
||||
+# define DEF_FRAMEBUFFER_KB 0
|
||||
+#else
|
||||
+# define DEF_FRAMEBUFFER_KB (768UL*4)
|
||||
+#endif
|
||||
+
|
||||
// large hashes, default settings: -> per MiB
|
||||
// PID: sizeof(void*) for each 256 KiB 4
|
||||
// Dentry cache: sizeof(void*) for each 8 KiB 128
|
||||
@@ -303,6 +313,141 @@ unsigned long SystemCPU::count(const cha
|
||||
}
|
||||
|
||||
//}}}
|
||||
+//{{{ Framebuffer --------------------------------------------------------------
|
||||
+
|
||||
+class Framebuffer {
|
||||
+
|
||||
+ public:
|
||||
+ /**
|
||||
+ * Initialize a new Framebuffer object.
|
||||
+ *
|
||||
+ * @param[in] fbpath Framebuffer sysfs directory path
|
||||
+ */
|
||||
+ Framebuffer(const char *fbpath)
|
||||
+ throw ()
|
||||
+ : m_dir(fbpath)
|
||||
+ {}
|
||||
+
|
||||
+ protected:
|
||||
+ /**
|
||||
+ * Path to the framebuffer device base directory
|
||||
+ */
|
||||
+ const FilePath m_dir;
|
||||
+
|
||||
+ public:
|
||||
+ /**
|
||||
+ * Get length of the framebuffer [in bytes].
|
||||
+ */
|
||||
+ unsigned long size(void) const;
|
||||
+};
|
||||
+
|
||||
+// -----------------------------------------------------------------------------
|
||||
+unsigned long Framebuffer::size(void) const
|
||||
+{
|
||||
+ FilePath fp;
|
||||
+ std::ifstream f;
|
||||
+ unsigned long width, height, stride;
|
||||
+ char sep;
|
||||
+
|
||||
+ fp.assign(m_dir);
|
||||
+ fp.appendPath("virtual_size");
|
||||
+ f.open(fp.c_str());
|
||||
+ if (!f)
|
||||
+ throw KError(fp + ": Open failed");
|
||||
+ f >> width >> sep >> height;
|
||||
+ f.close();
|
||||
+ if (f.bad())
|
||||
+ throw KError(fp + ": Read failed");
|
||||
+ else if (!f || sep != ',')
|
||||
+ throw KError(fp + ": Invalid content!");
|
||||
+ Debug::debug()->dbg("Framebuffer virtual size: %lux%lu", width, height);
|
||||
+
|
||||
+ fp.assign(m_dir);
|
||||
+ fp.appendPath("stride");
|
||||
+ f.open(fp.c_str());
|
||||
+ if (!f)
|
||||
+ throw KError(fp + ": Open failed");
|
||||
+ f >> stride;
|
||||
+ f.close();
|
||||
+ if (f.bad())
|
||||
+ throw KError(fp + ": Read failed");
|
||||
+ else if (!f || sep != ',')
|
||||
+ throw KError(fp + ": Invalid content!");
|
||||
+ Debug::debug()->dbg("Framebuffer stride: %lu bytes", stride);
|
||||
+
|
||||
+ return stride * height;
|
||||
+}
|
||||
+
|
||||
+//}}}
|
||||
+//{{{ Framebuffers -------------------------------------------------------------
|
||||
+
|
||||
+class Framebuffers {
|
||||
+
|
||||
+ public:
|
||||
+ /**
|
||||
+ * Initialize a new Framebuffer object.
|
||||
+ *
|
||||
+ * @param[in] sysdir Mount point for sysfs
|
||||
+ */
|
||||
+ Framebuffers(const char *sysdir = "/sys")
|
||||
+ throw ()
|
||||
+ : m_fbdir(FilePath(sysdir).appendPath("class/graphics"))
|
||||
+ {}
|
||||
+
|
||||
+ protected:
|
||||
+ /**
|
||||
+ * Path to the base directory with links to framebuffer devices
|
||||
+ */
|
||||
+ const FilePath m_fbdir;
|
||||
+
|
||||
+ /**
|
||||
+ * Filter only valid framebuffer device name
|
||||
+ */
|
||||
+ class DirFilter : public ListDirFilter {
|
||||
+
|
||||
+ public:
|
||||
+ virtual ~DirFilter()
|
||||
+ {}
|
||||
+
|
||||
+ bool test(const struct dirent *d) const
|
||||
+ {
|
||||
+ char *end;
|
||||
+ if (strncmp(d->d_name, "fb", 2))
|
||||
+ return false;
|
||||
+ strtoul(d->d_name + 2, &end, 10);
|
||||
+ return (*end == '\0' && end != d->d_name + 2);
|
||||
+ }
|
||||
+ };
|
||||
+
|
||||
+ public:
|
||||
+ /**
|
||||
+ * Get size of all framebuffers [in bytes].
|
||||
+ */
|
||||
+ unsigned long size(void) const;
|
||||
+};
|
||||
+
|
||||
+// -----------------------------------------------------------------------------
|
||||
+unsigned long Framebuffers::size(void) const
|
||||
+{
|
||||
+ Debug::debug()->trace("Framebuffers::size()");
|
||||
+
|
||||
+ unsigned long ret = 0UL;
|
||||
+
|
||||
+ StringVector v = m_fbdir.listDir(DirFilter());
|
||||
+ for (StringVector::const_iterator it = v.begin(); it != v.end(); ++it) {
|
||||
+ Debug::debug()->dbg("Found framebuffer: %s", it->c_str());
|
||||
+
|
||||
+ FilePath fp(m_fbdir);
|
||||
+ fp.appendPath(*it);
|
||||
+ Framebuffer fb(fp.c_str());
|
||||
+ ret += fb.size();
|
||||
+ }
|
||||
+
|
||||
+ Debug::debug()->dbg("Total size of all framebuffers: %lu bytes", ret);
|
||||
+ return ret;
|
||||
+}
|
||||
+
|
||||
+//}}}
|
||||
//{{{ Calibrate ----------------------------------------------------------------
|
||||
|
||||
// -----------------------------------------------------------------------------
|
||||
@@ -345,6 +490,14 @@ void Calibrate::execute()
|
||||
// Run-time kernel requirements
|
||||
required = KERNEL_KB + ramfs + KERNEL_DYNAMIC_KB;
|
||||
|
||||
+ try {
|
||||
+ Framebuffers fb;
|
||||
+ required += fb.size() / 1024UL;
|
||||
+ } catch(KError e) {
|
||||
+ Debug::debug()->dbg("Cannot get framebuffer size: %s", e.what());
|
||||
+ required += DEF_FRAMEBUFFER_KB;
|
||||
+ }
|
||||
+
|
||||
// Add memory based on CPU count
|
||||
unsigned long cpus;
|
||||
if (CAN_REDUCE_CPUS) {
|
@ -1,33 +0,0 @@
|
||||
Date: Wed Sep 24 13:56:42 2014 +0200
|
||||
From: Petr Tesarik <ptesarik@suse.cz>
|
||||
Subject: Enable FADUMP on ppc64le
|
||||
References: bsc#889192
|
||||
Patch-mainline: v0.8.16
|
||||
Git-commit: 69bce53e9a02145e857bd4c36effcaf560a8f8cf
|
||||
|
||||
The FADUMP feature is only available on IBM POWER systems, but the
|
||||
new little-endian variant has a new CMAKE_SYSTEM_PROCESSOR value.
|
||||
|
||||
Signed-off-by: Petr Tesarik <ptesarik@suse.cz>
|
||||
|
||||
---
|
||||
CMakeLists.txt | 6 +++---
|
||||
1 file changed, 3 insertions(+), 3 deletions(-)
|
||||
|
||||
--- a/CMakeLists.txt
|
||||
+++ b/CMakeLists.txt
|
||||
@@ -144,11 +144,11 @@ ENDIF(NOT LIBSSL_FOUND)
|
||||
# Check for FADUMP
|
||||
#
|
||||
|
||||
-IF(“${CMAKE_SYSTEM_PROCESSOR}” STREQUAL “ppc64”)
|
||||
+IF("${CMAKE_SYSTEM_PROCESSOR}" MATCHES "ppc64(le)?")
|
||||
SET(HAVE_FADUMP TRUE)
|
||||
-ELSE(“${CMAKE_SYSTEM_PROCESSOR}” STREQUAL “ppc64”)
|
||||
+ELSE()
|
||||
SET(HAVE_FADUMP FALSE)
|
||||
-ENDIF(“${CMAKE_SYSTEM_PROCESSOR}” STREQUAL “ppc64”)
|
||||
+ENDIF()
|
||||
|
||||
#
|
||||
# Configure file
|
@ -1,44 +0,0 @@
|
||||
Date: Fri Sep 26 08:10:38 2014 +0200
|
||||
From: Petr Tesarik <ptesarik@suse.cz>
|
||||
Subject: Always turn on fadump if KDUMP_FADUMP is true
|
||||
References: bsc#889192
|
||||
Patch-mainline: v0.8.16
|
||||
Git-commit: 1f7e52d908f0ad2b2a33cdd374a8888bcf6f8234
|
||||
|
||||
The problem is that fadump-related files under /sys/kernel are
|
||||
created only if the kernel is booted with fadump=on. So, this
|
||||
is a chicken-and-egg problem, and a reboot is always necessary if
|
||||
the current kernel is loaded without fadump=on.
|
||||
|
||||
However, if the command line is not modified here, the admin must
|
||||
first add fadump=on to the bootloader command line, and then enable
|
||||
KDUMP_FADUMP, i.e. enable it in two different places. If the command
|
||||
line is modified unconditionally, there is only one "big switch" for
|
||||
FADUMP.
|
||||
|
||||
Signed-off-by: Petr Tesarik <ptesarik@suse.cz>
|
||||
|
||||
---
|
||||
init/rc.kdump.functions | 4 ++--
|
||||
1 file changed, 2 insertions(+), 2 deletions(-)
|
||||
|
||||
--- a/init/rc.kdump.functions
|
||||
+++ b/init/rc.kdump.functions
|
||||
@@ -259,6 +259,8 @@ function fadump_bootloader()
|
||||
# Update fadump configuration
|
||||
function load_kdump_fadump()
|
||||
{
|
||||
+ fadump_bootloader on
|
||||
+
|
||||
if ! fadump_enabled; then
|
||||
echo ": fadump is not enabled in the kernel."
|
||||
rc_status -s
|
||||
@@ -266,8 +268,6 @@ function load_kdump_fadump()
|
||||
rc_exit
|
||||
fi
|
||||
|
||||
- fadump_bootloader on
|
||||
-
|
||||
# The kernel fails with EINVAL if registered already
|
||||
# (see bnc#814780)
|
||||
if [ "$(cat $FADUMP_REGISTERED)" != "1" ]; then
|
@ -1,59 +0,0 @@
|
||||
Date: Fri Sep 26 15:50:05 2014 +0200
|
||||
From: Petr Tesarik <ptesarik@suse.cz>
|
||||
Subject: Keep /sysroot mount point if fadump is on
|
||||
References: bsc#889192
|
||||
Patch-mainline: v0.8.16
|
||||
Git-commit: 4c1a5aac3df1e4ea2f0509c5b653083a02c1d4dc
|
||||
|
||||
As FADUMP uses the normal initrd, the system must be able to boot up
|
||||
eventually, so normal mount points are required.
|
||||
|
||||
But mounting the same device twice may not be possible because of
|
||||
conflicting mount options, so system root may not be mountable under
|
||||
/kdump. In order to keep the kdump-specific mount point hierarchy,
|
||||
convert any such mount to a bind mount from /sysroot.
|
||||
|
||||
Signed-off-by: Petr Tesarik <ptesarik@suse.cz>
|
||||
|
||||
---
|
||||
init/module-setup.sh | 20 ++++++++++++++++++--
|
||||
1 file changed, 18 insertions(+), 2 deletions(-)
|
||||
|
||||
--- a/init/module-setup.sh
|
||||
+++ b/init/module-setup.sh
|
||||
@@ -126,17 +126,33 @@ install() {
|
||||
kdump_map_mpath_wwid
|
||||
for_each_host_dev_and_slaves_all kdump_add_mpath_dev
|
||||
|
||||
+ # Convert system root mounts to bind mounts
|
||||
+ if [ "$KDUMP_FADUMP" = "yes" ] ; then
|
||||
+ local i line
|
||||
+ for i in "${!fstab_lines[@]}"
|
||||
+ do
|
||||
+ line=( ${fstab_lines[i]} )
|
||||
+ if [ "${line[1]%/*}" = "/kdump" ] ; then
|
||||
+ fstab_lines[i]="/sysroot ${line[1]} none bind"
|
||||
+ fi
|
||||
+ done
|
||||
+ fi
|
||||
+
|
||||
kdump_setup_files "$initdir" "$kdump_mpath_wwids"
|
||||
|
||||
if dracut_module_included "systemd" ; then
|
||||
- rm -f "${initdir}/$systemdutildir"/system-generators/dracut-rootfs-generator
|
||||
+ [ "$KDUMP_FADUMP" != yes ] && \
|
||||
+ rm -f "${initdir}/$systemdutildir"/system-generators/dracut-rootfs-generator
|
||||
+
|
||||
inst_simple /lib/kdump/save_dump.sh
|
||||
inst_simple "$moddir/kdump-save.service" \
|
||||
"$systemdsystemunitdir"/kdump-save.service
|
||||
ln_r "$systemdsystemunitdir"/kdump-save.service \
|
||||
"$systemdsystemunitdir"/initrd.target.wants/kdump-save.service
|
||||
else
|
||||
- inst_hook mount 30 "$moddir/mount-kdump.sh"
|
||||
+ [ "$KDUMP_FADUMP" != yes ] && \
|
||||
+ inst_hook mount 30 "$moddir/mount-kdump.sh"
|
||||
+
|
||||
inst_hook pre-pivot 90 /lib/kdump/save_dump.sh
|
||||
fi
|
||||
|
@ -1,164 +0,0 @@
|
||||
From: Petr Tesarik <ptesarik@suse.cz>
|
||||
Date: Mon Sep 22 17:23:49 2014 +0200
|
||||
Subject: Get required multipath wwids from sysfs
|
||||
References: bnc#883883
|
||||
Patch-mainline: v0.8.16
|
||||
Git-commit: 4aa46801a53070dc0b0c27f4247cdc8e2b678694
|
||||
Git-commit: bb073caafcecfe667fba528c170f89bb29447a1d
|
||||
|
||||
The dracut code path must use for_each_host_dev_and_slaves_all to
|
||||
find multipath devices that are "hidden" beneath e.g. an LVM volume.
|
||||
That will iterate over all devices in the chain down to each physical
|
||||
device. Note that /lib/udev/scsi_id sends a low-level SCSI command to
|
||||
the device to find out the WWID. If it sends it to an unreachable
|
||||
device in an active-passive multipath setup, it may hang indefinitely.
|
||||
|
||||
But the WWID is already available as the name of the multipath device,
|
||||
so we can get it from the kernel via sysfs.
|
||||
|
||||
Signed-off-by: Petr Tesarik <ptesarik@suse.cz>
|
||||
|
||||
---
|
||||
init/module-setup.sh | 18 +++++++++++++++++-
|
||||
init/setup-kdump.functions | 41 +++++++++++++++++++++++++++--------------
|
||||
init/setup-kdump.sh | 16 +++++++++++++++-
|
||||
3 files changed, 59 insertions(+), 16 deletions(-)
|
||||
|
||||
--- a/init/module-setup.sh
|
||||
+++ b/init/module-setup.sh
|
||||
@@ -11,12 +11,28 @@ depends() {
|
||||
echo drm
|
||||
}
|
||||
|
||||
+kdump_add_mpath_dev() {
|
||||
+ local _major=${1%:*}
|
||||
+ local _minor=${1#*:}
|
||||
+ local _wwid
|
||||
+
|
||||
+ eval _wwid=\$kdump_mpath_wwid_${_major}_${_minor}
|
||||
+ if [ -n "$_wwid" ] ; then
|
||||
+ kdump_mpath_wwids+=$(printf "%q " "wwid $_wwid")
|
||||
+ fi
|
||||
+}
|
||||
+
|
||||
install() {
|
||||
# Get configuration
|
||||
kdump_get_config || return 1
|
||||
kdump_import_targets
|
||||
|
||||
- kdump_setup_files "$initdir" "${!host_fs_types[*]}"
|
||||
+ # Get a list of required multipath devices
|
||||
+ local kdump_mpath_wwids
|
||||
+ kdump_map_mpath_wwid
|
||||
+ for_each_host_dev_and_slaves_all kdump_add_mpath_dev
|
||||
+
|
||||
+ kdump_setup_files "$initdir" "$kdump_mpath_wwids"
|
||||
|
||||
if dracut_module_included "systemd" ; then
|
||||
rm -f "${initdir}/$systemdutildir"/system-generators/dracut-rootfs-generator
|
||||
--- a/init/setup-kdump.functions
|
||||
+++ b/init/setup-kdump.functions
|
||||
@@ -542,24 +542,36 @@ function kdump_modify_config() #
|
||||
} # }}}
|
||||
|
||||
#
|
||||
+# Build a mapping between multipath devices and their wwid
|
||||
+# This map would be best stored in an associative array, but
|
||||
+# then bash 4.0+ would be needed (and SLES11 has bash 3.2).
|
||||
+#
|
||||
+# Output variables:
|
||||
+# kdump_mpath_wwid_$major_$minor wwid of the given major/minor device
|
||||
+function kdump_map_mpath_wwid() # {{{
|
||||
+{
|
||||
+ local f _dir _uuid _wwid _dev
|
||||
+ for f in /sys/block/*/dm/uuid ; do
|
||||
+ eval "_uuid=\$(<$f)" 2>/dev/null
|
||||
+ [[ "$_uuid" = mpath-* ]] || continue
|
||||
+ _dir="${f%/dm/uuid}"
|
||||
+ _wwid=$(<"$_dir"/dm/name)
|
||||
+ _dev=$(<"$_dir"/dev)
|
||||
+ eval kdump_mpath_wwid_${_dev/:/_}=\$_wwid
|
||||
+ done
|
||||
+} # }}}
|
||||
+
|
||||
+#
|
||||
# Keep only required devices in multipath.conf
|
||||
#
|
||||
# Parameters:
|
||||
-# 1) devices: list of all required block devices
|
||||
+# 1) devices: list of all required devices (multipath.conf syntax)
|
||||
# Output:
|
||||
# filtered multipath.conf
|
||||
function kdump_modify_multipath() # {{{
|
||||
{
|
||||
- local devices="$1"
|
||||
- local i bd scsi_id
|
||||
local -a wwids
|
||||
-
|
||||
- i=0
|
||||
- for bd in $devices ; do
|
||||
- scsi_id=$(/lib/udev/scsi_id --whitelisted --device="$bd")
|
||||
- [ -z "$scsi_id" ] && continue
|
||||
- wwids[i++]="wwid "\""$scsi_id"\"
|
||||
- done
|
||||
+ eval wwids="($1)"
|
||||
kdumptool multipath "${wwids[@]}" \
|
||||
< /etc/multipath.conf
|
||||
} # }}}
|
||||
@@ -633,8 +645,9 @@ function kdump_init_dirs() # {{{
|
||||
#
|
||||
# Set up or create all necessary files
|
||||
# Parameters:
|
||||
-# 1) outdir: initrd temporary root
|
||||
-# 2) dumpdevs: space-separated list of all block devices required by kdump
|
||||
+# 1) outdir: initrd temporary root
|
||||
+# 2) mpathdevs: space-separated list of all multipath devices required
|
||||
+# by kdump (using multipath.conf syntax)
|
||||
# Input variables:
|
||||
# KDUMP_* see kdump_get_config
|
||||
# kdump_mnt[] mountpoints in kdump environment
|
||||
@@ -643,7 +656,7 @@ function kdump_init_dirs() # {{{
|
||||
function kdump_setup_files() # {{{
|
||||
{
|
||||
local outdir="${1%/}"
|
||||
- local dumpdevs="$2"
|
||||
+ local mpathdevs="$2"
|
||||
local kdump_over_ssh
|
||||
|
||||
#
|
||||
@@ -673,7 +686,7 @@ function kdump_setup_files() # {
|
||||
# create modified multipath.conf
|
||||
#
|
||||
if [ -e /etc/multipath.conf ] ; then
|
||||
- kdump_modify_multipath "$dumpdevs" > "${outdir}/etc/multipath.conf"
|
||||
+ kdump_modify_multipath "$mpathdevs" > "${outdir}/etc/multipath.conf"
|
||||
fi
|
||||
|
||||
return 0
|
||||
--- a/init/setup-kdump.sh
|
||||
+++ b/init/setup-kdump.sh
|
||||
@@ -28,9 +28,23 @@ fi
|
||||
# /lib/kdump/setup-kdump.functions was sourced from setup-kdumpfs.sh already
|
||||
|
||||
#
|
||||
+# Get a list of required multipath devices
|
||||
+#
|
||||
+mpath_wwids=
|
||||
+kdump_map_mpath_wwid
|
||||
+for bd in $blockdev ; do
|
||||
+ update_blockdev $bd
|
||||
+ [ $blockmajor -ge 0 -a $blockminor -ge 0 ] || continue
|
||||
+ eval _wwid=\$kdump_mpath_wwid_${blockmajor}_${blockminor}
|
||||
+ if [ -n "$_wwid" ] ; then
|
||||
+ mpath_wwids="$mpath_wwids"$(printf "%q " "wwid $_wwid")
|
||||
+ fi
|
||||
+done
|
||||
+
|
||||
+#
|
||||
# Copy or create all necessary files for the initrd
|
||||
#
|
||||
-kdump_setup_files "$tmp_mnt" "$blockdev"
|
||||
+kdump_setup_files "$tmp_mnt" "$mpath_wwids"
|
||||
|
||||
#
|
||||
# check if extra modules are needed
|
@ -1,238 +0,0 @@
|
||||
From: Petr Tesarik <ptesarik@suse.cz>
|
||||
Date: Tue Sep 23 11:02:22 2014 +0200
|
||||
Subject: Move dracut network command line to module-setup.sh
|
||||
References: bnc#885897
|
||||
Patch-mainline: v0.8.16
|
||||
Git-commit: 16e3640c2bcbb08fb31c7c3da03a8fb726d7686a
|
||||
|
||||
This is mostly a cleanup to allow adding more code to module-setup.sh
|
||||
without too much duplication.
|
||||
|
||||
Signed-off-by: Petr Tesarik <ptesarik@suse.cz>
|
||||
|
||||
---
|
||||
init/mkdumprd | 54 -------------------------------
|
||||
init/module-setup.sh | 76 ++++++++++++++++++++++++++++++++++++++++++---
|
||||
init/setup-kdump.functions | 19 ++++++++++-
|
||||
3 files changed, 90 insertions(+), 59 deletions(-)
|
||||
|
||||
--- a/init/mkdumprd
|
||||
+++ b/init/mkdumprd
|
||||
@@ -120,8 +120,6 @@ function run_mkinitrd()
|
||||
# Create a new initrd using dracut {{{
|
||||
function run_dracut()
|
||||
{
|
||||
- local modules="kdump"
|
||||
-
|
||||
DRACUT_ARGS="--force --hostonly --omit 'plymouth resume usrmount'"
|
||||
DRACUT_ARGS="$DRACUT_ARGS --compress='xz -0 --check=crc32'"
|
||||
|
||||
@@ -136,60 +134,10 @@ function run_dracut()
|
||||
i=$((i+1))
|
||||
done
|
||||
|
||||
- # Check for additional modules
|
||||
- neednet=
|
||||
- for protocol in "${kdump_Protocol[@]}" ; do
|
||||
- if [ "$protocol" = "nfs" ]; then
|
||||
- modules="$modules nfs"
|
||||
- fi
|
||||
- if [ "$protocol" = "cifs" -o "$protocol" = "smb" ]; then
|
||||
- modules="$modules cifs"
|
||||
- fi
|
||||
- if [ "$protocol" != "file" ]; then
|
||||
- neednet=y
|
||||
- fi
|
||||
- done
|
||||
-
|
||||
- # network configuration
|
||||
- if [ -n "$KDUMP_SMTP_SERVER" -a -n "$KDUMP_NOTIFICATION_TO" ]; then
|
||||
- neednet=y
|
||||
- fi
|
||||
- if [ "$KDUMP_NETCONFIG" = "auto" ] ; then
|
||||
- status_message "Network: auto"
|
||||
- if [ -n "$neednet" ]; then
|
||||
- DRACUT_ARGS+=" --kernel-cmdline 'rd.neednet=1 ip=any'"
|
||||
- modules="$modules network"
|
||||
- fi
|
||||
- elif [ -z "$KDUMP_NETCONFIG" ] ; then
|
||||
- status_message "Network: none"
|
||||
- else
|
||||
- interface=$(echo "$KDUMP_NETCONFIG" | cut -d ':' -f 1)
|
||||
- mode=$(echo "$KDUMP_NETCONFIG" | cut -d ':' -f 2)
|
||||
-
|
||||
- if [ "$interface" = "default" ] ; then
|
||||
- interface=$( kdump_default_netdev )
|
||||
- status_message "Network interface: $interface (default)"
|
||||
- else
|
||||
- status_message "Network interface: $interface"
|
||||
- fi
|
||||
-
|
||||
- if [ "$mode" = "static" ] ; then
|
||||
- ipcfg="$(kdump_ip_config "$interface")"
|
||||
- hwaddr=$(cat "/sys/class/net/$interface/address")
|
||||
- status_message "Network mode: Static IP"
|
||||
- DRACUT_ARGS+=" --kernel-cmdline 'rd.neednet=1 ip=$ipcfg::$hwaddr'"
|
||||
- else
|
||||
- status_message "Network mode: Automatic IP (DHCP)"
|
||||
- DRACUT_ARGS+=" --kernel-cmdline 'rd.neednet=1 ip=${interface}:dhcp'"
|
||||
- fi
|
||||
- modules="$modules network"
|
||||
- fi
|
||||
-
|
||||
# Make resolved variables visible to the dracut module
|
||||
kdump_export_targets
|
||||
|
||||
- DRACUT_ARGS="$DRACUT_ARGS --add '$modules' $INITRD $KERNELVERSION"
|
||||
- status_message "Calling dracut $DRACUT_ARGS"
|
||||
+ DRACUT_ARGS="$DRACUT_ARGS --add 'kdump' $INITRD $KERNELVERSION"
|
||||
echo "Regenerating kdump initrd ..." >&2
|
||||
eval "bash -$- dracut $DRACUT_ARGS"
|
||||
} # }}}
|
||||
--- a/init/module-setup.sh
|
||||
+++ b/init/module-setup.sh
|
||||
@@ -3,12 +3,51 @@
|
||||
|
||||
. /lib/kdump/setup-kdump.functions
|
||||
|
||||
+kdump_check_net() {
|
||||
+ kdump_neednet=
|
||||
+ for protocol in "${kdump_Protocol[@]}" ; do
|
||||
+ if [ "$protocol" != "file" ]; then
|
||||
+ kdump_neednet=y
|
||||
+ fi
|
||||
+ done
|
||||
+
|
||||
+ # network configuration
|
||||
+ if [ -n "$KDUMP_SMTP_SERVER" -a -n "$KDUMP_NOTIFICATION_TO" ]; then
|
||||
+ kdump_neednet=y
|
||||
+ fi
|
||||
+
|
||||
+ # network explicitly disabled in configuration?
|
||||
+ [ -z "$KDUMP_NETCONFIG" ] && kdump_neednet=
|
||||
+}
|
||||
+
|
||||
check() {
|
||||
+ # Get configuration
|
||||
+ kdump_import_targets || return 1
|
||||
+ kdump_get_config || return 1
|
||||
+ kdump_check_net
|
||||
+
|
||||
return 255
|
||||
}
|
||||
|
||||
depends() {
|
||||
- echo drm
|
||||
+ local -A _modules
|
||||
+
|
||||
+ # drm is needed to get console output, but it is not included
|
||||
+ # automatically, because kdump does not use plymouth
|
||||
+ _modules[drm]=
|
||||
+
|
||||
+ [ "$kdump_neednet" = y ] && _modules[network]=
|
||||
+
|
||||
+ for protocol in "${kdump_Protocol[@]}" ; do
|
||||
+ if [ "$protocol" = "nfs" ]; then
|
||||
+ _modules[nfs]=
|
||||
+ fi
|
||||
+ if [ "$protocol" = "cifs" -o "$protocol" = "smb" ]; then
|
||||
+ _modules[cifs]=
|
||||
+ fi
|
||||
+ done
|
||||
+
|
||||
+ echo ${!_modules[@]}
|
||||
}
|
||||
|
||||
kdump_add_mpath_dev() {
|
||||
@@ -22,10 +61,39 @@ kdump_add_mpath_dev() {
|
||||
fi
|
||||
}
|
||||
|
||||
+kdump_cmdline_ip() {
|
||||
+ [ "$kdump_neednet" = y ] || return 0
|
||||
+
|
||||
+ echo -n "rd.neednet=1"
|
||||
+ if [ "$KDUMP_NETCONFIG" = "auto" ] ; then
|
||||
+ echo -n " ip=any"
|
||||
+ else
|
||||
+ set -- ${KDUMP_NETCONFIG//:/ }
|
||||
+ local _if=$1
|
||||
+ local _mode=$2
|
||||
+
|
||||
+ if [ "$_if" = "default" ] ; then
|
||||
+ _if=$(kdump_default_netdev)
|
||||
+ fi
|
||||
+ printf " %s" $(kdump_ifname_config "$_if")
|
||||
+
|
||||
+ if [ "$_mode" = "static" ] ; then
|
||||
+ printf " %s" $(kdump_ip_config "$_if")
|
||||
+ else
|
||||
+ echo -n " ip=${_if}:dhcp"
|
||||
+ fi
|
||||
+ fi
|
||||
+}
|
||||
+
|
||||
+cmdline() {
|
||||
+ kdump_cmdline_ip
|
||||
+}
|
||||
+
|
||||
install() {
|
||||
- # Get configuration
|
||||
- kdump_get_config || return 1
|
||||
- kdump_import_targets
|
||||
+ if [[ $hostonly_cmdline == "yes" ]] ; then
|
||||
+ local _cmdline=$(cmdline)
|
||||
+ [ -n "$_cmdline" ] && printf "%s\n" "$_cmdline" >> "${initdir}/etc/cmdline.d/99kdump.conf"
|
||||
+ fi
|
||||
|
||||
# Get a list of required multipath devices
|
||||
local kdump_mpath_wwids
|
||||
--- a/init/setup-kdump.functions
|
||||
+++ b/init/setup-kdump.functions
|
||||
@@ -193,6 +193,20 @@ function kdump_netdev_mode() # {
|
||||
} # }}}
|
||||
|
||||
#
|
||||
+# Get the ifname parameter for a given device
|
||||
+#
|
||||
+# Parameters:
|
||||
+# 1) device device name
|
||||
+# Output:
|
||||
+# ifname corresponding ifname= initrd parameter (or empty)
|
||||
+function kdump_ifname_config() # {{{
|
||||
+{
|
||||
+ local iface="$1"
|
||||
+ local hwaddr=$(<"/sys/class/net/$iface/address")
|
||||
+ [ -n "$hwaddr" ] && echo "ifname=$iface:$hwaddr"
|
||||
+} # }}}
|
||||
+
|
||||
+#
|
||||
# Convert a CIDR prefix to IPv4 netmask
|
||||
#
|
||||
# Parameters:
|
||||
@@ -219,7 +233,7 @@ kdump_prefix2netmask() { # {{{
|
||||
# Get the ip= parameter for a given device
|
||||
#
|
||||
# Parameters:
|
||||
-# 1) device device name (use default if empty)
|
||||
+# 1) device device name
|
||||
# Output:
|
||||
# ip configuration string that can be used for the ip= initrd parameter
|
||||
function kdump_ip_config() # {{{
|
||||
@@ -249,7 +263,7 @@ function kdump_ip_config() # {{{
|
||||
gwaddr=$(ip route show 0/0 | sed -n 's/.* via \([^ ]*\).*/\1/p')
|
||||
hostname=$(hostname)
|
||||
|
||||
- echo "$ipaddr:$peeraddr:$gwaddr:$netmask:$hostname:$iface:none"
|
||||
+ echo "ip=$ipaddr:$peeraddr:$gwaddr:$netmask:$hostname:$iface:none"
|
||||
} # }}}
|
||||
|
||||
#
|
||||
@@ -311,6 +325,7 @@ function kdump_import_targets()
|
||||
eval "kdump_Host=( $KDUMP_x_Host )"
|
||||
eval "kdump_Realpath=( $KDUMP_x_Realpath )"
|
||||
eval "kdump_mnt=( $KDUMP_x_mnt )"
|
||||
+ test ${#kdump_URL[@]} -gt 0
|
||||
} # }}}
|
||||
|
||||
#
|
@ -1,32 +0,0 @@
|
||||
From: Petr Tesarik <ptesarik@suse.cz>
|
||||
Date: Thu Sep 18 10:15:59 2014 +0200
|
||||
Subject: Remove root= and resume= from the kdump kernel command line
|
||||
References: bnc#883883
|
||||
Patch-mainline: v0.8.16
|
||||
Git-commit: 8caaba657548133d476b2a13fd5abb68314927c7
|
||||
|
||||
Resume from hibernation should never be even attempted in kdump.
|
||||
If using dracut, the module is even omitted from the initrd, so
|
||||
passing the command line option only consumes command line space.
|
||||
|
||||
The default root device is not needed either, because all required
|
||||
filesystems are handled by the mount dracut module. In fact, if the
|
||||
root filesystem is also mounted, it may be mounted twice.
|
||||
|
||||
Signed-off-by: Petr Tesarik <ptesarik@suse.cz>
|
||||
|
||||
---
|
||||
init/rc.kdump.functions | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
--- a/init/rc.kdump.functions
|
||||
+++ b/init/rc.kdump.functions
|
||||
@@ -108,7 +108,7 @@ function build_kdump_commandline()
|
||||
local nr_cpus=$(cpus_param "$kdump_kernel")
|
||||
commandline=$(
|
||||
remove_from_commandline \
|
||||
- 'crashkernel|splash|mem|BOOT_IMAGE|showopts|zfcp\.allow_lun_scan|hugepages|acpi_no_memhotplug|cgroup_disable' \
|
||||
+ 'root|resume|crashkernel|splash|mem|BOOT_IMAGE|showopts|zfcp\.allow_lun_scan|hugepages|acpi_no_memhotplug|cgroup_disable' \
|
||||
< /proc/cmdline)
|
||||
# Use deadline for saving the memory footprint
|
||||
commandline="$commandline elevator=deadline sysrq=yes reset_devices acpi_no_memhotplug cgroup_disable=memory"
|
@ -1,178 +0,0 @@
|
||||
From: Petr Tesarik <ptesarik@suse.cz>
|
||||
Date: Tue Sep 23 07:09:44 2014 +0200
|
||||
Subject: Split kdump_default_netdev()
|
||||
References: bnc#885897
|
||||
Patch-mainline: v0.8.16
|
||||
Git-commit: 4da0601f2edcef642da502db6f4299204365c631
|
||||
|
||||
This function did too many things, which are now split thus:
|
||||
|
||||
1. determine the default network interface
|
||||
-> kept in kdump_default_netdev
|
||||
|
||||
2. get the underlying physical devices of a bridge
|
||||
-> kdump_bridge_phys_dev
|
||||
|
||||
3. determine network interface operating mode
|
||||
-> kdump_netdev_mode
|
||||
|
||||
Signed-off-by: Petr Tesarik <ptesarik@suse.cz>
|
||||
|
||||
---
|
||||
init/mkdumprd | 1
|
||||
init/setup-kdump.functions | 94 +++++++++++++++++++++++++--------------------
|
||||
2 files changed, 54 insertions(+), 41 deletions(-)
|
||||
|
||||
--- a/init/mkdumprd
|
||||
+++ b/init/mkdumprd
|
||||
@@ -168,7 +168,6 @@ function run_dracut()
|
||||
|
||||
if [ "$interface" = "default" ] ; then
|
||||
interface=$( kdump_default_netdev )
|
||||
- interface="${interface% *}"
|
||||
status_message "Network interface: $interface (default)"
|
||||
else
|
||||
status_message "Network interface: $interface"
|
||||
--- a/init/setup-kdump.functions
|
||||
+++ b/init/setup-kdump.functions
|
||||
@@ -77,12 +77,10 @@ function kdump_wicked_conf() # {
|
||||
# Determine the default network device.
|
||||
#
|
||||
# Output:
|
||||
-# "$ifname $mode"
|
||||
-# ifname default network interface name (or empty if none)
|
||||
-# mode initialization mode ("static" or "dhcp")
|
||||
+# ifname default network interface name (or empty if none)
|
||||
function kdump_default_netdev() # {{{
|
||||
{
|
||||
- local ifname BOOTPROTO
|
||||
+ local ifname
|
||||
local inffile="/etc/install.inf"
|
||||
|
||||
# check current default routes
|
||||
@@ -95,7 +93,6 @@ function kdump_default_netdev()
|
||||
if [ -z "$ifname" -a -f "$inffile" ] ; then
|
||||
local dev hwaddr hwaddr2
|
||||
eval $( sed -ne '
|
||||
- s/^NetConfig: \(.*\)/BOOTPROTO=\1/p;
|
||||
s/^Netdevice: \(.*\)/ifname=\1/p;
|
||||
s/HWAddr: \(.*\)/hwaddr=\1/p' \
|
||||
"$inffile" )
|
||||
@@ -108,12 +105,53 @@ function kdump_default_netdev()
|
||||
done
|
||||
fi
|
||||
fi
|
||||
+ echo "$ifname"
|
||||
+} # }}}
|
||||
|
||||
- # if still not found, there is no network
|
||||
- if [ -z "$ifname" ] ; then
|
||||
- return 0
|
||||
+# Get the underlying physical devices of a bridge.
|
||||
+#
|
||||
+# Virtual devices (tap or vif) are ignored.
|
||||
+#
|
||||
+# Parameters:
|
||||
+# 1) ifname bridge interface name
|
||||
+# Output:
|
||||
+# ifnames list of underlying physical interfaces;
|
||||
+function kdump_bridge_phys_dev() # {{{
|
||||
+{
|
||||
+ local ifname="$1"
|
||||
+
|
||||
+ if [ -d "/sys/class/net/$ifname/bridge" -a \
|
||||
+ -d "/sys/class/net/$ifname/brif" ] ; then
|
||||
+
|
||||
+ local ifname2 count=0
|
||||
+ local -a res
|
||||
+ for ifname2 in "/sys/class/net/$ifname/brif"/*; do
|
||||
+ case "$(readlink -f "$ifname2")" in
|
||||
+ /sys/devices/virtual/*)
|
||||
+ continue
|
||||
+ esac
|
||||
+ res[count]="${ifname2##*/}"
|
||||
+ count=$(( count+1 ))
|
||||
+ done
|
||||
+ ifname=${res[@]}
|
||||
fi
|
||||
|
||||
+ echo "$ifname"
|
||||
+} # }}}
|
||||
+
|
||||
+#
|
||||
+# Determine the default network mode of a given device.
|
||||
+#
|
||||
+# Parameters:
|
||||
+# 1) ifname network interface name
|
||||
+# Output:
|
||||
+# mode initialization mode ("static" or "dhcp")
|
||||
+function kdump_netdev_mode() # {{{
|
||||
+{
|
||||
+ local ifname="$1"
|
||||
+ local inffile="/etc/install.inf"
|
||||
+ local BOOTPROTO
|
||||
+
|
||||
# get mode using wicked if possible
|
||||
if [ -n "$(type -P wicked)" -a \
|
||||
"$(kdump_wicked_conf "$ifname" name)" = "$ifname" ]
|
||||
@@ -135,6 +173,12 @@ function kdump_default_netdev()
|
||||
fi
|
||||
fi
|
||||
|
||||
+ # try install.conf
|
||||
+ if [ -z "$BOOTPROTO" ] ; then
|
||||
+ eval $( sed -ne 's/^NetConfig: \(.*\)/BOOTPROTO=\1/p;' \
|
||||
+ "$inffile" )
|
||||
+ fi
|
||||
+
|
||||
# if not found, look if there is a dhcp daemon for the interface
|
||||
if [ -z "$BOOTPROTO" ] ; then
|
||||
if [ -n "$(ps -C dhclient,dhclient6,dhcpcd -o cmd= |
|
||||
@@ -145,31 +189,7 @@ function kdump_default_netdev()
|
||||
fi
|
||||
fi
|
||||
|
||||
- # if the interface is a bridge, then try to use the underlying interface
|
||||
- # if it is the only non-virtual interface (not tap or vif)
|
||||
- if [ -d "/sys/class/net/$ifname/bridge" -a \
|
||||
- -d "/sys/class/net/$ifname/brif" ] ; then
|
||||
-
|
||||
- local ifname2 res count=0
|
||||
- for ifname2 in "/sys/class/net/$ifname/brif"/*; do
|
||||
- case "$(readlink -f "$ifname2")" in
|
||||
- /sys/devices/virtual/*)
|
||||
- continue
|
||||
- esac
|
||||
- res="${ifname2##*/}"
|
||||
- count=$(( count+1 ))
|
||||
- done
|
||||
-
|
||||
- if [ "$count" -ne 1 ] ; then
|
||||
- echo >&2 ">>> WARNING: $ifname is a bridge with more than one"
|
||||
- echo >&2 ">>> underlying interface. Please specify the device"
|
||||
- echo >&2 ">>> in KDUMP_NETCONFIG manually."
|
||||
- else
|
||||
- ifname="$res"
|
||||
- fi
|
||||
- fi
|
||||
-
|
||||
- echo "$ifname $BOOTPROTO"
|
||||
+ echo "$BOOTPROTO"
|
||||
} # }}}
|
||||
|
||||
#
|
||||
@@ -205,13 +225,7 @@ kdump_prefix2netmask() { # {{{
|
||||
function kdump_ip_config() # {{{
|
||||
{
|
||||
local iface="$1"
|
||||
- if [ -z "$iface" ] ; then
|
||||
- iface=$( kdump_default_netdev )
|
||||
- iface="${iface% *}"
|
||||
- fi
|
||||
- [ -z "$iface" ] && return 1
|
||||
-
|
||||
- local ipaddr peeraddr gwaddr netmask hostname iface
|
||||
+ local ipaddr peeraddr gwaddr netmask hostname
|
||||
local family cidr rest
|
||||
local prefix
|
||||
while read family cidr rest
|
@ -1,131 +0,0 @@
|
||||
From: Petr Tesarik <ptesarik@suse.cz>
|
||||
Date: Thu Sep 18 15:40:37 2014 +0200
|
||||
Subject: Dracut-systemd support
|
||||
References: bnc#883883
|
||||
Patch-mainline: v0.8.16
|
||||
Git-commit: 9940475e501273ddac4a13fa2f4284b4121415de
|
||||
|
||||
Adjust the dracut module to work with the systemd module.
|
||||
|
||||
A new service is added to the initrd. I could not use a pre-pivot
|
||||
hook, because dracut-pre-pivot.service does not send the output
|
||||
to the terminal, so dump progress was not visible.
|
||||
|
||||
It is also necessary to avoid mounting the root filesystem. All
|
||||
filesystems needed by kdump are mounted under /kdump and set up
|
||||
with the --mount dracut option.
|
||||
|
||||
The system root mount can be generated in two ways:
|
||||
|
||||
a. by initrd-fstab-generator (if "root=" is passed on the kernel
|
||||
command line)
|
||||
|
||||
b. by dracut-rootfs-generator (if the root option is stored in
|
||||
/etc/cmdline.d/*)
|
||||
|
||||
The root= parameter is already removed from the command line, but
|
||||
it is always saved to /etc/cmdline.d/95root-dev.conf if dracut is
|
||||
called with --hostonly-cmdline. This is the default in SLES (cf.
|
||||
/etc/dracut.conf.d/01-dist.conf) and it is required to get correct
|
||||
configuration for many setups.
|
||||
|
||||
So, the only way to avoid mounting /sysroot is to remove the
|
||||
appropriate systemd generator from the initrd.
|
||||
|
||||
Signed-off-by: Petr Tesarik <ptesarik@suse.cz>
|
||||
|
||||
diff --git a/init/CMakeLists.txt b/init/CMakeLists.txt
|
||||
index 662197c..9cc8b71 100644
|
||||
--- a/init/CMakeLists.txt
|
||||
+++ b/init/CMakeLists.txt
|
||||
@@ -79,4 +79,15 @@ INSTALL(
|
||||
WORLD_READ WORLD_EXECUTE
|
||||
)
|
||||
|
||||
+INSTALL(
|
||||
+ FILES
|
||||
+ ${CMAKE_CURRENT_SOURCE_DIR}/kdump-save.service
|
||||
+ DESTINATION
|
||||
+ /usr/lib/dracut/modules.d/99kdump
|
||||
+ PERMISSIONS
|
||||
+ OWNER_READ OWNER_WRITE
|
||||
+ GROUP_READ
|
||||
+ WORLD_READ
|
||||
+)
|
||||
+
|
||||
# vim: set sw=4 ts=4 et:
|
||||
diff --git a/init/kdump-save.service b/init/kdump-save.service
|
||||
new file mode 100644
|
||||
index 0000000..ac527f4
|
||||
--- /dev/null
|
||||
+++ b/init/kdump-save.service
|
||||
@@ -0,0 +1,31 @@
|
||||
+# This file is part of systemd.
|
||||
+#
|
||||
+# systemd is free software; you can redistribute it and/or modify it
|
||||
+# under the terms of the GNU Lesser General Public License as published by
|
||||
+# the Free Software Foundation; either version 2.1 of the License, or
|
||||
+# (at your option) any later version.
|
||||
+
|
||||
+# See systemd.special(7) for details
|
||||
+
|
||||
+[Unit]
|
||||
+Description=save kernel crash dump
|
||||
+Documentation=man:kdump(7)
|
||||
+Wants=dracut-mount.service dracut-pre-pivot.service
|
||||
+After=dracut-mount.service dracut-pre-pivot.service
|
||||
+After=initrd.target
|
||||
+Before=initrd-cleanup.service
|
||||
+ConditionPathExists=/etc/initrd-release
|
||||
+ConditionPathExists=/proc/vmcore
|
||||
+
|
||||
+[Service]
|
||||
+Type=oneshot
|
||||
+ExecStart=/lib/kdump/save_dump.sh
|
||||
+StandardInput=tty
|
||||
+StandardOutput=tty
|
||||
+StandardError=tty
|
||||
+KillMode=process
|
||||
+RemainAfterExit=yes
|
||||
+
|
||||
+# Bash ignores SIGTERM, so we send SIGHUP instead, to ensure that bash
|
||||
+# terminates cleanly.
|
||||
+KillSignal=SIGHUP
|
||||
diff --git a/init/mkdumprd b/init/mkdumprd
|
||||
index 334786f..bb818d2 100755
|
||||
--- a/init/mkdumprd
|
||||
+++ b/init/mkdumprd
|
||||
@@ -122,7 +122,7 @@ function run_dracut()
|
||||
{
|
||||
local modules="kdump"
|
||||
|
||||
- DRACUT_ARGS="--force --hostonly --omit 'systemd plymouth resume usrmount'"
|
||||
+ DRACUT_ARGS="--force --hostonly --omit 'plymouth resume usrmount'"
|
||||
DRACUT_ARGS="$DRACUT_ARGS --compress='xz -0 --check=crc32'"
|
||||
|
||||
# add mount points
|
||||
diff --git a/init/module-setup.sh b/init/module-setup.sh
|
||||
index 06f9775..690de38 100644
|
||||
--- a/init/module-setup.sh
|
||||
+++ b/init/module-setup.sh
|
||||
@@ -18,8 +18,18 @@ install() {
|
||||
|
||||
kdump_setup_files "$initdir" "${!host_fs_types[*]}"
|
||||
|
||||
- inst_hook mount 30 "$moddir/mount-kdump.sh"
|
||||
- inst_hook pre-pivot 90 /lib/kdump/save_dump.sh
|
||||
+ if dracut_module_included "systemd" ; then
|
||||
+ rm -f "${initdir}/$systemdutildir"/system-generators/dracut-rootfs-generator
|
||||
+ inst_simple /lib/kdump/save_dump.sh
|
||||
+ inst_simple "$moddir/kdump-save.service" \
|
||||
+ "$systemdsystemunitdir"/kdump-save.service
|
||||
+ ln_r "$systemdsystemunitdir"/kdump-save.service \
|
||||
+ "$systemdsystemunitdir"/initrd.target.wants/kdump-save.service
|
||||
+ else
|
||||
+ inst_hook mount 30 "$moddir/mount-kdump.sh"
|
||||
+ inst_hook pre-pivot 90 /lib/kdump/save_dump.sh
|
||||
+ fi
|
||||
+
|
||||
inst_multiple makedumpfile makedumpfile-R.pl kdumptool \
|
||||
$KDUMP_REQUIRED_PROGRAMS
|
||||
inst_simple /etc/resolv.conf
|
@ -1,34 +0,0 @@
|
||||
From: Petr Tesarik <ptesarik@suse.cz>
|
||||
Date: Fri Sep 5 12:26:36 2014 +0200
|
||||
Subject: Use device from /etc/fstab to mount / and /boot
|
||||
References: bnc#892451
|
||||
Patch-mainline: v0.8.16
|
||||
Git-commit: 2895d4a8d24dd9b0a83e64cd58e464a3eaf7fe96
|
||||
|
||||
Since kdump_read_mounts() falls back to /proc/mounts, the root/boot
|
||||
mount points must not be changed if they were found in /etc/fstab
|
||||
previously.
|
||||
|
||||
Signed-off-by: Petr Tesarik <ptesarik@suse.cz>
|
||||
|
||||
diff --git a/init/setup-kdump.functions b/init/setup-kdump.functions
|
||||
index a676a82..2b96f8e 100644
|
||||
--- a/init/setup-kdump.functions
|
||||
+++ b/init/setup-kdump.functions
|
||||
@@ -388,12 +388,14 @@ function kdump_get_mountpoints() # {{{
|
||||
kdump_opts=( )
|
||||
|
||||
while read device mountpoint filesystem opts dummy ; do
|
||||
- if [ "$mountpoint" = "/" ] ; then
|
||||
+ if [ "$mountpoint" = "/" -a \
|
||||
+ -z "$rootmnt" ] ; then
|
||||
rootdev="$device"
|
||||
rootmnt="$mountpoint"
|
||||
rootfstype="$filesystem"
|
||||
rootopts="$opts"
|
||||
- elif [ "$mountpoint" = "/boot" ] ; then
|
||||
+ elif [ "$mountpoint" = "/boot" -a \
|
||||
+ -z "$bootmnt" ] ; then
|
||||
bootdev="$device"
|
||||
bootmnt="$mountpoint"
|
||||
bootfstype="$filesystem"
|
@ -1,3 +1,27 @@
|
||||
-------------------------------------------------------------------
|
||||
Wed Oct 5 07:53:00 UTC 2016 - ptesarik@suse.com
|
||||
|
||||
- Update to 0.8.16
|
||||
- Drop patches now in mainline:
|
||||
o 0001-multipath-Write-proper-regex-into-multipath-conf.patch
|
||||
o kdump-add-IPv6-KDUMP_NETCONFIG-modes.patch
|
||||
o kdump-bootloader-grub2.patch
|
||||
o kdump-calibrate-systemd-initramfs.patch
|
||||
o kdump-calibrate-systemd-runtime.patch
|
||||
o kdump-count-const-slabs.patch
|
||||
o kdump-count-framebuffer.patch
|
||||
o kdump-enable-fadump-ppc64le.patch
|
||||
o kdump-fadump-bootloader-always.patch
|
||||
o kdump-fadump-keep-sysroot.patch
|
||||
o kdump-get-multipath-wwid-from-sysfs.patch
|
||||
o kdump-move-network-setup-to-module-setup.patch
|
||||
o kdump-remove-root-and-resume.patch
|
||||
o kdump-split-kdump_default_netdev.patch
|
||||
o kdump-systemd-support.patch
|
||||
o kdump-use-fstab-device.patch
|
||||
- Drop obsolete patches:
|
||||
o kdump-0.8.15-fix-shebang.patch
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Thu Feb 11 14:54:58 UTC 2016 - rguenther@suse.com
|
||||
|
||||
|
@ -1,12 +0,0 @@
|
||||
[Unit]
|
||||
Description=Load kdump kernel on startup
|
||||
After=local-fs.target
|
||||
|
||||
[Service]
|
||||
Type=oneshot
|
||||
ExecStart=/etc/init.d/boot.kdump start
|
||||
ExecStop=/etc/init.d/boot.kdump stop
|
||||
RemainAfterExit=true
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
179
kdump.spec
179
kdump.spec
@ -28,76 +28,66 @@
|
||||
%endif
|
||||
%define _udevrulesdir %{_udevdir}/rules.d
|
||||
|
||||
Url: https://github.com/ptesarik/kdump
|
||||
%if 0%{?suse_version} > 1220
|
||||
%define uses_systemd 1
|
||||
%else
|
||||
%define uses_systemd 0
|
||||
%endif
|
||||
|
||||
Name: kdump
|
||||
Version: 0.8.15
|
||||
Version: 0.8.16
|
||||
Release: 0
|
||||
Requires: curl
|
||||
Requires: makedumpfile
|
||||
Requires: openssh
|
||||
Summary: Script for kdump
|
||||
License: GPL-2.0+
|
||||
Group: System/Kernel
|
||||
Url: https://github.com/ptesarik/kdump
|
||||
Source: %{name}-%{version}.tar.bz2
|
||||
Source2: %{name}-rpmlintrc
|
||||
Patch1: %{name}-cmake-compat.patch
|
||||
BuildRequires: asciidoc
|
||||
BuildRequires: cmake
|
||||
BuildRequires: gcc-c++
|
||||
BuildRequires: libblkid-devel
|
||||
BuildRequires: libcurl-devel
|
||||
BuildRequires: libelf-devel
|
||||
BuildRequires: libesmtp-devel
|
||||
BuildRequires: libopenssl-devel
|
||||
BuildRequires: libssh2-devel
|
||||
BuildRequires: libxslt
|
||||
BuildRequires: pkg-config
|
||||
BuildRequires: pkgconfig
|
||||
BuildRequires: udev
|
||||
BuildRequires: zlib-devel
|
||||
Requires: curl
|
||||
Requires: kexec-tools
|
||||
Requires: makedumpfile
|
||||
Requires: openssh
|
||||
PreReq: %insserv_prereq %fillup_prereq
|
||||
PreReq: coreutils
|
||||
PreReq: sed
|
||||
Recommends: cifs-utils
|
||||
Recommends: nfs-client
|
||||
#!BuildIgnore: fop
|
||||
%if 0%{?suse_version} > 1220
|
||||
# rename "kdump-helpers" (10.3) -> "kdump" (11.0/SP2)
|
||||
Provides: kdump-helpers = %{version}
|
||||
Obsoletes: kdump-helpers < %{version}
|
||||
# update should detect the split-off from kexec-tools
|
||||
Provides: kexec-tools:%{_initddir}/kdump
|
||||
BuildRoot: %{_tmppath}/%{name}-%{version}-build
|
||||
ExcludeArch: s390 ppc
|
||||
%if %{uses_systemd}
|
||||
BuildRequires: systemd
|
||||
%endif
|
||||
PreReq: %insserv_prereq %fillup_prereq
|
||||
%if 0%{?suse_version} > 1310
|
||||
PreReq: dracut
|
||||
%else
|
||||
PreReq: mkinitrd
|
||||
%endif
|
||||
Source: %{name}-%{version}.tar.bz2
|
||||
Source2: %{name}-rpmlintrc
|
||||
Source3: kdump.service
|
||||
Patch0: 0001-multipath-Write-proper-regex-into-multipath-conf.patch
|
||||
Patch1: %{name}-use-fstab-device.patch
|
||||
Patch2: %{name}-count-framebuffer.patch
|
||||
Patch3: %{name}-count-const-slabs.patch
|
||||
Patch4: %{name}-remove-root-and-resume.patch
|
||||
Patch5: %{name}-systemd-support.patch
|
||||
Patch6: %{name}-calibrate-systemd-runtime.patch
|
||||
Patch7: %{name}-calibrate-systemd-initramfs.patch
|
||||
Patch8: %{name}-get-multipath-wwid-from-sysfs.patch
|
||||
Patch9: %{name}-split-kdump_default_netdev.patch
|
||||
Patch10: %{name}-move-network-setup-to-module-setup.patch
|
||||
Patch11: %{name}-add-IPv6-KDUMP_NETCONFIG-modes.patch
|
||||
Patch12: %{name}-enable-fadump-ppc64le.patch
|
||||
Patch13: %{name}-fadump-bootloader-always.patch
|
||||
Patch14: %{name}-bootloader-grub2.patch
|
||||
Patch15: %{name}-fadump-keep-sysroot.patch
|
||||
Patch16: %{name}-0.8.15-fix-shebang.patch
|
||||
BuildRoot: %{_tmppath}/%{name}-%{version}-build
|
||||
# rename "kdump-helpers" (10.3) -> "kdump" (11.0/SP2)
|
||||
Provides: kdump-helpers = %{version}
|
||||
Obsoletes: kdump-helpers < %{version}
|
||||
# update should detect the split-off from kexec-tools
|
||||
Provides: kexec-tools:/etc/init.d/kdump
|
||||
Requires: kexec-tools
|
||||
%if 0%{?suse_version} > 1220
|
||||
%if %{uses_systemd}
|
||||
%systemd_requires
|
||||
%endif
|
||||
Recommends: nfs-client cifs-utils
|
||||
PreReq: coreutils sed
|
||||
ExcludeArch: s390 ppc
|
||||
|
||||
%description
|
||||
kdump is a package that includes several scripts for kdump, including
|
||||
the init script /etc/init.d/kdump and the configuration file for kdump.
|
||||
the kdump service and configuration files
|
||||
|
||||
The kernel package and this package are all that are required for a
|
||||
crash dump to occur. However, if you wish to debug the crash dump
|
||||
@ -112,125 +102,110 @@ For example, if you are debugging kernel-default, you will need:
|
||||
These packages are not needed to create the dump and can be installed
|
||||
after a crash dump has occured.
|
||||
|
||||
Authors:
|
||||
--------
|
||||
Bernhard Walle <bwalle@suse.de>
|
||||
|
||||
%prep
|
||||
%setup
|
||||
%patch0 -p1
|
||||
%setup -q
|
||||
%patch1 -p1
|
||||
%patch2 -p1
|
||||
%patch3 -p1
|
||||
%patch4 -p1
|
||||
%patch5 -p1
|
||||
%patch6 -p1
|
||||
%patch7 -p1
|
||||
%patch8 -p1
|
||||
%patch9 -p1
|
||||
%patch10 -p1
|
||||
%patch11 -p1
|
||||
%patch12 -p1
|
||||
%patch13 -p1
|
||||
%patch14 -p1
|
||||
%patch15 -p1
|
||||
%patch16 -p1
|
||||
|
||||
%build
|
||||
export CFLAGS="%optflags"
|
||||
export CXXFLAGS="%optflags -std=gnu++98"
|
||||
export CFLAGS="%{optflags}"
|
||||
export CXXFLAGS="%{optflags} -std=gnu++98"
|
||||
mkdir build
|
||||
cd build
|
||||
cmake -DCMAKE_INSTALL_PREFIX=%{_prefix} ..
|
||||
make
|
||||
make %{?_smp_mflags}
|
||||
cd -
|
||||
|
||||
%check
|
||||
cd build
|
||||
make test
|
||||
make %{?_smp_mflags} test
|
||||
|
||||
%install
|
||||
cd build
|
||||
make DESTDIR=$RPM_BUILD_ROOT install
|
||||
make %{?_smp_mflags} DESTDIR=%{buildroot} install
|
||||
cd -
|
||||
# move udev rules
|
||||
mkdir -p $RPM_BUILD_ROOT/%{_udevrulesdir}
|
||||
mv $RPM_BUILD_ROOT/%{_sysconfdir}/udev/rules.d/* $RPM_BUILD_ROOT/%{_udevrulesdir}/
|
||||
mkdir -p %{buildroot}/%{_udevrulesdir}
|
||||
mv %{buildroot}/%{_sysconfdir}/udev/rules.d/* %{buildroot}/%{_udevrulesdir}/
|
||||
# remove executable bit from non-binaries
|
||||
chmod -x $RPM_BUILD_ROOT/lib/kdump/setup-kdump.functions
|
||||
# symlink for init script
|
||||
mkdir -p $RPM_BUILD_ROOT/sbin
|
||||
ln -s /etc/init.d/boot.kdump $RPM_BUILD_ROOT/sbin/rckdump
|
||||
chmod -x %{buildroot}/lib/kdump/setup-kdump.functions
|
||||
# empty directory
|
||||
mkdir $RPM_BUILD_ROOT/var/crash
|
||||
mkdir %{buildroot}/var/crash
|
||||
%if 0%{?suse_version} > 1310
|
||||
rm -r $RPM_BUILD_ROOT/lib/mkinitrd
|
||||
rm -r %{buildroot}/lib/mkinitrd
|
||||
%endif
|
||||
|
||||
%if 0%{?suse_version} > 1220
|
||||
mkdir -p $RPM_BUILD_ROOT%{_unitdir}
|
||||
install -m644 %{S:3} $RPM_BUILD_ROOT%{_unitdir}
|
||||
# symlink for init script
|
||||
%if %{uses_systemd}
|
||||
rm %{buildroot}%{_initddir}/boot.kdump
|
||||
ln -s %{_sbindir}/service %{buildroot}%{_sbindir}/rckdump
|
||||
%else
|
||||
rm %{buildroot}/usr/lib/systemd/system/kdump.service
|
||||
rm %{buildroot}/usr/lib/systemd/system/kdump-rebuild-initrd.service
|
||||
ln -s ../..%{_initddir}/boot.kdump %{buildroot}%{_sbindir}/rckdump
|
||||
%endif
|
||||
|
||||
%if 0%{?suse_version} > 1220
|
||||
%if %{uses_systemd}
|
||||
%pre
|
||||
%service_add_pre kdump.service
|
||||
%service_add_pre kdump-rebuild-initrd.service
|
||||
%endif
|
||||
|
||||
%post
|
||||
# change only permission if the file exists before /etc/sysconfig/kdump
|
||||
# has been created from /var/adm/fillup-templates/sysconfig.kdump
|
||||
change_permission=0
|
||||
if [ ! -f /etc/sysconfig/kdump ] ; then
|
||||
if [ ! -f %{_sysconfdir}/sysconfig/kdump ] ; then
|
||||
change_permission=1
|
||||
fi
|
||||
%if %{uses_systemd}
|
||||
%{fillup_only -n kdump}
|
||||
%service_add_post kdump.service
|
||||
%service_add_post kdump-rebuild-initrd.service
|
||||
%else
|
||||
%{fillup_and_insserv -n kdump boot.kdump}
|
||||
%endif
|
||||
if [ "$change_permission" = 1 ]; then
|
||||
chmod 0600 /etc/sysconfig/kdump
|
||||
chmod 0600 %{_sysconfdir}/sysconfig/kdump
|
||||
fi
|
||||
# if /var/log/dump is empty, make it a symlink to /var/crash
|
||||
if test -d /var/log/dump && rmdir /var/log/dump >/dev/null 2>&1 ||
|
||||
! test -d /var/log/dump ; then
|
||||
ln -snf /var/crash /var/log/dump
|
||||
fi
|
||||
%if 0%{?suse_version} > 1220
|
||||
%service_add_post kdump.service
|
||||
%endif
|
||||
|
||||
%preun
|
||||
echo "Stopping kdump ..."
|
||||
%stop_on_removal boot.kdump
|
||||
%if 0%{?suse_version} > 1220
|
||||
%if %{uses_systemd}
|
||||
%service_del_preun kdump.service
|
||||
%service_del_preun kdump-rebuild-initrd.service
|
||||
%else
|
||||
%stop_on_removal boot.kdump
|
||||
%endif
|
||||
|
||||
%postun
|
||||
# force regeneration of kdumprd
|
||||
touch /etc/sysconfig/kdump
|
||||
touch %{_sysconfdir}/sysconfig/kdump
|
||||
# delete symbolic link
|
||||
rm /var/log/dump >/dev/null 2>&1 || true
|
||||
%if %{uses_systemd}
|
||||
%service_del_postun kdump.service
|
||||
%service_del_postun kdump-rebuild-initrd.service
|
||||
%else
|
||||
%restart_on_update boot.kdump
|
||||
%insserv_cleanup
|
||||
%if 0%{?suse_version} > 1220
|
||||
%service_del_postun kdump.service
|
||||
%endif
|
||||
|
||||
%clean
|
||||
rm -rf $RPM_BUILD_ROOT
|
||||
|
||||
%files
|
||||
%defattr(-,root,root)
|
||||
%doc ChangeLog COPYING README NEWS
|
||||
%{_sbindir}/kdumptool
|
||||
%{_sbindir}/mkdumprd
|
||||
%{_sbindir}/kdump-bootloader.pl
|
||||
%{_mandir}/man5/kdump.5.gz
|
||||
%{_mandir}/man7/kdump.7.gz
|
||||
%{_mandir}/man8/kdumptool.8.gz
|
||||
%{_mandir}/man8/mkdumprd.8.gz
|
||||
/sbin/rckdump
|
||||
%{_sysconfdir}/init.d/boot.kdump
|
||||
/var/adm/fillup-templates/sysconfig.kdump
|
||||
%{_mandir}/man5/kdump.5%{ext_man}
|
||||
%{_mandir}/man7/kdump.7%{ext_man}
|
||||
%{_mandir}/man8/kdumptool.8%{ext_man}
|
||||
%{_mandir}/man8/mkdumprd.8%{ext_man}
|
||||
%{_localstatedir}/adm/fillup-templates/sysconfig.kdump
|
||||
%if 0%{?suse_version} <= 1310
|
||||
/lib/mkinitrd/scripts/*-kdump.sh
|
||||
/lib/mkinitrd/scripts/setup-kdumpfs.sh
|
||||
@ -242,8 +217,12 @@ rm -rf $RPM_BUILD_ROOT
|
||||
%dir /lib/kdump
|
||||
/lib/kdump/*
|
||||
%{_udevrulesdir}/70-kdump.rules
|
||||
%if 0%{?suse_version} > 1220
|
||||
%if %{uses_systemd}
|
||||
%{_unitdir}/kdump.service
|
||||
%{_unitdir}/kdump-rebuild-initrd.service
|
||||
%else
|
||||
%{_sysconfdir}/init.d/boot.kdump
|
||||
%endif
|
||||
%{_sbindir}/rckdump
|
||||
|
||||
%changelog
|
||||
|
Loading…
Reference in New Issue
Block a user