#!/bin/sh # # DKMS trigger. Used to add/build/install or remove the specified modules # from all kernels. # # Modules can be specified like: # dkms_modules=" ..." # # Arguments: $ACTION = [run/targets] # $TARGET = [post-install/pre-remove] # $PKGNAME # $VERSION # $UPDATE = [yes/no] # ACTION="$1" TARGET="$2" PKGNAME="$3" VERSION="$4" UPDATE="$5" DKMS=usr/sbin/dkms export PATH="$PATH:/usr/local/bin" remove_modules() { local _modver _kver # Remove the specified modules from all kernels. set -- ${dkms_modules} while [ $# -gt 0 ]; do $DKMS status -m "$1" | while read line; do if $(echo "$line" | egrep -vq '(added|built|installed)'); then shift; shift; continue fi _modver=$(echo "$line"|sed "s/$1,[[:blank:]]\([^,]*\)[,:].*/\1/;t;d") _kver=$(echo "$line"|awk '{print $3}'|sed "s/\(.*\),$/\1/") echo -n "Removing DKMS module '${1}-${_modver}' for kernel-${_kver}... " $DKMS remove -m "$1" -v "${_modver}" -k "${_kver}" >/dev/null 2>&1 if [ $? -eq 0 ]; then echo "done." else echo "FAILED!" fi done shift; shift; done } add_modules() { # Add/build and install the specified modules for all kernels. set -- ${dkms_modules} while [ $# -gt 0 ]; do $DKMS add -m "$1" -v "$2" >/dev/null 2>&1 if [ $? -eq 0 ]; then echo "Added DKMS module '$1-$2'." else echo "Failed to add DKMS module: '$1-$2'..." err=1 fi shift; shift; done [ -n "$err" ] && exit $err for f in $(echo lib/modules/*); do _kver=$(basename $f) if [ ! -e "${f}/build/include" ]; then echo "Skipping kernel-${_kver}. kernel-headers package not installed..." continue fi set -- ${dkms_modules} while [ $# -gt 0 ]; do echo -n "Installing DKMS module '$1-$2' for kernel-${_kver}... " $DKMS build -m "$1" -v "$2" -k "${_kver}" >/dev/null 2>&1 && \ $DKMS install -m "$1" -v "$2" -k "${_kver}" >/dev/null 2>&1 if [ $? -eq 0 ]; then echo "done." else echo "FAILED!" echo "DKMS module '$1-$2' failed to install, please do this manually" echo "and check for errors in the log file." fi shift; shift; done done } case "$ACTION" in targets) echo "post-install pre-remove" ;; run) [ ! -x $DKMS -o -z "$dkms_modules" ] && exit 0 case "$TARGET" in post-install) add_modules ;; pre-remove) remove_modules ;; *) exit 1 ;; esac ;; *) exit 1 ;; esac exit 0