Hi,
I changed this from initial patch:
1) /etc/sysconfig/fence_kdump is optional, only following two files are mandatory:
/usr/libexec/fence_kdump_send /etc/sysconfig/fence_kdump_nodes
2) Nodes read from /etc/sysconfig/fence_kdump_nodes are filtered not to contain hostname
3) Patch is created against master on http://pkgs.fedoraproject.org/cgit/kexec-tools.git/
Thanks
Martin Perina
From 48f09ed8cda2c1fe52b0a48eb501373cd40d6b8f Mon Sep 17 00:00:00 2001
From: Martin Perina mperina@redhat.com Date: Thu, 13 Mar 2014 14:59:08 +0100 Subject: [PATCH] fence_kdump manual configuration support
Adds ability to configure fence_kdump without Pacemaker. If following files exist:
/usr/libexec/fence_kdump_send /etc/sysconfig/fence_kdump_nodes
it's supposed that fence_kdump is configured manually.
Signed-off-by: Martin Perina mperina@redhat.com --- dracut-module-setup.sh | 37 +++++++++++++++++++++++++------------ kdump-lib.sh | 20 +++++++++++++++----- kdumpctl | 5 +++++ 3 files changed, 45 insertions(+), 17 deletions(-)
diff --git a/dracut-module-setup.sh b/dracut-module-setup.sh index bdadf7c..103a84e 100755 --- a/dracut-module-setup.sh +++ b/dracut-module-setup.sh @@ -421,28 +421,41 @@ kdump_check_iscsi_targets () { # also preserve '[node list]' for 2nd kernel /etc/fence_kdump_nodes kdump_check_fence_kdump () { local nodes + local xnodes 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" -` + if is_cluster; then + # 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 + # 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 + xnodes="$xnodes $uname" + done + else + # fence_kdump configured manually + read xnodes < $FENCE_KDUMP_NODES + fi + + # install network for each node + for node in ${xnodes}; do # Skip its own node name if [ "$nodename" = `hostname` ]; then continue fi - nodes="$nodes $nodename" - - kdump_install_net $nodename + kdump_install_net $node + nodes="$nodes $node" done + echo
- echo "$nodes" > ${initdir}/$FENCE_KDUMP_NODES + mkdir -p ${initdir}$FENCE_KDUMP_NODES + rmdir ${initdir}$FENCE_KDUMP_NODES + echo "$nodes" > ${initdir}$FENCE_KDUMP_NODES + dracut_install $FENCE_KDUMP_SEND dracut_install -o $FENCE_KDUMP_CONFIG } diff --git a/kdump-lib.sh b/kdump-lib.sh index 384f7b4..089d40b 100755 --- a/kdump-lib.sh +++ b/kdump-lib.sh @@ -5,7 +5,7 @@
FENCE_KDUMP_CONFIG="/etc/sysconfig/fence_kdump" FENCE_KDUMP_SEND="/usr/libexec/fence_kdump_send" -FENCE_KDUMP_NODES="/etc/fence_kdump_nodes" +FENCE_KDUMP_NODES="/etc/sysconfig/fence_kdump_nodes"
is_ssh_dump_target() { @@ -27,15 +27,25 @@ strip_comments() echo $@ | sed -e 's/(.*)#.*/\1/' }
+# Check if cluster environment is present +is_cluster() +{ + # no pcs executable installed + type -P pcs > /dev/null || return 1 +} + # Check if fence kdump is configured in cluster is_fence_kdump() { - # no pcs or fence_kdump_send executables installed? - type -P pcs > /dev/null || return 1 [ -x $FENCE_KDUMP_SEND ] || return 1
- # fence kdump not configured? - (pcs cluster cib | grep -q 'type="fence_kdump"') &> /dev/null || return 1 + if is_cluster; then + # fence kdump configured in cluster? + (pcs cluster cib | grep -q 'type="fence_kdump"') &> /dev/null || return 1 + else + # fence kdump configured manually? + [ -f $FENCE_KDUMP_NODES ] || return 1 + fi }
get_user_configured_dump_disk() diff --git a/kdumpctl b/kdumpctl index 8d5498a..c310904 100755 --- a/kdumpctl +++ b/kdumpctl @@ -193,6 +193,7 @@ function check_fence_kdump() local cib_time
is_fence_kdump || return 1 + is_cluster || return 1
cib_time=`pcs cluster cib | xmllint --xpath 'string(/cib/@cib-last-written)' - | \ xargs -0 date +%s --date` @@ -253,6 +254,10 @@ function check_rebuild() files="$files $FENCE_KDUMP_CONFIG" fi
+ if [ -f $FENCE_KDUMP_NODES ]; then + files="$files $FENCE_KDUMP_NODES" + fi + check_exist "$files" && check_executable "$EXTRA_BINS" [ $? -ne 0 ] && return 1