diff options
author | Simon Horman <horms@verge.net.au> | 2011-09-10 15:09:31 +0900 |
---|---|---|
committer | Ben Pfaff <blp@nicira.com> | 2011-09-12 09:31:18 -0700 |
commit | 64624b3cf405d0ca089fe978898896087337cb90 (patch) | |
tree | a946b7049b1309a48bc617cf40ac65b8af3657c5 /debian | |
parent | 40a751774f4255d7b6af699547d72e823c0be1e1 (diff) | |
download | openvswitch-64624b3cf405d0ca089fe978898896087337cb90.tar.gz |
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]
Diffstat (limited to 'debian')
-rwxr-xr-x | debian/openvswitch-switch.init | 20 | ||||
-rwxr-xr-x | debian/openvswitch-switch.postinst | 17 | ||||
-rwxr-xr-x | debian/rules | 3 |
3 files changed, 38 insertions, 2 deletions
diff --git a/debian/openvswitch-switch.init b/debian/openvswitch-switch.init index 3487afb49..3d187a056 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 74b52ba90..c50853a11 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 c4a3ba7c2..1773cc71d 100755 --- a/debian/rules +++ b/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 |