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
|
||||
|
||||
# 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 [ $# -ne 0 ]; do
|
||||
while [ $# -gt 1 ]; do
|
||||
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})
|
||||
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 unexistent DKMS module: ${module}-${modulever}."
|
||||
shift 2
|
||||
echo "Skipping nonexistent DKMS module: ${module}-${modulever}."
|
||||
continue
|
||||
fi
|
||||
# Build the module
|
||||
echo -n "Building DKMS module: ${module}-${modulever}... "
|
||||
dkms build -q -m ${module} -v ${modulever} -k ${VERSION} -a ${ARCH}
|
||||
rval=$?
|
||||
if [ $rval -eq 9 ]; then
|
||||
echo "skipped!"
|
||||
shift; shift
|
||||
continue
|
||||
elif [ $rval -eq 0 ]; then
|
||||
# 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!"
|
||||
exit $?
|
||||
continue
|
||||
fi
|
||||
status=$(dkms status -m ${module} -v ${modulever} -k ${VERSION})
|
||||
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 ] &&
|
||||
[ $(echo "$status"|grep -c ": installed") -eq 0 ]; then
|
||||
echo -n "Installing DKMS module: ${module}-${modulever}... "
|
||||
dkms install -q -m ${module} -v ${modulever} -k ${VERSION} -a ${ARCH}
|
||||
if [ $? -eq 0 ]; then
|
||||
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!"
|
||||
exit $?
|
||||
continue
|
||||
fi
|
||||
fi
|
||||
shift; shift
|
||||
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
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
pkgname=dkms
|
||||
reverts="2.8.2_1"
|
||||
version=2.8.1
|
||||
revision=3
|
||||
revision=4
|
||||
conf_files="/etc/dkms/framework.conf"
|
||||
depends="bash kmod gcc make coreutils linux-headers"
|
||||
short_desc="Dynamic Kernel Modules System"
|
||||
|
|
Loading…
Reference in a new issue