[ovs-dev] [PATCH 2/3] Debian: fail gracefully if modules can't be loaded on install

Simon Horman horms at verge.net.au
Fri Sep 9 23:09:31 PDT 2011


By registering an error-handler for the init script used
in openvswitch-switch.postinst and detecting if module insertion fails,
it is possible to avoid failure to install in the case where the
openvswitch_mod module is not available.

This is done without altering the behaviour that the start target
of the openvswtich-switch init script will fail if module insertion fails.

This patch also adds a friendly hint as as to why starting
openvswitch-switch has failed if it is due to failure to insert
the openvswtich_mod. This message is displayed as necessary both
on package install and other calls to the start target of the
init script.

---

v2
* Avoid using if !, as it may have portability problems
* Avoid duplicated 'echo "/usr/share/doc..."'

v3
* Do not ignore module insertion failure on start, instead add extra
  logic to the postinst script. As suggested by Ben Phaff
---
 debian/openvswitch-switch.init     |   20 +++++++++++++++++++-
 debian/openvswitch-switch.postinst |   17 +++++++++++++++++
 debian/rules                       |    3 ++-
 3 files changed, 38 insertions(+), 2 deletions(-)

diff --git a/debian/openvswitch-switch.init b/debian/openvswitch-switch.init
index 3487afb..3d187a0 100755
--- a/debian/openvswitch-switch.init
+++ b/debian/openvswitch-switch.init
@@ -41,7 +41,22 @@ ovs_ctl () {
     "$@"
 }
 
+load_kmod () {
+    ovs_ctl load-kmod || exit $?
+}
+
 start () {
+    if ovs_ctl load-kmod; then
+	:
+    else
+	echo "Module has probably not been built for this kernel."
+	if ! test -d /usr/share/doc/openvswitch-datapath-source; then
+	    echo "Install the openvswitch-datapath-source package, then read"
+	else
+            echo "For instructions, read"
+	fi
+	echo "/usr/share/doc/openvswitch-datapath-source/README.Debian"
+    fi
     set ovs_ctl ${1-start} --system-id=random
     if test X"$FORCE_COREFILES" != X; then
 	set "$@" --force-corefiles="$FORCE_COREFILES"
@@ -75,8 +90,11 @@ case $1 in
     force-reload-kmod)
         start force-reload-kmod
         ;;
+    load-kmod)
+        load_kmod
+        ;;
     *)
-        echo "Usage: $0 {start|stop|restart|force-reload|status|force-stop|force-reload-kmod}" >&2
+        echo "Usage: $0 {start|stop|restart|force-reload|status|force-stop|force-reload-kmod|load-kmod}" >&2
         exit 1
         ;;
 esac
diff --git a/debian/openvswitch-switch.postinst b/debian/openvswitch-switch.postinst
index 74b52ba..9e8aaaf 100755
--- a/debian/openvswitch-switch.postinst
+++ b/debian/openvswitch-switch.postinst
@@ -44,6 +44,23 @@ case "$1" in
         ;;
 esac
 
+HAVE_KMOD="no"
+
+init_script_error () {
+	if test X"$HAVE_KMOD" == Xno; then
+		exit 0
+	fi
+	exit 1
+}
+
+# Do not fail package installation just because the kernel module
+# is not available.
+if test -x /etc/init.d/openvswitch-switch; then
+    if invoke-rc.d openvswitch-switch load-kmod; then
+	HAVE_KMOD="yes"
+    fi
+fi
+
 #DEBHELPER#
 
 exit 0
diff --git a/debian/rules b/debian/rules
index 5c80cc6..accd26d 100755
--- a/debian/rules
+++ b/debian/rules
@@ -102,7 +102,8 @@ binary-common:
 	dh_installexamples
 	dh_installdebconf
 	dh_installlogrotate
-	dh_installinit -R
+	dh_installinit -R -Nopenvswitch-switch
+	dh_installinit -R -popenvswitch-switch --error-handler=init_script_error
 	dh_installcron
 	dh_installman
 	dh_link
-- 
1.7.5.4




More information about the dev mailing list