From 64624b3cf405d0ca089fe978898896087337cb90 Mon Sep 17 00:00:00 2001 From: Simon Horman Date: Sat, 10 Sep 2011 15:09:31 +0900 Subject: [PATCH] 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] --- 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 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 -- 2.43.0