[kexec-tools] Add initial NFS dump support, experimental

Cong Wang wangcong at fedoraproject.org
Fri Jan 27 14:59:52 UTC 2012


commit 481cb83cfd62d2f7f42b83fe19ae5530435b8cdb
Author: Cong Wang <xiyou.wangcong at gmail.com>
Date:   Fri Jan 27 22:59:43 2012 +0800

    Add initial NFS dump support, experimental

 kdump_dracut_modules/99kdumpbase/kdump.sh        |    3 +-
 kdump_dracut_modules/99kdumpbase/module-setup.sh |   52 +++++++++++++++++++--
 kexec-tools.spec                                 |    5 ++-
 sources                                          |    2 +-
 4 files changed, 53 insertions(+), 9 deletions(-)
---
diff --git a/kdump_dracut_modules/99kdumpbase/kdump.sh b/kdump_dracut_modules/99kdumpbase/kdump.sh
index 366b303..78127ed 100755
--- a/kdump_dracut_modules/99kdumpbase/kdump.sh
+++ b/kdump_dracut_modules/99kdumpbase/kdump.sh
@@ -121,8 +121,7 @@ read_kdump_conf()
 		CORE_COLLECTOR="$config_val"
                 ;;
             net)
-                if [ -n "$(echo $config_val | grep @)" ]
-                then
+                if [[ "$config_val" =~ "@" ]]; then
                     add_dump_code "dump_ssh $config_val || do_default_action"
                 else
                     add_dump_code "dump_nfs $config_val || do_default_action"
diff --git a/kdump_dracut_modules/99kdumpbase/module-setup.sh b/kdump_dracut_modules/99kdumpbase/module-setup.sh
index e4efc90..713f968 100755
--- a/kdump_dracut_modules/99kdumpbase/module-setup.sh
+++ b/kdump_dracut_modules/99kdumpbase/module-setup.sh
@@ -1,5 +1,7 @@
 #!/bin/bash
 
+. $dracutfunctions
+
 check() {
     [[ $debug ]] && set -x
     #kdumpctl sets this explicitly
@@ -10,6 +12,11 @@ check() {
     return 0
 }
 
+depends() {
+    echo "base shutdown"
+    return 0
+}
+
 to_udev_name() {
     local dev="$1"
 
@@ -24,18 +31,53 @@ to_udev_name() {
     echo ${dev#/dev/}
 }
 
-depends() {
-    echo "base shutdown"
-    return 0
+is_bridge() {
+     [ -d /sys/class/net/"$1"/bridge ]
+}
+
+is_bond() {
+     [ -d /sys/class/net/"$1"/bonding ]
 }
 
 install() {
+    local _server
+    local _netdev
+
     sed -ne '/^#/!p' /etc/kdump.conf > /tmp/$$-kdump.conf
     while read config_opt config_val;
     do
         case "$config_opt" in
         ext[234]|xfs|btrfs|minix|raw)
-            sed -i -e "s#$1#/dev/$(to_udev_name $1)#" /tmp/$$-kdump.conf
+            sed -i -e "s#$config_val#/dev/$(to_udev_name $config_val)#" /tmp/$$-kdump.conf
+            ;;
+        net)
+            if strstr "$config_val" "@"; then
+                _server=$(echo $config_val | sed -e 's#.*@\(.*\):.*#\1#')
+            else
+                _server=$(echo $config_val | sed -e 's#\(.*\):.*#\1#')
+            fi
+
+            _netdev=`/sbin/ip route get to $_server 2>&1`
+            [ $? != 0 ] && echo "Bad kdump location: $config_val" && exit 1
+            #the field in the ip output changes if we go to another subnet
+            if [ -n "`echo $_netdev | grep via`" ]
+            then
+                # we are going to a different subnet
+                _netdev=`echo $_netdev|awk '{print $5;}'|head -n 1`
+            else
+                # we are on the same subnet
+                _netdev=`echo $_netdev|awk '{print $3}'|head -n 1`
+            fi
+            echo " ip=$_netdev:dhcp" > ${initdir}/etc/cmdline.d/40ip.conf
+            if is_bridge "$_netdev"; then
+                echo " bridge=$_netdev:$(cd /sys/class/net/$_netdev/brif/; echo *)" > ${initdir}/etc/cmdline.d/41bridge.conf
+            elif is_bond "$_netdev"; then
+                echo " bond=$_netdev:\"$(cat /sys/class/net/$_netdev/bonding/slaves)\"" > ${initdir}/etc/cmdline.d/42bond.conf
+                #TODO
+                #echo "bondoptions=\"$bondoptions\"" >> /tmp/$$-bond
+            else
+                :
+            fi
             ;;
         esac
     done < /etc/kdump.conf
@@ -44,6 +86,6 @@ install() {
     inst "/bin/sync" "/bin/sync"
     inst "/sbin/makedumpfile" "/sbin/makedumpfile"
     inst "/tmp/$$-kdump.conf" "/etc/kdump.conf"
-    inst_hook pre-pivot 01 "$moddir/kdump.sh"
+    inst_hook pre-pivot 93 "$moddir/kdump.sh"
 }
 
diff --git a/kexec-tools.spec b/kexec-tools.spec
index 0b0c4df..a0b50fb 100644
--- a/kexec-tools.spec
+++ b/kexec-tools.spec
@@ -1,6 +1,6 @@
 Name: kexec-tools
 Version: 2.0.3
-Release: 36%{?dist}
+Release: 37%{?dist}
 License: GPLv2
 Group: Applications/System
 Summary: The kexec/kdump userspace component.
@@ -289,6 +289,9 @@ done
 
 
 %changelog
+* Fri Jan 27 2012 Cong Wang <xiyou.wangcong at gmail.com> - 2.0.2-37
+- Add initial NFS dump support, experimental.
+
 * Wed Jan 25 2012 Cong Wang <xiyou.wangcong at gmail.com> - 2.0.2-36
 - Really upload the dracut module.
 
diff --git a/sources b/sources
index 4934f96..85cddf6 100644
--- a/sources
+++ b/sources
@@ -4,4 +4,4 @@ e3a813bd6d7dace903a05c1296e20d57  makedumpfile-1.3.5.tar.gz
 8e359dd03731b93a2082bd37cc2a4a4c  kexec-tools-2.0.2.tar.bz2
 b3ced2097ce3981abba38ceedc84f939  kexec-tools-2.0.3.tar.bz2
 967f89bb947ca4db78f51beeaaee0bd8  makedumpfile-1.4.1.tar.gz
-cca779064913dc899ce027872d0ba498  dracut-files.tbz2
+2132832b58a209c05192d5783031c79d  dracut-files.tbz2


More information about the scm-commits mailing list