dkms: improvements to kernel post-install hook
When force-reinstalling kernel packages, `dkms install` is not run in the kernel post-install hook because the modules are already installed. This prevents `dkms install` from running `depmod -a` as it normally does, but the forced reinstallation clobbers `modules.dep{,.bin}` with the packaged versions that do not include DKMS-installed modules. The post-install hook now tracks whether `depmod -a` should be run and does so when necessary. Other changes, courtesy of @ericonr, address issue #23124 wherein a DKMS failure will terminate the script, preventing building or installation of subsequent modules. The fix follows logic similar to that in the DKMS xbps-trigger.
This commit is contained in:
parent
df8bbc6b0a
commit
2bec57b671
2 changed files with 44 additions and 16 deletions
|
@ -40,49 +40,77 @@ for _mod_ in /var/lib/dkms/*; do
|
||||||
done
|
done
|
||||||
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}
|
set -- ${DKMS_MODULES}
|
||||||
while [ $# -ne 0 ]; do
|
while [ $# -gt 1 ]; do
|
||||||
module="$1"
|
module="$1"
|
||||||
modulever="$2"
|
shift
|
||||||
|
modulever="$1"
|
||||||
|
shift
|
||||||
|
|
||||||
|
# If adding a module, depmod is necessary unless dkms runs it
|
||||||
|
do_depmod="yes"
|
||||||
|
|
||||||
status=$(dkms status -m ${module} -v ${modulever} -k ${VERSION})
|
status=$(dkms status -m ${module} -v ${modulever} -k ${VERSION})
|
||||||
if [ $(echo "$status"|grep -c ": built") -eq 0 ]; then
|
if [ $(echo "$status"|grep -c ": built") -eq 0 ]; then
|
||||||
# Check if the module is still there.
|
# Check if the module is still there.
|
||||||
if [ ! -f usr/src/${module}-${modulever}/dkms.conf ]; then
|
if [ ! -f usr/src/${module}-${modulever}/dkms.conf ]; then
|
||||||
echo "Skipping unexistent DKMS module: ${module}-${modulever}."
|
echo "Skipping nonexistent DKMS module: ${module}-${modulever}."
|
||||||
shift 2
|
|
||||||
continue
|
continue
|
||||||
fi
|
fi
|
||||||
# Build the module
|
# Build the module
|
||||||
echo -n "Building DKMS module: ${module}-${modulever}... "
|
echo -n "Building DKMS module: ${module}-${modulever}... "
|
||||||
dkms build -q -m ${module} -v ${modulever} -k ${VERSION} -a ${ARCH}
|
dkms build -q -m ${module} -v ${modulever} -k ${VERSION} -a ${ARCH}
|
||||||
rval=$?
|
rval=$?
|
||||||
if [ $rval -eq 9 ]; then
|
# If the module was skipped or failed, go to the next module.
|
||||||
echo "skipped!"
|
if [ $rval -eq 0 ]; then
|
||||||
shift; shift
|
|
||||||
continue
|
|
||||||
elif [ $rval -eq 0 ]; then
|
|
||||||
echo "done."
|
echo "done."
|
||||||
|
elif [ $rval -eq 9 ]; then
|
||||||
|
echo "skipped!"
|
||||||
|
continue
|
||||||
else
|
else
|
||||||
echo "FAILED!"
|
echo "FAILED!"
|
||||||
exit $?
|
continue
|
||||||
fi
|
fi
|
||||||
status=$(dkms status -m ${module} -v ${modulever} -k ${VERSION})
|
status=$(dkms status -m ${module} -v ${modulever} -k ${VERSION})
|
||||||
fi
|
fi
|
||||||
|
|
||||||
#if the module is built (either pre-built or just now), install it
|
# If the module is built (either pre-built or just now), install it
|
||||||
if [ $(echo "$status"|grep -c ": built") -eq 1 ] &&
|
if [ $(echo "$status"|grep -c ": built") -eq 1 ] &&
|
||||||
[ $(echo "$status"|grep -c ": installed") -eq 0 ]; then
|
[ $(echo "$status"|grep -c ": installed") -eq 0 ]; then
|
||||||
echo -n "Installing DKMS module: ${module}-${modulever}... "
|
echo -n "Installing DKMS module: ${module}-${modulever}... "
|
||||||
dkms install -q -m ${module} -v ${modulever} -k ${VERSION} -a ${ARCH}
|
dkms install -q -m ${module} -v ${modulever} -k ${VERSION} -a ${ARCH}
|
||||||
if [ $? -eq 0 ]; then
|
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."
|
echo "done."
|
||||||
else
|
else
|
||||||
echo "FAILED!"
|
echo "FAILED!"
|
||||||
exit $?
|
continue
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
shift; shift
|
|
||||||
done
|
done
|
||||||
|
|
||||||
|
if [ -n "$do_depmod" ]; then
|
||||||
|
echo -n "Generating kernel module dependency lists... "
|
||||||
|
depmod -a ${VERSION}
|
||||||
|
rval=$?
|
||||||
|
if [ $rval -eq 0 ]; then
|
||||||
|
echo "done."
|
||||||
|
else
|
||||||
|
echo "FAILED!"
|
||||||
|
exit $rval
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
exit 0
|
exit 0
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
pkgname=dkms
|
pkgname=dkms
|
||||||
reverts="2.8.2_1"
|
reverts="2.8.2_1"
|
||||||
version=2.8.1
|
version=2.8.1
|
||||||
revision=3
|
revision=4
|
||||||
conf_files="/etc/dkms/framework.conf"
|
conf_files="/etc/dkms/framework.conf"
|
||||||
depends="bash kmod gcc make coreutils linux-headers"
|
depends="bash kmod gcc make coreutils linux-headers"
|
||||||
short_desc="Dynamic Kernel Modules System"
|
short_desc="Dynamic Kernel Modules System"
|
||||||
|
|
Loading…
Reference in a new issue