summaryrefslogtreecommitdiffstats
path: root/dkms_autoinstaller.in
diff options
context:
space:
mode:
Diffstat (limited to 'dkms_autoinstaller.in')
-rwxr-xr-xdkms_autoinstaller.in89
1 files changed, 89 insertions, 0 deletions
diff --git a/dkms_autoinstaller.in b/dkms_autoinstaller.in
new file mode 100755
index 0000000..8dcfe82
--- /dev/null
+++ b/dkms_autoinstaller.in
@@ -0,0 +1,89 @@
+#!/bin/sh
+#
+# dkms_autoinstaller - A service to automatically install DKMS modules for new kernels.
+#
+# chkconfig: 345 04 04
+# description: Compiles and install kernel modules automatically for new \
+# kernels at boot.
+
+### BEGIN INIT INFO
+# Provides: dkms_autoinstaller dkms
+# Default-Start: 3 4 5
+# Default-Stop: 0 1 2 6
+# Required-Start: $local_fs
+# Required-Stop: $local_fs
+# Short-Description: DKMS kernel modules installer service
+# Description: A service to automatically install DKMS modules for new kernels.
+### END INIT INFO
+
+
+if [ -f /lib/lsb/init-functions ]; then
+ . /lib/lsb/init-functions
+elif [ -f /etc/rc.d/init.d/functions ]; then
+ . /etc/rc.d/init.d/functions
+fi
+
+# We only have these functions on Debian/Ubuntu
+# so on other distros just stub them out
+if [ ! -f /etc/debian_version ]; then
+ alias log_daemon_msg='/bin/echo -n'
+ log_end_msg() { if [ "$1" = "0" ]; then echo " Done. "; else echo " Failed. "; fi; }
+ alias log_action_msg=/bin/echo
+fi
+
+exec="@SBINDIR@/dkms"
+prog=${exec##*/}
+
+test -f $exec || exit 0
+
+[ -e /etc/sysconfig/$prog ] && . /etc/sysconfig/$prog
+
+uname_s=$(uname -s)
+
+_get_kernel_dir() {
+ KVER=$1
+ case ${uname_s} in
+ Linux) DIR="@MODDIR@/$KVER/build" ;;
+ GNU/kFreeBSD) DIR="/usr/src/kfreebsd-headers-$KVER/sys" ;;
+ esac
+ echo $DIR
+}
+
+_check_kernel_dir() {
+ DIR=$(_get_kernel_dir $1)
+ case ${uname_s} in
+ Linux) test -e $DIR/include ;;
+ GNU/kFreeBSD) test -e $DIR/kern && test -e $DIR/conf/kmod.mk ;;
+ *) return 1 ;;
+ esac
+ return $?
+}
+
+case "$1" in
+ start)
+ if [ -n "$2" ]; then
+ kernel="$2"
+ else
+ kernel=$(uname -r)
+ fi
+ if [ -f /etc/dkms/no-autoinstall ]; then
+ log_action_msg "$prog: autoinstall for dkms modules has been disabled"
+ elif ! _check_kernel_dir $kernel; then
+ log_action_msg "$prog: autoinstall for kernel $kernel was skipped since the kernel headers for this kernel do not seem to be installed"
+ else
+ log_action_msg "$prog: running auto installation service for kernel $kernel"
+ dkms autoinstall --kernelver $kernel
+ res=$?
+ log_daemon_msg "$prog: autoinstall for kernel" "$kernel"
+ log_end_msg $res
+ fi
+ ;;
+ stop|restart|force-reload|status|reload)
+ # There is no stop action, this and the 04 priority during stop is
+ # added to make RHEL chkconfig happy.
+ # Ignore others on debian/ubuntu too
+ ;;
+ *)
+ echo "Usage: $0 {start}"
+ exit 2
+esac