diff options
Diffstat (limited to 'dkms_autoinstaller.in')
-rwxr-xr-x | dkms_autoinstaller.in | 89 |
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 |