[kexec-tools/f20] module-setup.sh: setup fence kdump environment
WANG Chao
wangchao at fedoraproject.org
Wed Jan 29 08:44:21 UTC 2014
commit b57db644076203d422179a25154176da0044d020
Author: WANG Chao <chaowang at redhat.com>
Date: Fri Dec 20 17:41:29 2013 +0800
module-setup.sh: setup fence kdump environment
This patch is used to setup fence kdump environment when building kdump
initrd:
1. Check if it's cluster and fence_kdump is configured.
2. Get all the nodes in the cluster and pass them to 2nd kernel via
/etc/fence_kdump_nodes
3. Setup network interface which will be used by fence kdump notifier in
2nd kernel.
4. Install fence kdump notifier (/usr/libexec/fence_kdump_send) to
initrd.
Signed-off-by: WANG Chao <chaowang at redhat.com>
Tested-by: Zhi Zou <zzou at redhat.com>
Tested-by: Marek Grac <mgrac at redhat.com>
Acked-by: Vivek Goyal <vgoyal at redhat.com>
dracut-module-setup.sh | 50 ++++++++++++++++++++++++++++++++++++++++++++++-
1 files changed, 48 insertions(+), 2 deletions(-)
---
diff --git a/dracut-module-setup.sh b/dracut-module-setup.sh
index c013430..a9d223f 100755
--- a/dracut-module-setup.sh
+++ b/dracut-module-setup.sh
@@ -20,6 +20,10 @@ depends() {
_dep="$_dep drm"
fi
+ if is_fence_kdump; then
+ _dep="$_dep network"
+ fi
+
echo $_dep
return 0
}
@@ -234,9 +238,19 @@ kdump_install_net() {
fi
kdump_setup_netdev "${_netdev}"
+
#save netdev used for kdump as cmdline
- echo "kdumpnic=${_netdev}" > ${initdir}/etc/cmdline.d/60kdumpnic.conf
- echo "bootdev=${_netdev}" > ${initdir}/etc/cmdline.d/70bootdev.conf
+ # Whoever calling kdump_install_net() is setting up the default gateway,
+ # ie. bootdev/kdumpnic. So don't override the setting if calling
+ # kdump_install_net() for another time. For example, after setting eth0 as
+ # the default gate way for network dump, eth1 in the fence kdump path will
+ # call kdump_install_net again and we don't want eth1 to be the default
+ # gateway.
+ if [ ! -f ${initdir}${initdir}/etc/cmdline.d/60kdumpnic.conf ] &&
+ [ ! -f ${initdir}/etc/cmdline.d/70bootdev.conf ]; then
+ echo "kdumpnic=${_netdev}" > ${initdir}/etc/cmdline.d/60kdumpnic.conf
+ echo "bootdev=${_netdev}" > ${initdir}/etc/cmdline.d/70bootdev.conf
+ fi
}
#install kdump.conf and what user specifies in kdump.conf
@@ -263,6 +277,7 @@ kdump_install_conf() {
esac
done < /etc/kdump.conf
+ kdump_check_fence_kdump
inst "/tmp/$$-kdump.conf" "/etc/kdump.conf"
rm -f /tmp/$$-kdump.conf
}
@@ -393,6 +408,37 @@ kdump_check_iscsi_targets () {
}
+# setup fence_kdump in cluster
+# setup proper network and install needed files
+# also preserve '[node list]' for 2nd kernel /etc/fence_kdump_nodes
+kdump_check_fence_kdump () {
+ local nodes
+ is_fence_kdump || return 1
+
+ # get cluster nodes from cluster cib, get interface and ip address
+ nodelist=`pcs cluster cib | xmllint --xpath "/cib/status/node_state/@uname" -`
+
+ # nodelist is formed as 'uname="node1" uname="node2" ... uname="nodeX"'
+ # we need to convert each to node1, node2 ... nodeX in each iteration
+ for node in ${nodelist}; do
+ # convert $node from 'uname="nodeX"' to 'nodeX'
+ eval $node
+ nodename=$uname
+ # Skip its own node name
+ if [ "$nodename" = `hostname` ]; then
+ continue
+ fi
+ nodes="$nodes $nodename"
+
+ kdump_install_net $nodename
+ done
+ echo
+
+ echo "$nodes" > ${initdir}/$FENCE_KDUMP_NODES
+ dracut_install $FENCE_KDUMP_SEND
+ dracut_install -o $FENCE_KDUMP_CONFIG
+}
+
install() {
kdump_install_conf
>"$initdir/lib/dracut/no-emergency-shell"
More information about the scm-commits
mailing list