dkms (3345B)
1#!/bin/sh 2# 3# DKMS trigger. Used to add/build/install or remove the specified modules 4# from all kernels. 5# 6# Modules can be specified like: 7# dkms_modules="<modulename> <version> ..." 8# 9# Arguments: $ACTION = [run/targets] 10# $TARGET = [post-install/pre-remove] 11# $PKGNAME 12# $VERSION 13# $UPDATE = [yes/no] 14# 15ACTION="$1" 16TARGET="$2" 17PKGNAME="$3" 18VERSION="$4" 19UPDATE="$5" 20 21export PATH="usr/bin:usr/sbin:/usr/sbin:/usr/bin:/sbin:/bin" 22 23remove_modules() { 24 local _modver _kver 25 26 # Remove the specified modules from all kernels. 27 set -- ${dkms_modules} 28 while [ $# -gt 0 ]; do 29 $DKMS status -m "$1" | while read line; do 30 if $(echo "$line" | egrep -vq '(added|built|installed)'); then 31 shift 2; continue 32 fi 33 _modver=$(echo "$line"|sed "s/$1,[[:blank:]]\([^,]*\)[,:].*/\1/;t;d") 34 _kver=$(echo "$line"|awk '{print $3}'|sed "s/\(.*\),$/\1/") 35 echo -n "Removing DKMS module '${1}-${_modver}' for kernel-${_kver}... " 36 $DKMS remove -m "$1" -v "${_modver}" -k "${_kver}" >/dev/null 2>&1 37 if [ $? -eq 0 ]; then 38 echo "done." 39 else 40 echo "FAILED!" 41 fi 42 done 43 shift 2 44 done 45} 46 47add_modules() { 48 local rval= 49 50 # Add/build and install the specified modules for all kernels. 51 set -- ${dkms_modules} 52 while [ $# -gt 0 ]; do 53 $DKMS add -m "$1" -v "$2" >/dev/null 2>&1 54 rval=$? 55 if [ $rval -eq 0 ]; then 56 echo "Added DKMS module '$1-$2'." 57 elif [ $rval -eq 3 ]; then 58 echo "DKMS module '$1-$2' already added, skipping." 59 else 60 echo "Failed to add DKMS module: '$1-$2'..." 61 err=1 62 fi 63 shift 2 64 done 65 [ -n "$err" ] && exit $err 66 67 for f in $(echo lib/modules/*); do 68 _kver=$(basename $f) 69 if [ ! -e "${f}/build/include" ]; then 70 echo "Skipping kernel-${_kver}. kernel-headers package not installed..." 71 continue 72 fi 73 if [ ! -f ${f}/build/scripts/basic/fixdep ] || [ ! -f ${f}/build/scripts/mod/modpost ] ; then 74 echo -n "Prepare to build modules for kernel-${_kver}... " 75 yes "" | make -j$(nproc) -C ${f}/build prepare0 > ${f}/build/make.log 2>&1 76 if [ $? -eq 0 ]; then 77 echo "done." 78 else 79 echo "FAILED!" 80 echo "Kernel scripts failed to build, please check /${f}/build/make.log" 81 echo "for errors in the log file." 82 fi 83 fi 84 set -- ${dkms_modules} 85 while [ $# -gt 0 ]; do 86 echo -n "Building DKMS module '$1-$2' for kernel-${_kver}... " 87 $DKMS build -m "$1" -v "$2" -k "${_kver}" >/dev/null 2>&1 88 if [ $? -eq 0 ]; then 89 echo "done." 90 else 91 echo "FAILED!" 92 echo "DKMS module '$1-$2' failed to build, please check /var/lib/dkms" 93 echo "for errors in the log file." 94 shift 2; continue 95 fi 96 echo -n "Installing DKMS module '$1-$2' for kernel-${_kver}... " 97 $DKMS install -m "$1" -v "$2" -k "${_kver}" >/dev/null 2>&1 98 if [ $? -eq 0 ]; then 99 echo "done." 100 else 101 echo "FAILED!" 102 echo "DKMS module '$1-$2' failed to install, please do this manually" 103 echo "and check for errors in the log file." 104 fi 105 shift 2 106 done 107 done 108} 109 110case "$ACTION" in 111targets) 112 echo "post-install pre-remove" 113 ;; 114run) 115 if [ -x /usr/bin/dkms ]; then 116 DKMS=/usr/bin/dkms 117 elif [ -x /usr/sbin/dkms ]; then 118 DKMS=/usr/sbin/dkms 119 else 120 exit 0 121 fi 122 123 [ ! -x $DKMS -o -z "$dkms_modules" ] && exit 0 124 125 case "$TARGET" in 126 post-install) 127 export IGNORE_CC_MISMATCH=1 128 add_modules 129 ;; 130 pre-remove) 131 remove_modules 132 ;; 133 *) 134 exit 1 135 ;; 136 esac 137 ;; 138*) 139 exit 1 140 ;; 141esac 142 143exit 0