Skip to content

Commit

Permalink
Debian: fail gracefully if modules can't be loaded on install
Browse files Browse the repository at this point in the history
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
horms authored and blp committed Sep 12, 2011
1 parent 40a7517 commit 64624b3
Show file tree
Hide file tree
Showing 3 changed files with 38 additions and 2 deletions.
20 changes: 19 additions & 1 deletion debian/openvswitch-switch.init
Expand Up @@ -41,7 +41,22 @@ ovs_ctl () {
"$@" "$@"
} }


load_kmod () {
ovs_ctl load-kmod || exit $?
}

start () { 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 set ovs_ctl ${1-start} --system-id=random
if test X"$FORCE_COREFILES" != X; then if test X"$FORCE_COREFILES" != X; then
set "$@" --force-corefiles="$FORCE_COREFILES" set "$@" --force-corefiles="$FORCE_COREFILES"
Expand Down Expand Up @@ -75,8 +90,11 @@ case $1 in
force-reload-kmod) force-reload-kmod)
start 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 exit 1
;; ;;
esac esac
Expand Down
17 changes: 17 additions & 0 deletions debian/openvswitch-switch.postinst
Expand Up @@ -44,6 +44,23 @@ case "$1" in
;; ;;
esac 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# #DEBHELPER#


exit 0 exit 0
Expand Down
3 changes: 2 additions & 1 deletion debian/rules
Expand Up @@ -117,7 +117,8 @@ binary-common:
dh_installexamples dh_installexamples
dh_installdebconf dh_installdebconf
dh_installlogrotate dh_installlogrotate
dh_installinit -R dh_installinit -R -Nopenvswitch-switch
dh_installinit -R -popenvswitch-switch --error-handler=init_script_error
dh_installcron dh_installcron
dh_installman dh_installman
dh_link dh_link
Expand Down

0 comments on commit 64624b3

Please sign in to comment.