Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

Debian: fail gracefully if modules can't be loaded on install

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 openvswitch-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.

[Ben Pfaff fixed up == to = in postinst]
  • Loading branch information...
commit 64624b3cf405d0ca089fe978898896087337cb90 1 parent 40a7517
@horms horms authored blp committed
View
20 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
View
17 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
View
3  debian/rules
@@ -117,7 +117,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
Please sign in to comment.
Something went wrong with that request. Please try again.