void-packages/srcpkgs/dkms/files/kernel.d/dkms.postinst
Piraty ae715228a2 dkms: build 'prepare0' instead of 'scripts'
to ensure modpost is built on the host else modules don't build
on crossbuilt kernels >= 5.0 since
    linux/60df1aee2aecb53efb4218b4dfdf7d6c80a5a3de
moved modpost from target 'scripts' to 'prepare0'.

The same has been applied to xbps-triggers/dkms
2020-11-08 23:46:24 +01:00

118 lines
3.1 KiB
Bash

#!/bin/sh
#
# DKMS post-install kernel hook.
#
# Arguments passed to this script: $1 pkgname, $2 version.
#
PKGNAME="$1"
VERSION="$2"
ARCH=$(uname -m)
if [ ! -x /usr/bin/dkms ]; then
exit 0
fi
if [ ! -e /lib/modules/${VERSION}/build/include ] ; then
echo "WARNING: cannot build DKMS modules! missing kernel headers package for ${VERSION}."
exit 0
fi
export IGNORE_CC_MISMATCH=1
if [ ! -f /lib/modules/${VERSION}/build/scripts/basic/fixdep ] || [ ! -f /lib/modules/${VERSION}/build/scripts/mod/modpost ]; then
yes "" | make -j $(nproc) -C /lib/modules/${VERSION}/build prepare0
fi
# Check available DKMS modules
for _mod_ in /var/lib/dkms/*; do
[ ! -d ${_mod_} ] && continue
module=$(basename ${_mod_})
for _modver_ in ${_mod_}/*; do
if [ -d ${_modver_} -a ! -h ${_modver_} ]; then
modulever=$(basename ${_modver_})
echo "Available DKMS module: ${module}-${modulever}."
if [ -z "${DKMS_MODULES}" ]; then
DKMS_MODULES="${module} ${modulever}"
else
DKMS_MODULES="${DKMS_MODULES} ${module} ${modulever}"
fi
fi
done
done
# This section builds and install the available modules.
#
# If either building or installing a module fails, a warning is
# printed and it is skipped, but the script still tries to build
# the other modules.
#
# The list of available modules is in the form
# [module1, modulever1, module2, modulever2, ...]
#
set -- ${DKMS_MODULES}
while [ $# -gt 1 ]; do
module="$1"
shift
modulever="$1"
shift
# If adding a module, depmod is necessary unless dkms runs it
do_depmod="yes"
status=$(/usr/bin/dkms status -m ${module} -v ${modulever} -k ${VERSION})
if [ $(echo "$status"|grep -c ": built") -eq 0 ]; then
# Check if the module is still there.
if [ ! -f /usr/src/${module}-${modulever}/dkms.conf ]; then
echo "Skipping nonexistent DKMS module: ${module}-${modulever}."
continue
fi
# Build the module
echo -n "Building DKMS module: ${module}-${modulever}... "
/usr/bin/dkms build -q -m ${module} -v ${modulever} -k ${VERSION} -a ${ARCH}
rval=$?
# If the module was skipped or failed, go to the next module.
if [ $rval -eq 0 ]; then
echo "done."
elif [ $rval -eq 9 ]; then
echo "skipped!"
continue
else
echo "FAILED!"
continue
fi
status=$(/usr/bin/dkms status -m ${module} -v ${modulever} -k ${VERSION})
fi
# If the module is built (either pre-built or just now), install it
if [ $(echo "$status"|grep -c ": built") -eq 1 ] &&
[ $(echo "$status"|grep -c ": installed") -eq 0 ]; then
echo -n "Installing DKMS module: ${module}-${modulever}... "
/usr/bin/dkms install -q -m ${module} -v ${modulever} -k ${VERSION} -a ${ARCH}
rval=$?
# If the module failed installation, go to the next module.
if [ $rval -eq 0 ]; then
# dkms runs depmod as part of the installation
unset do_depmod
echo "done."
else
echo "FAILED!"
continue
fi
fi
done
if [ -z "$do_depmod" ] || [ ! -x /usr/bin/depmod ]; then
exit 0
fi
echo -n "Generating kernel module dependency lists... "
/usr/bin/depmod -a ${VERSION}
rval=$?
if [ $rval -eq 0 ]; then
echo "done."
else
echo "FAILED!"
exit $rval
fi
exit 0