[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