void-packages

Void Source Packages
git clone git://ezup.dev/void-packages.git
Log | Files | Refs | README | LICENSE

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