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
|
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
|
%endif
|
||||||
%define _udevrulesdir %{_udevdir}/rules.d
|
%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
|
Name: kdump
|
||||||
Version: 0.8.15
|
Version: 0.8.16
|
||||||
Release: 0
|
Release: 0
|
||||||
Requires: curl
|
|
||||||
Requires: makedumpfile
|
|
||||||
Requires: openssh
|
|
||||||
Summary: Script for kdump
|
Summary: Script for kdump
|
||||||
License: GPL-2.0+
|
License: GPL-2.0+
|
||||||
Group: System/Kernel
|
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: asciidoc
|
||||||
BuildRequires: cmake
|
BuildRequires: cmake
|
||||||
BuildRequires: gcc-c++
|
BuildRequires: gcc-c++
|
||||||
|
BuildRequires: libblkid-devel
|
||||||
BuildRequires: libcurl-devel
|
BuildRequires: libcurl-devel
|
||||||
BuildRequires: libelf-devel
|
BuildRequires: libelf-devel
|
||||||
BuildRequires: libesmtp-devel
|
BuildRequires: libesmtp-devel
|
||||||
BuildRequires: libopenssl-devel
|
BuildRequires: libopenssl-devel
|
||||||
BuildRequires: libssh2-devel
|
|
||||||
BuildRequires: libxslt
|
BuildRequires: libxslt
|
||||||
BuildRequires: pkg-config
|
BuildRequires: pkgconfig
|
||||||
BuildRequires: udev
|
BuildRequires: udev
|
||||||
BuildRequires: zlib-devel
|
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
|
#!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
|
BuildRequires: systemd
|
||||||
%endif
|
%endif
|
||||||
PreReq: %insserv_prereq %fillup_prereq
|
|
||||||
%if 0%{?suse_version} > 1310
|
%if 0%{?suse_version} > 1310
|
||||||
PreReq: dracut
|
PreReq: dracut
|
||||||
%else
|
%else
|
||||||
PreReq: mkinitrd
|
PreReq: mkinitrd
|
||||||
%endif
|
%endif
|
||||||
Source: %{name}-%{version}.tar.bz2
|
%if %{uses_systemd}
|
||||||
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
|
|
||||||
%systemd_requires
|
%systemd_requires
|
||||||
%endif
|
%endif
|
||||||
Recommends: nfs-client cifs-utils
|
|
||||||
PreReq: coreutils sed
|
|
||||||
ExcludeArch: s390 ppc
|
|
||||||
|
|
||||||
%description
|
%description
|
||||||
kdump is a package that includes several scripts for kdump, including
|
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
|
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
|
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
|
These packages are not needed to create the dump and can be installed
|
||||||
after a crash dump has occured.
|
after a crash dump has occured.
|
||||||
|
|
||||||
Authors:
|
|
||||||
--------
|
|
||||||
Bernhard Walle <bwalle@suse.de>
|
|
||||||
|
|
||||||
%prep
|
%prep
|
||||||
%setup
|
%setup -q
|
||||||
%patch0 -p1
|
|
||||||
%patch1 -p1
|
%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
|
%build
|
||||||
export CFLAGS="%optflags"
|
export CFLAGS="%{optflags}"
|
||||||
export CXXFLAGS="%optflags -std=gnu++98"
|
export CXXFLAGS="%{optflags} -std=gnu++98"
|
||||||
mkdir build
|
mkdir build
|
||||||
cd build
|
cd build
|
||||||
cmake -DCMAKE_INSTALL_PREFIX=%{_prefix} ..
|
cmake -DCMAKE_INSTALL_PREFIX=%{_prefix} ..
|
||||||
make
|
make %{?_smp_mflags}
|
||||||
cd -
|
cd -
|
||||||
|
|
||||||
%check
|
%check
|
||||||
cd build
|
cd build
|
||||||
make test
|
make %{?_smp_mflags} test
|
||||||
|
|
||||||
%install
|
%install
|
||||||
cd build
|
cd build
|
||||||
make DESTDIR=$RPM_BUILD_ROOT install
|
make %{?_smp_mflags} DESTDIR=%{buildroot} install
|
||||||
cd -
|
cd -
|
||||||
# move udev rules
|
# move udev rules
|
||||||
mkdir -p $RPM_BUILD_ROOT/%{_udevrulesdir}
|
mkdir -p %{buildroot}/%{_udevrulesdir}
|
||||||
mv $RPM_BUILD_ROOT/%{_sysconfdir}/udev/rules.d/* $RPM_BUILD_ROOT/%{_udevrulesdir}/
|
mv %{buildroot}/%{_sysconfdir}/udev/rules.d/* %{buildroot}/%{_udevrulesdir}/
|
||||||
# remove executable bit from non-binaries
|
# remove executable bit from non-binaries
|
||||||
chmod -x $RPM_BUILD_ROOT/lib/kdump/setup-kdump.functions
|
chmod -x %{buildroot}/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
|
|
||||||
# empty directory
|
# empty directory
|
||||||
mkdir $RPM_BUILD_ROOT/var/crash
|
mkdir %{buildroot}/var/crash
|
||||||
%if 0%{?suse_version} > 1310
|
%if 0%{?suse_version} > 1310
|
||||||
rm -r $RPM_BUILD_ROOT/lib/mkinitrd
|
rm -r %{buildroot}/lib/mkinitrd
|
||||||
%endif
|
%endif
|
||||||
|
|
||||||
%if 0%{?suse_version} > 1220
|
# symlink for init script
|
||||||
mkdir -p $RPM_BUILD_ROOT%{_unitdir}
|
%if %{uses_systemd}
|
||||||
install -m644 %{S:3} $RPM_BUILD_ROOT%{_unitdir}
|
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
|
%endif
|
||||||
|
|
||||||
%if 0%{?suse_version} > 1220
|
%if %{uses_systemd}
|
||||||
%pre
|
%pre
|
||||||
%service_add_pre kdump.service
|
%service_add_pre kdump.service
|
||||||
|
%service_add_pre kdump-rebuild-initrd.service
|
||||||
%endif
|
%endif
|
||||||
|
|
||||||
%post
|
%post
|
||||||
# change only permission if the file exists before /etc/sysconfig/kdump
|
# change only permission if the file exists before /etc/sysconfig/kdump
|
||||||
# has been created from /var/adm/fillup-templates/sysconfig.kdump
|
# has been created from /var/adm/fillup-templates/sysconfig.kdump
|
||||||
change_permission=0
|
change_permission=0
|
||||||
if [ ! -f /etc/sysconfig/kdump ] ; then
|
if [ ! -f %{_sysconfdir}/sysconfig/kdump ] ; then
|
||||||
change_permission=1
|
change_permission=1
|
||||||
fi
|
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}
|
%{fillup_and_insserv -n kdump boot.kdump}
|
||||||
|
%endif
|
||||||
if [ "$change_permission" = 1 ]; then
|
if [ "$change_permission" = 1 ]; then
|
||||||
chmod 0600 /etc/sysconfig/kdump
|
chmod 0600 %{_sysconfdir}/sysconfig/kdump
|
||||||
fi
|
fi
|
||||||
# if /var/log/dump is empty, make it a symlink to /var/crash
|
# 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 ||
|
if test -d /var/log/dump && rmdir /var/log/dump >/dev/null 2>&1 ||
|
||||||
! test -d /var/log/dump ; then
|
! test -d /var/log/dump ; then
|
||||||
ln -snf /var/crash /var/log/dump
|
ln -snf /var/crash /var/log/dump
|
||||||
fi
|
fi
|
||||||
%if 0%{?suse_version} > 1220
|
|
||||||
%service_add_post kdump.service
|
|
||||||
%endif
|
|
||||||
|
|
||||||
%preun
|
%preun
|
||||||
echo "Stopping kdump ..."
|
echo "Stopping kdump ..."
|
||||||
%stop_on_removal boot.kdump
|
%if %{uses_systemd}
|
||||||
%if 0%{?suse_version} > 1220
|
|
||||||
%service_del_preun kdump.service
|
%service_del_preun kdump.service
|
||||||
|
%service_del_preun kdump-rebuild-initrd.service
|
||||||
|
%else
|
||||||
|
%stop_on_removal boot.kdump
|
||||||
%endif
|
%endif
|
||||||
|
|
||||||
%postun
|
%postun
|
||||||
# force regeneration of kdumprd
|
# force regeneration of kdumprd
|
||||||
touch /etc/sysconfig/kdump
|
touch %{_sysconfdir}/sysconfig/kdump
|
||||||
# delete symbolic link
|
# delete symbolic link
|
||||||
rm /var/log/dump >/dev/null 2>&1 || true
|
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
|
%restart_on_update boot.kdump
|
||||||
%insserv_cleanup
|
%insserv_cleanup
|
||||||
%if 0%{?suse_version} > 1220
|
|
||||||
%service_del_postun kdump.service
|
|
||||||
%endif
|
%endif
|
||||||
|
|
||||||
%clean
|
|
||||||
rm -rf $RPM_BUILD_ROOT
|
|
||||||
|
|
||||||
%files
|
%files
|
||||||
%defattr(-,root,root)
|
%defattr(-,root,root)
|
||||||
%doc ChangeLog COPYING README NEWS
|
%doc ChangeLog COPYING README NEWS
|
||||||
%{_sbindir}/kdumptool
|
%{_sbindir}/kdumptool
|
||||||
%{_sbindir}/mkdumprd
|
%{_sbindir}/mkdumprd
|
||||||
%{_sbindir}/kdump-bootloader.pl
|
%{_sbindir}/kdump-bootloader.pl
|
||||||
%{_mandir}/man5/kdump.5.gz
|
%{_mandir}/man5/kdump.5%{ext_man}
|
||||||
%{_mandir}/man7/kdump.7.gz
|
%{_mandir}/man7/kdump.7%{ext_man}
|
||||||
%{_mandir}/man8/kdumptool.8.gz
|
%{_mandir}/man8/kdumptool.8%{ext_man}
|
||||||
%{_mandir}/man8/mkdumprd.8.gz
|
%{_mandir}/man8/mkdumprd.8%{ext_man}
|
||||||
/sbin/rckdump
|
%{_localstatedir}/adm/fillup-templates/sysconfig.kdump
|
||||||
%{_sysconfdir}/init.d/boot.kdump
|
|
||||||
/var/adm/fillup-templates/sysconfig.kdump
|
|
||||||
%if 0%{?suse_version} <= 1310
|
%if 0%{?suse_version} <= 1310
|
||||||
/lib/mkinitrd/scripts/*-kdump.sh
|
/lib/mkinitrd/scripts/*-kdump.sh
|
||||||
/lib/mkinitrd/scripts/setup-kdumpfs.sh
|
/lib/mkinitrd/scripts/setup-kdumpfs.sh
|
||||||
@ -242,8 +217,12 @@ rm -rf $RPM_BUILD_ROOT
|
|||||||
%dir /lib/kdump
|
%dir /lib/kdump
|
||||||
/lib/kdump/*
|
/lib/kdump/*
|
||||||
%{_udevrulesdir}/70-kdump.rules
|
%{_udevrulesdir}/70-kdump.rules
|
||||||
%if 0%{?suse_version} > 1220
|
%if %{uses_systemd}
|
||||||
%{_unitdir}/kdump.service
|
%{_unitdir}/kdump.service
|
||||||
|
%{_unitdir}/kdump-rebuild-initrd.service
|
||||||
|
%else
|
||||||
|
%{_sysconfdir}/init.d/boot.kdump
|
||||||
%endif
|
%endif
|
||||||
|
%{_sbindir}/rckdump
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
Loading…
Reference in New Issue
Block a user