2024-04-24 09:47:14 +08:00
#!/bin/bash
2022-10-09 17:17:07 +08:00
# Test that dkms works properly
set -eu
# Change the to base directory
cd " $( dirname -- " $0 " ) "
# To use a specific kernel version, use the environment variable KERNEL_VER
KERNEL_VER = " ${ KERNEL_VER :- $( uname -r) } "
2024-04-24 09:47:14 +08:00
KERNEL_ARCH = " $( uname -m) "
echo " Using kernel ${ KERNEL_VER } / ${ KERNEL_ARCH } "
2022-10-09 17:17:07 +08:00
2024-04-24 09:47:14 +08:00
# debconf can trigger at random points, in the testing process. Where a bunch of
# the frontends cannot work in our CI. Just opt for the noninteractive one.
export DEBIAN_FRONTEND = noninteractive
# Avoid output variations due to parallelism
export parallel_jobs = 1
# Temporary files, directories, and modules created during tests
TEST_MODULES = (
"dkms_test"
"dkms_failing_test"
"dkms_dependencies_test"
"dkms_multiver_test"
"dkms_nover_test"
"dkms_emptyver_test"
"dkms_nover_update_test"
"dkms_conf_test"
"dkms_build_exclusive_test"
"dkms_build_exclusive_dependencies_test"
)
TEST_TMPDIRS = (
"/usr/src/dkms_test-1.0/"
"/usr/src/dkms_failing_test-1.0/"
"/usr/src/dkms_dependencies_test-1.0"
"/usr/src/dkms_multiver_test-1.0"
"/usr/src/dkms_multiver_test-2.0"
"/usr/src/dkms_nover_test-1.0"
"/usr/src/dkms_emptyver_test-1.0"
"/usr/src/dkms_nover_update_test-1.0"
"/usr/src/dkms_nover_update_test-2.0"
"/usr/src/dkms_nover_update_test-3.0"
"/usr/src/dkms_conf_test-1.0"
"/usr/src/dkms_build_exclusive_test-1.0"
"/usr/src/dkms_build_exclusive_dependencies_test-1.0"
" /tmp/dkms_test_dir_ ${ KERNEL_VER } / "
)
TEST_TMPFILES = (
"/tmp/dkms_test_private_key"
"/tmp/dkms_test_certificate"
"/tmp/dkms_test_kconfig"
"/etc/dkms/framework.conf.d/dkms_test_framework.conf"
"test_cmd_output.log"
"test_cmd_stdout.log"
"test_cmd_stderr.log"
"test_cmd_expected_output.log"
)
SIGNING_MESSAGE = ""
declare -i NO_SIGNING_TOOL
if [ " $# " = 1 ] && [ " $1 " = "--no-signing-tool" ] ; then
echo 'Ignore signing tool errors'
NO_SIGNING_TOOL = 1
else
NO_SIGNING_TOOL = 0
fi
2022-10-09 17:17:07 +08:00
# Some helpers
2024-04-24 09:47:14 +08:00
dkms_status_grep_dkms_module( ) {
local module_name = " $1 "
( dkms status | grep " ^ ${ module_name } / " ) || true
}
clean_dkms_env( ) {
local found_module
for module in ${ TEST_MODULES [@] } ; do
found_module = " $( dkms_status_grep_dkms_module ${ module } ) "
if [ [ -n " $found_module " ] ] ; then
dkms remove ${ module } /1.0 >/dev/null
fi
rm -rf " /var/lib/dkms/ ${ module } / "
rm -f " /lib/modules/ ${ KERNEL_VER } / ${ expected_dest_loc } / ${ module } .ko ${ mod_compression_ext } "
done
for dir in " ${ TEST_TMPDIRS [@] } " ; do
rm -rf " $dir "
done
for file in " ${ TEST_TMPFILES [@] } " ; do
rm -f " $file "
done
2022-10-09 17:17:07 +08:00
}
check_no_dkms_test( ) {
2024-04-24 09:47:14 +08:00
local found_module
2022-10-09 17:17:07 +08:00
2024-04-24 09:47:14 +08:00
for module in ${ TEST_MODULES [@] } ; do
found_module = " $( dkms_status_grep_dkms_module ${ module } ) "
if [ [ -n " $found_module " ] ] ; then
echo >& 2 " Error: module ${ module } is still in DKMS tree "
exit 1
fi
if [ [ -d " /var/lib/dkms/ ${ module } " ] ] ; then
echo >& 2 " Error: directory /var/lib/dkms/ ${ module } still exists "
exit 1
fi
if [ [ -f " /lib/modules/ ${ KERNEL_VER } / ${ expected_dest_loc } / ${ module } .ko ${ mod_compression_ext } " ] ] ; then
echo >& 2 " Error: file /lib/modules/ ${ KERNEL_VER } / ${ expected_dest_loc } / ${ module } .ko ${ mod_compression_ext } still exists "
exit 1
fi
done
for dir in " ${ TEST_TMPDIRS [@] } " ; do
if [ [ -d " $dir " ] ] ; then
echo >& 2 " Error: directory ${ dir } still exists "
exit 1
fi
done
for file in " ${ TEST_TMPFILES [@] } " ; do
if [ [ -f " $file " ] ] ; then
echo >& 2 " Error: file ${ file } still exists "
exit 1
fi
done
}
cert_serial( ) {
local ver = " $( openssl version) "
# Some systems in CI test are still using ancient versions of openssl program.
if [ [ " $ver " = "OpenSSL 1.0." * ] ] || [ [ " $ver " = "OpenSSL 0." * ] ] ; then
openssl x509 -text -inform DER -in " $1 " -noout | grep -A 1 'X509v3 Subject Key Identifier' | tail -n 1 | tr 'a-z' 'A-Z' | tr -d ' :'
else
openssl x509 -serial -inform DER -in " $1 " -noout | tr 'a-z' 'A-Z' | sed 's/^SERIAL=//'
2022-10-09 17:17:07 +08:00
fi
2024-04-24 09:47:14 +08:00
}
set_signing_message( ) {
# $1: module name
# $2: module version
# $3: module file name if not the same as $1
if ( ( NO_SIGNING_TOOL = = 0 ) ) ; then
SIGNING_MESSAGE = " Signing module /var/lib/dkms/ $1 / $2 /build/ ${ 3 :- $1 } .ko " $'\n'
2022-10-09 17:17:07 +08:00
fi
}
2024-04-24 09:47:14 +08:00
run_status_with_expected_output( ) {
local module = $1
2022-10-09 17:17:07 +08:00
cat > test_cmd_expected_output.log
2024-04-24 09:47:14 +08:00
if dkms_status_grep_dkms_module " ${ module } " > test_cmd_output.log 2>& 1 ; then
2022-10-09 17:17:07 +08:00
if ! diff -U3 test_cmd_expected_output.log test_cmd_output.log ; then
2024-04-24 09:47:14 +08:00
echo >& 2 " Error: unexpected output from: dkms_status_grep_dkms_module for ${ module } "
2022-10-09 17:17:07 +08:00
return 1
fi
rm test_cmd_expected_output.log test_cmd_output.log
else
2024-04-24 09:47:14 +08:00
echo " Error: dkms status for ${ module } returned status $? "
2022-10-09 17:17:07 +08:00
cat test_cmd_output.log
rm test_cmd_expected_output.log test_cmd_output.log
return 1
fi
}
2024-04-24 09:47:14 +08:00
genericize_expected_output( ) {
local output_log = $1
# "depmod..." lines can have multiple points. Replace them, to be able to compare
sed -i 's/\([^.]\)\.\.\.\.*$/\1.../' ${ output_log }
# On CentOS, weak-modules is executed. Drop it from the output, to be more generic
sed -i '/^Adding any weak-modules$/d' ${ output_log }
sed -i '/^Removing any linked weak-modules$/d' ${ output_log }
# "depmod..." lines are missing when uninstalling modules on CentOS. Remove them to be more generic
if [ [ $# -ge 2 && " $2 " = ~ uninstall| unbuild| remove ] ] ; then
sed -i '/^depmod\.\.\.$/d' ${ output_log }
fi
# Signing related output. Drop it from the output, to be more generic
if ( ( NO_SIGNING_TOOL = = 0 ) ) ; then
sed -i '/^EFI variables are not supported on this system/d' ${ output_log }
sed -i '/^\/sys\/firmware\/efi\/efivars not found, aborting./d' ${ output_log }
sed -i '/^Sign command:/d' ${ output_log }
sed -i '/^Signing key:/d' ${ output_log }
sed -i '/^Public certificate (MOK):/d' ${ output_log }
sed -i '/^Certificate or key are missing, generating them using update-secureboot-policy...$/d' ${ output_log }
sed -i '/^Certificate or key are missing, generating self signed certificate for MOK...$/d' ${ output_log }
else
sed -i " /^The kernel is be built without module signing facility, modules won't be signed $/d " ${ output_log }
sed -i " /^Binary .* not found, modules won't be signed $/d " ${ output_log }
# Uncomment the following line to run this script with --no-signing-tool on platforms where the sign-file tool exists
# sed -i '/^Signing module \/var\/lib\/dkms\/dkms_test\/1.0\/build\/dkms_test.ko$/d' ${output_log}
fi
# OpenSSL non-critical errors while signing. Remove them to be more generic
sed -i '/^At main.c:/d' ${ output_log }
sed -i '/^- SSL error:/d' ${ output_log }
# Apport related error that can occur in the CI. Drop from the output to be more generic
sed -i " /^python3: can't open file '\/usr\/share\/apport\/package-hooks\/dkms_packages.py'\: \[Errno 2\] No such file or directory $/d " ${ output_log }
sed -i "/^ERROR (dkms apport): /d" ${ output_log }
}
run_with_expected_output( ) {
run_with_expected_error 0 " $@ "
}
2022-10-09 17:17:07 +08:00
run_with_expected_error( ) {
local expected_error_code = " $1 "
2024-04-24 09:47:14 +08:00
local dkms_command = " $3 "
local output_log = test_cmd_output.log
local expected_output_log = test_cmd_expected_output.log
local error_code = 0
2022-10-09 17:17:07 +08:00
shift
2024-04-24 09:47:14 +08:00
cat > ${ expected_output_log }
stdbuf -o L -e L " $@ " > ${ output_log } 2>& 1 || error_code = $?
2022-10-09 17:17:07 +08:00
if [ [ " ${ error_code } " != " ${ expected_error_code } " ] ] ; then
echo " Error: command ' $* ' returned status ${ error_code } instead of expected ${ expected_error_code } "
2024-04-24 09:47:14 +08:00
cat ${ output_log }
rm ${ expected_output_log } ${ output_log }
2022-10-09 17:17:07 +08:00
return 1
fi
2024-04-24 09:47:14 +08:00
genericize_expected_output ${ output_log } ${ dkms_command }
if ! diff -U3 ${ expected_output_log } ${ output_log } ; then
2022-10-09 17:17:07 +08:00
echo >& 2 " Error: unexpected output from: $* "
2024-04-24 09:47:14 +08:00
rm ${ expected_output_log } ${ output_log }
2022-10-09 17:17:07 +08:00
return 1
fi
2024-04-24 09:47:14 +08:00
rm ${ expected_output_log } ${ output_log }
}
# sig_hashalgo itself may show bogus value if kmod version < 26
kmod_broken_hashalgo( ) {
local -ri kmod_ver = $( kmod --version | grep version | cut -f 3 -d ' ' )
( ( kmod_ver < 26 ) )
2022-10-09 17:17:07 +08:00
}
# Compute the expected destination module location
os_id = " $( sed -n 's/^ID\s*=\s*\(.*\)$/\1/p' /etc/os-release | tr -d '"' ) "
mod_compression_ext =
case " ${ os_id } " in
centos | fedora | rhel | ovm | almalinux)
expected_dest_loc = extra
mod_compression_ext = .xz
; ;
sles | suse | opensuse)
expected_dest_loc = updates
; ;
arch | debian | ubuntu)
expected_dest_loc = updates/dkms
; ;
alpine)
expected_dest_loc = kernel/extra
2024-04-24 09:47:14 +08:00
mod_compression_ext = .gz
2022-10-09 17:17:07 +08:00
; ;
*)
echo >& 2 " Error: unknown Linux distribution ID ${ os_id } "
exit 1
; ;
esac
2024-04-24 09:47:14 +08:00
echo 'Preparing a clean test environment'
clean_dkms_env
echo 'Test framework file hijacking'
mkdir -p /etc/dkms/framework.conf.d/
cp test/framework/hijacking.conf /etc/dkms/framework.conf.d/dkms_test_framework.conf
run_with_expected_output dkms status -m dkms_test << EOF
EOF
rm /etc/dkms/framework.conf.d/dkms_test_framework.conf
############################################################################
### Testing dkms on a regular module ###
############################################################################
2022-10-09 17:17:07 +08:00
echo 'Adding the test module by version (expected error)'
run_with_expected_error 2 dkms add -m dkms_test -v 1.0 << EOF
Error! Could not find module source directory.
Directory: /usr/src/dkms_test-1.0 does not exist.
EOF
echo 'Adding the test module by directory'
run_with_expected_output dkms add test/dkms_test-1.0 << EOF
Creating symlink /var/lib/dkms/dkms_test/1.0/source -> /usr/src/dkms_test-1.0
EOF
2024-04-24 09:47:14 +08:00
run_status_with_expected_output 'dkms_test' << EOF
2022-10-09 17:17:07 +08:00
dkms_test/1.0: added
EOF
if ! [ [ -d /usr/src/dkms_test-1.0 ] ] ; then
echo >& 2 'Error: directory /usr/src/dkms_test-1.0 was not created'
2024-04-24 09:47:14 +08:00
exit 1
2022-10-09 17:17:07 +08:00
fi
echo 'Adding the test module again (expected error)'
run_with_expected_error 3 dkms add test/dkms_test-1.0 << EOF
Error! DKMS tree already contains: dkms_test-1.0
You cannot add the same module/version combo more than once.
EOF
echo 'Adding the test module by version (expected error)'
run_with_expected_error 3 dkms add -m dkms_test -v 1.0 << EOF
Error! DKMS tree already contains: dkms_test-1.0
You cannot add the same module/version combo more than once.
EOF
echo 'Building the test module'
2024-04-24 09:47:14 +08:00
set_signing_message "dkms_test" "1.0"
2022-10-09 17:17:07 +08:00
run_with_expected_output dkms build -k " ${ KERNEL_VER } " -m dkms_test -v 1.0 << EOF
Building module:
Cleaning build area...
2024-04-24 09:47:14 +08:00
make -j1 KERNELRELEASE = ${ KERNEL_VER } -C /lib/modules/${ KERNEL_VER } /build M = /var/lib/dkms/dkms_test/1.0/build...
${ SIGNING_MESSAGE } Cleaning build area...
2022-10-09 17:17:07 +08:00
EOF
2024-04-24 09:47:14 +08:00
run_status_with_expected_output 'dkms_test' << EOF
dkms_test/1.0, ${ KERNEL_VER } , ${ KERNEL_ARCH } : built
2022-10-09 17:17:07 +08:00
EOF
echo 'Building the test module again'
run_with_expected_output dkms build -k " ${ KERNEL_VER } " -m dkms_test -v 1.0 << EOF
2024-04-24 09:47:14 +08:00
Module dkms_test/1.0 already built for kernel ${ KERNEL_VER } ( ${ KERNEL_ARCH } ) , skip. You may override by specifying --force.
EOF
run_status_with_expected_output 'dkms_test' << EOF
dkms_test/1.0, ${ KERNEL_VER } , ${ KERNEL_ARCH } : built
EOF
if ( ( NO_SIGNING_TOOL = = 0 ) ) ; then
echo 'Building the test module with bad sign_file path in framework file'
cp test/framework/bad_sign_file_path.conf /etc/dkms/framework.conf.d/dkms_test_framework.conf
run_with_expected_output dkms build -k " ${ KERNEL_VER } " -m dkms_test -v 1.0 --force << EOF
Binary /no/such/file not found, modules won' t be signed
Building module:
Cleaning build area...
make -j1 KERNELRELEASE = ${ KERNEL_VER } -C /lib/modules/${ KERNEL_VER } /build M = /var/lib/dkms/dkms_test/1.0/build...
Cleaning build area...
EOF
echo 'Building the test module with bad mok_signing_key path in framework file'
cp test/framework/bad_key_file_path.conf /etc/dkms/framework.conf.d/dkms_test_framework.conf
run_with_expected_output dkms build -k " ${ KERNEL_VER } " -m dkms_test -v 1.0 --force << EOF
Key file /no/such/path.key not found and can't be generated, modules won' t be signed
Building module:
Cleaning build area...
make -j1 KERNELRELEASE = ${ KERNEL_VER } -C /lib/modules/${ KERNEL_VER } /build M = /var/lib/dkms/dkms_test/1.0/build...
Cleaning build area...
EOF
echo 'Building the test module with bad mok_certificate path in framework file'
cp test/framework/bad_cert_file_path.conf /etc/dkms/framework.conf.d/dkms_test_framework.conf
run_with_expected_output dkms build -k " ${ KERNEL_VER } " -m dkms_test -v 1.0 --force << EOF
Certificate file /no/such/path.crt not found and can't be generated, modules won' t be signed
Building module:
Cleaning build area...
make -j1 KERNELRELEASE = ${ KERNEL_VER } -C /lib/modules/${ KERNEL_VER } /build M = /var/lib/dkms/dkms_test/1.0/build...
Cleaning build area...
2022-10-09 17:17:07 +08:00
EOF
2024-04-24 09:47:14 +08:00
rm /tmp/dkms_test_private_key
echo 'Building the test module with path contains variables in framework file'
mkdir " /tmp/dkms_test_dir_ ${ KERNEL_VER } / "
cp test/framework/variables_in_path.conf /etc/dkms/framework.conf.d/dkms_test_framework.conf
run_with_expected_output dkms build -k " ${ KERNEL_VER } " -m dkms_test -v 1.0 --force << EOF
Building module:
Cleaning build area...
make -j1 KERNELRELEASE = ${ KERNEL_VER } -C /lib/modules/${ KERNEL_VER } /build M = /var/lib/dkms/dkms_test/1.0/build...
${ SIGNING_MESSAGE } Cleaning build area...
2022-10-09 17:17:07 +08:00
EOF
2024-04-24 09:47:14 +08:00
rm -r " /tmp/dkms_test_dir_ ${ KERNEL_VER } / "
BUILT_MODULE_PATH = " /var/lib/dkms/dkms_test/1.0/ ${ KERNEL_VER } / ${ KERNEL_ARCH } /module/dkms_test.ko ${ mod_compression_ext } "
CURRENT_HASH = " $( modinfo -F sig_hashalgo " ${ BUILT_MODULE_PATH } " ) "
echo 'Building the test module using a different hash algorithm'
if kmod_broken_hashalgo; then
echo 'Current kmod has broken hash algorithm code. Skipping...'
elif [ [ " ${ CURRENT_HASH } " = = "unknown" ] ] ; then
echo 'Current kmod reports unknown hash algorithm. Skipping...'
else
cp test/framework/temp_key_cert.conf /etc/dkms/framework.conf.d/dkms_test_framework.conf
if [ [ " ${ CURRENT_HASH } " = = "sha512" ] ] ; then
ALTER_HASH = "sha256"
else
ALTER_HASH = "sha512"
fi
echo " CONFIG_MODULE_SIG_HASH=\" ${ ALTER_HASH } \" " > /tmp/dkms_test_kconfig
run_with_expected_output dkms build -k " ${ KERNEL_VER } " -m dkms_test -v 1.0 --config /tmp/dkms_test_kconfig --force << EOF
Building module:
Cleaning build area...
make -j1 KERNELRELEASE = ${ KERNEL_VER } -C /lib/modules/${ KERNEL_VER } /build M = /var/lib/dkms/dkms_test/1.0/build...
${ SIGNING_MESSAGE } Cleaning build area...
EOF
run_with_expected_output sh -c " modinfo -F sig_hashalgo ' ${ BUILT_MODULE_PATH } ' " << EOF
${ ALTER_HASH }
EOF
rm /tmp/dkms_test_kconfig
fi
rm /etc/dkms/framework.conf.d/dkms_test_framework.conf
fi
cp test/framework/temp_key_cert.conf /etc/dkms/framework.conf.d/dkms_test_framework.conf
2022-10-09 17:17:07 +08:00
echo 'Building the test module again by force'
run_with_expected_output dkms build -k " ${ KERNEL_VER } " -m dkms_test -v 1.0 --force << EOF
Building module:
Cleaning build area...
2024-04-24 09:47:14 +08:00
make -j1 KERNELRELEASE = ${ KERNEL_VER } -C /lib/modules/${ KERNEL_VER } /build M = /var/lib/dkms/dkms_test/1.0/build...
${ SIGNING_MESSAGE } Cleaning build area...
2022-10-09 17:17:07 +08:00
EOF
2024-04-24 09:47:14 +08:00
run_status_with_expected_output 'dkms_test' << EOF
dkms_test/1.0, ${ KERNEL_VER } , ${ KERNEL_ARCH } : built
2022-10-09 17:17:07 +08:00
EOF
2024-04-24 09:47:14 +08:00
if ( ( NO_SIGNING_TOOL = = 0 ) ) ; then
echo 'Extracting serial number from the certificate'
MODULE_SERIAL = " $( cert_serial /tmp/dkms_test_certificate) "
fi
2022-10-09 17:17:07 +08:00
echo 'Installing the test module'
run_with_expected_output dkms install -k " ${ KERNEL_VER } " -m dkms_test -v 1.0 << EOF
dkms_test.ko${ mod_compression_ext } :
Running module version sanity check.
- Original module
- No original module exists within this kernel
- Installation
- Installing to /lib/modules/${ KERNEL_VER } /${ expected_dest_loc } /
depmod...
EOF
2024-04-24 09:47:14 +08:00
run_status_with_expected_output 'dkms_test' << EOF
dkms_test/1.0, ${ KERNEL_VER } , ${ KERNEL_ARCH } : installed
2022-10-09 17:17:07 +08:00
EOF
echo 'Installing the test module again'
run_with_expected_output dkms install -k " ${ KERNEL_VER } " -m dkms_test -v 1.0 << EOF
2024-04-24 09:47:14 +08:00
Module dkms_test/1.0 already installed on kernel ${ KERNEL_VER } ( ${ KERNEL_ARCH } ) , skip. You may override by specifying --force.
2022-10-09 17:17:07 +08:00
EOF
2024-04-24 09:47:14 +08:00
run_status_with_expected_output 'dkms_test' << EOF
dkms_test/1.0, ${ KERNEL_VER } , ${ KERNEL_ARCH } : installed
2022-10-09 17:17:07 +08:00
EOF
if ! [ [ -f " /lib/modules/ ${ KERNEL_VER } / ${ expected_dest_loc } /dkms_test.ko ${ mod_compression_ext } " ] ] ; then
echo >& 2 " Error: module not found in /lib/modules/ ${ KERNEL_VER } / ${ expected_dest_loc } /dkms_test.ko ${ mod_compression_ext } "
exit 1
fi
echo 'Installing the test module again by force'
run_with_expected_output dkms install -k " ${ KERNEL_VER } " -m dkms_test -v 1.0 --force << EOF
2024-04-24 09:47:14 +08:00
Module dkms_test-1.0 for kernel ${ KERNEL_VER } ( ${ KERNEL_ARCH } ) .
2022-10-09 17:17:07 +08:00
Before uninstall, this module version was ACTIVE on this kernel.
dkms_test.ko${ mod_compression_ext } :
- Uninstallation
- Deleting from: /lib/modules/${ KERNEL_VER } /${ expected_dest_loc } /
- Original module
- No original module was found for this module on this kernel.
- Use the dkms install command to reinstall any previous module version.
depmod...
dkms_test.ko${ mod_compression_ext } :
Running module version sanity check.
- Original module
- No original module exists within this kernel
- Installation
- Installing to /lib/modules/${ KERNEL_VER } /${ expected_dest_loc } /
depmod...
EOF
2024-04-24 09:47:14 +08:00
run_status_with_expected_output 'dkms_test' << EOF
dkms_test/1.0, ${ KERNEL_VER } , ${ KERNEL_ARCH } : installed
2022-10-09 17:17:07 +08:00
EOF
echo 'Checking modinfo'
run_with_expected_output sh -c " modinfo /lib/modules/ ${ KERNEL_VER } / ${ expected_dest_loc } /dkms_test.ko ${ mod_compression_ext } | head -n 4 " << EOF
filename: /lib/modules/${ KERNEL_VER } /${ expected_dest_loc } /dkms_test.ko${ mod_compression_ext }
version: 1.0
description: A Simple dkms test module
license: GPL
EOF
2024-04-24 09:47:14 +08:00
if ( ( NO_SIGNING_TOOL = = 0 ) ) ; then
echo 'Checking module signature'
SIG_KEY = " $( modinfo -F sig_key " /lib/modules/ ${ KERNEL_VER } / ${ expected_dest_loc } /dkms_test.ko ${ mod_compression_ext } " | tr -d ':' ) "
SIG_HASH = " $( modinfo -F sig_hashalgo " /lib/modules/ ${ KERNEL_VER } / ${ expected_dest_loc } /dkms_test.ko ${ mod_compression_ext } " ) "
if kmod_broken_hashalgo; then
echo 'Current kmod has broken hash algorithm code. Skipping...'
elif [ [ " ${ SIG_HASH } " = = "unknown" ] ] ; then
echo 'Current kmod reports unknown hash algorithm. Skipping...'
elif [ [ ! " ${ SIG_KEY } " ] ] ; then
echo >& 2 "Error: module was not signed"
exit 1
else
run_with_expected_output sh -c " echo ' ${ SIG_KEY } ' " << EOF
${ MODULE_SERIAL }
EOF
fi
fi
2022-10-09 17:17:07 +08:00
echo 'Uninstalling the test module'
run_with_expected_output dkms uninstall -k " ${ KERNEL_VER } " -m dkms_test -v 1.0 << EOF
2024-04-24 09:47:14 +08:00
Module dkms_test-1.0 for kernel ${ KERNEL_VER } ( ${ KERNEL_ARCH } ) .
2022-10-09 17:17:07 +08:00
Before uninstall, this module version was ACTIVE on this kernel.
dkms_test.ko${ mod_compression_ext } :
- Uninstallation
- Deleting from: /lib/modules/${ KERNEL_VER } /${ expected_dest_loc } /
- Original module
- No original module was found for this module on this kernel.
- Use the dkms install command to reinstall any previous module version.
EOF
2024-04-24 09:47:14 +08:00
run_status_with_expected_output 'dkms_test' << EOF
dkms_test/1.0, ${ KERNEL_VER } , ${ KERNEL_ARCH } : built
2022-10-09 17:17:07 +08:00
EOF
if [ [ -e " /lib/modules/ ${ KERNEL_VER } / ${ expected_dest_loc } /dkms_test.ko ${ mod_compression_ext } " ] ] ; then
echo >& 2 " Error: module not removed in /lib/modules/ ${ KERNEL_VER } / ${ expected_dest_loc } /dkms_test.ko ${ mod_compression_ext } "
exit 1
fi
echo 'Uninstalling the test module again'
run_with_expected_output dkms uninstall -k " ${ KERNEL_VER } " -m dkms_test -v 1.0 << EOF
2024-04-24 09:47:14 +08:00
Module dkms_test 1.0 is not installed for kernel ${ KERNEL_VER } ( ${ KERNEL_ARCH } ) . Skipping...
2022-10-09 17:17:07 +08:00
EOF
2024-04-24 09:47:14 +08:00
run_status_with_expected_output 'dkms_test' << EOF
dkms_test/1.0, ${ KERNEL_VER } , ${ KERNEL_ARCH } : built
2022-10-09 17:17:07 +08:00
EOF
echo 'Unbuilding the test module'
run_with_expected_output dkms unbuild -k " ${ KERNEL_VER } " -m dkms_test -v 1.0 << EOF
2024-04-24 09:47:14 +08:00
Module dkms_test 1.0 is not installed for kernel ${ KERNEL_VER } ( ${ KERNEL_ARCH } ) . Skipping...
2022-10-09 17:17:07 +08:00
EOF
2024-04-24 09:47:14 +08:00
run_status_with_expected_output 'dkms_test' << EOF
2022-10-09 17:17:07 +08:00
dkms_test/1.0: added
EOF
echo 'Unbuilding the test module again'
run_with_expected_output dkms unbuild -k " ${ KERNEL_VER } " -m dkms_test -v 1.0 << EOF
2024-04-24 09:47:14 +08:00
Module dkms_test 1.0 is not installed for kernel ${ KERNEL_VER } ( ${ KERNEL_ARCH } ) . Skipping...
Module dkms_test 1.0 is not built for kernel ${ KERNEL_VER } ( ${ KERNEL_ARCH } ) . Skipping...
2022-10-09 17:17:07 +08:00
EOF
2024-04-24 09:47:14 +08:00
run_status_with_expected_output 'dkms_test' << EOF
2022-10-09 17:17:07 +08:00
dkms_test/1.0: added
EOF
echo 'Removing the test module'
run_with_expected_output dkms remove -k " ${ KERNEL_VER } " -m dkms_test -v 1.0 << EOF
2024-04-24 09:47:14 +08:00
Module dkms_test 1.0 is not installed for kernel ${ KERNEL_VER } ( ${ KERNEL_ARCH } ) . Skipping...
Module dkms_test 1.0 is not built for kernel ${ KERNEL_VER } ( ${ KERNEL_ARCH } ) . Skipping...
2022-10-09 17:17:07 +08:00
Deleting module dkms_test-1.0 completely from the DKMS tree.
EOF
2024-04-24 09:47:14 +08:00
run_status_with_expected_output 'dkms_test' << EOF
2022-10-09 17:17:07 +08:00
EOF
if ! [ [ -d /usr/src/dkms_test-1.0 ] ] ; then
echo >& 2 'Error: directory /usr/src/dkms_test-1.0 was removed'
2024-04-24 09:47:14 +08:00
exit 1
2022-10-09 17:17:07 +08:00
fi
echo 'Adding the test module by version'
run_with_expected_output dkms add -m dkms_test -v 1.0 << EOF
Creating symlink /var/lib/dkms/dkms_test/1.0/source -> /usr/src/dkms_test-1.0
EOF
2024-04-24 09:47:14 +08:00
run_status_with_expected_output 'dkms_test' << EOF
2022-10-09 17:17:07 +08:00
dkms_test/1.0: added
EOF
echo 'Removing the test module'
run_with_expected_output dkms remove --all -m dkms_test -v 1.0 << EOF
Deleting module dkms_test-1.0 completely from the DKMS tree.
EOF
2024-04-24 09:47:14 +08:00
run_status_with_expected_output 'dkms_test' << EOF
2022-10-09 17:17:07 +08:00
EOF
echo 'Installing the test module by version (combining add, build, install)'
run_with_expected_output dkms install -k " ${ KERNEL_VER } " -m dkms_test -v 1.0 << EOF
Creating symlink /var/lib/dkms/dkms_test/1.0/source -> /usr/src/dkms_test-1.0
Building module:
Cleaning build area...
2024-04-24 09:47:14 +08:00
make -j1 KERNELRELEASE = ${ KERNEL_VER } -C /lib/modules/${ KERNEL_VER } /build M = /var/lib/dkms/dkms_test/1.0/build...
${ SIGNING_MESSAGE } Cleaning build area...
2022-10-09 17:17:07 +08:00
dkms_test.ko${ mod_compression_ext } :
Running module version sanity check.
- Original module
- No original module exists within this kernel
- Installation
- Installing to /lib/modules/${ KERNEL_VER } /${ expected_dest_loc } /
depmod...
EOF
2024-04-24 09:47:14 +08:00
run_status_with_expected_output 'dkms_test' << EOF
dkms_test/1.0, ${ KERNEL_VER } , ${ KERNEL_ARCH } : installed
2022-10-09 17:17:07 +08:00
EOF
if ! [ [ -f " /lib/modules/ ${ KERNEL_VER } / ${ expected_dest_loc } /dkms_test.ko ${ mod_compression_ext } " ] ] ; then
echo >& 2 " Error: module not found in /lib/modules/ ${ KERNEL_VER } / ${ expected_dest_loc } /dkms_test.ko ${ mod_compression_ext } "
exit 1
fi
echo 'Checking modinfo'
run_with_expected_output sh -c " modinfo /lib/modules/ ${ KERNEL_VER } / ${ expected_dest_loc } /dkms_test.ko ${ mod_compression_ext } | head -n 4 " << EOF
filename: /lib/modules/${ KERNEL_VER } /${ expected_dest_loc } /dkms_test.ko${ mod_compression_ext }
version: 1.0
description: A Simple dkms test module
license: GPL
EOF
2024-04-24 09:47:14 +08:00
if ( ( NO_SIGNING_TOOL = = 0 ) ) ; then
echo 'Checking module signature'
SIG_KEY = " $( modinfo -F sig_key " /lib/modules/ ${ KERNEL_VER } / ${ expected_dest_loc } /dkms_test.ko ${ mod_compression_ext } " | tr -d ':' ) "
SIG_HASH = " $( modinfo -F sig_hashalgo " /lib/modules/ ${ KERNEL_VER } / ${ expected_dest_loc } /dkms_test.ko ${ mod_compression_ext } " ) "
if kmod_broken_hashalgo; then
echo 'Current kmod has broken hash algorithm code. Skipping...'
elif [ [ " ${ SIG_HASH } " = = "unknown" ] ] ; then
echo 'Current kmod reports unknown hash algorithm. Skipping...'
elif [ [ ! " ${ SIG_KEY } " ] ] ; then
# kmod may not be linked with openssl and thus can't extract the key from module
echo >& 2 "Error: modules was not signed, or key is unknown"
exit 1
else
run_with_expected_output sh -c " echo ' ${ SIG_KEY } ' " << EOF
${ MODULE_SERIAL }
EOF
fi
fi
2022-10-09 17:17:07 +08:00
echo 'Removing the test module with --all'
run_with_expected_output dkms remove --all -m dkms_test -v 1.0 << EOF
2024-04-24 09:47:14 +08:00
Module dkms_test-1.0 for kernel ${ KERNEL_VER } ( ${ KERNEL_ARCH } ) .
2022-10-09 17:17:07 +08:00
Before uninstall, this module version was ACTIVE on this kernel.
dkms_test.ko${ mod_compression_ext } :
- Uninstallation
- Deleting from: /lib/modules/${ KERNEL_VER } /${ expected_dest_loc } /
- Original module
- No original module was found for this module on this kernel.
- Use the dkms install command to reinstall any previous module version.
Deleting module dkms_test-1.0 completely from the DKMS tree.
EOF
2024-04-24 09:47:14 +08:00
run_status_with_expected_output 'dkms_test' << EOF
2022-10-09 17:17:07 +08:00
EOF
if [ [ -e " /lib/modules/ ${ KERNEL_VER } / ${ expected_dest_loc } /dkms_test.ko ${ mod_compression_ext } " ] ] ; then
echo >& 2 " Error: module not removed in /lib/modules/ ${ KERNEL_VER } / ${ expected_dest_loc } /dkms_test.ko ${ mod_compression_ext } "
exit 1
fi
echo 'Removing /usr/src/dkms_test-1.0'
rm -r /usr/src/dkms_test-1.0
echo 'Building the test module by config file (combining add, build)'
run_with_expected_output dkms build -k " ${ KERNEL_VER } " test/dkms_test-1.0/dkms.conf << EOF
Creating symlink /var/lib/dkms/dkms_test/1.0/source -> /usr/src/dkms_test-1.0
Building module:
Cleaning build area...
2024-04-24 09:47:14 +08:00
make -j1 KERNELRELEASE = ${ KERNEL_VER } -C /lib/modules/${ KERNEL_VER } /build M = /var/lib/dkms/dkms_test/1.0/build...
${ SIGNING_MESSAGE } Cleaning build area...
2022-10-09 17:17:07 +08:00
EOF
2024-04-24 09:47:14 +08:00
run_status_with_expected_output 'dkms_test' << EOF
dkms_test/1.0, ${ KERNEL_VER } , ${ KERNEL_ARCH } : built
2022-10-09 17:17:07 +08:00
EOF
echo "Running dkms autoinstall"
run_with_expected_output dkms autoinstall -k " ${ KERNEL_VER } " << EOF
dkms_test.ko${ mod_compression_ext } :
Running module version sanity check.
- Original module
- No original module exists within this kernel
- Installation
- Installing to /lib/modules/${ KERNEL_VER } /${ expected_dest_loc } /
depmod...
2024-04-24 09:47:14 +08:00
dkms autoinstall on ${ KERNEL_VER } /${ KERNEL_ARCH } succeeded for dkms_test
EOF
echo "Running dkms autoinstall for a kernel without headers installed (expected error)"
run_with_expected_error 11 dkms autoinstall -k " ${ KERNEL_VER } -noheaders " << EOF
Error! Your kernel headers for kernel ${ KERNEL_VER } -noheaders cannot be found at /lib/modules/${ KERNEL_VER } -noheaders/build or /lib/modules/${ KERNEL_VER } -noheaders/source.
Please install the linux-headers-${ KERNEL_VER } -noheaders package or use the --kernelsourcedir option to tell DKMS where it' s located.
dkms autoinstall on ${ KERNEL_VER } -noheaders/x86_64 failed for dkms_test( 1)
Error! One or more modules failed to install during autoinstall.
Refer to previous errors for more information.
2022-10-09 17:17:07 +08:00
EOF
echo 'Removing the test module with --all'
run_with_expected_output dkms remove --all -m dkms_test -v 1.0 << EOF
2024-04-24 09:47:14 +08:00
Module dkms_test-1.0 for kernel ${ KERNEL_VER } ( ${ KERNEL_ARCH } ) .
2022-10-09 17:17:07 +08:00
Before uninstall, this module version was ACTIVE on this kernel.
dkms_test.ko${ mod_compression_ext } :
- Uninstallation
- Deleting from: /lib/modules/${ KERNEL_VER } /${ expected_dest_loc } /
- Original module
- No original module was found for this module on this kernel.
- Use the dkms install command to reinstall any previous module version.
Deleting module dkms_test-1.0 completely from the DKMS tree.
EOF
2024-04-24 09:47:14 +08:00
run_status_with_expected_output 'dkms_test' << EOF
2022-10-09 17:17:07 +08:00
EOF
2024-04-24 09:47:14 +08:00
echo 'Removing temporary files'
if ( ( NO_SIGNING_TOOL = = 0 ) ) ; then
rm /tmp/dkms_test_private_key /tmp/dkms_test_certificate
fi
rm /etc/dkms/framework.conf.d/dkms_test_framework.conf
2022-10-09 17:17:07 +08:00
echo 'Removing /usr/src/dkms_test-1.0'
rm -r /usr/src/dkms_test-1.0
echo 'Checking that the environment is clean again'
check_no_dkms_test
2024-04-24 09:47:14 +08:00
############################################################################
### Testing malformed/borderline dkms.conf ###
############################################################################
abspwd = $( readlink -f $( pwd ) )
echo 'Testing dkms add of source tree without dkms.conf (expected error)'
run_with_expected_error 1 dkms add ${ abspwd } /test/dkms_conf_test_no_conf << EOF
Error! Arguments <module> and <module-version> are not specified.
Usage: add <module>/<module-version> or
add -m <module>/<module-version> or
add -m <module> -v <module-version>
EOF
echo 'Testing dkms add with empty dkms.conf (expected error)'
run_with_expected_error 8 dkms add test/dkms_conf_test_empty << EOF
dkms.conf: Error! No 'PACKAGE_NAME' directive specified.
dkms.conf: Error! No 'PACKAGE_VERSION' directive specified.
dkms.conf: Warning! Zero modules specified.
Error! Bad conf file.
File: ${ abspwd } /test/dkms_conf_test_empty/dkms.conf does not represent a valid dkms.conf file.
EOF
echo 'Testing dkms.conf with invalid values (expected error)'
run_with_expected_error 8 dkms add test/dkms_conf_test_invalid << EOF
dkms.conf: Error! No 'BUILT_MODULE_NAME' directive specified for record #0.
dkms.conf: Error! 'DEST_MODULE_NAME' directive ends in '.o' or '.ko' in record #0.
dkms.conf: Error! Directive 'DEST_MODULE_LOCATION' does not begin with
'/kernel' , '/updates' , or '/extra' in record #0.
dkms.conf: Error! 'BUILT_MODULE_NAME' directive ends in '.o' or '.ko' in record #1.
dkms.conf: Error! No 'DEST_MODULE_LOCATION' directive specified for record #1.
dkms.conf: Error! Directive 'DEST_MODULE_LOCATION' does not begin with
'/kernel' , '/updates' , or '/extra' in record #1.
Error! Bad conf file.
File: ${ abspwd } /test/dkms_conf_test_invalid/dkms.conf does not represent a valid dkms.conf file.
EOF
echo 'Testing dkms.conf defining zero modules'
run_with_expected_output dkms add test/dkms_conf_test_zero_modules << EOF
dkms.conf: Warning! Zero modules specified.
dkms.conf: Warning! Zero modules specified.
Creating symlink /var/lib/dkms/dkms_conf_test/1.0/source -> /usr/src/dkms_conf_test-1.0
EOF
run_with_expected_output dkms remove --all -m dkms_conf_test -v 1.0 << EOF
Deleting module dkms_conf_test-1.0 completely from the DKMS tree.
EOF
echo 'Testing add/build/install of a test module building zero kernel modules'
run_with_expected_output dkms install -k " ${ KERNEL_VER } " -m dkms_conf_test -v 1.0 << EOF
dkms.conf: Warning! Zero modules specified.
Creating symlink /var/lib/dkms/dkms_conf_test/1.0/source -> /usr/src/dkms_conf_test-1.0
Building module:
Cleaning build area...
make -j1 KERNELRELEASE = ${ KERNEL_VER } -C /lib/modules/${ KERNEL_VER } /build M = /var/lib/dkms/dkms_conf_test/1.0/build...
Cleaning build area...
depmod...
EOF
run_status_with_expected_output 'dkms_conf_test' << EOF
dkms.conf: Warning! Zero modules specified.
dkms_conf_test/1.0, ${ KERNEL_VER } , ${ KERNEL_ARCH } : installed
EOF
run_with_expected_output dkms remove --all -m dkms_conf_test -v 1.0 << EOF
dkms.conf: Warning! Zero modules specified.
dkms.conf: Warning! Zero modules specified.
Module dkms_conf_test-1.0 for kernel ${ KERNEL_VER } ( ${ KERNEL_ARCH } ) .
Before uninstall, this module version was ACTIVE on this kernel.
Deleting module dkms_conf_test-1.0 completely from the DKMS tree.
EOF
echo 'Removing /usr/src/dkms_conf_test-1.0'
rm -r /usr/src/dkms_conf_test-1.0
echo 'Testing dkms.conf with defaulted BUILT_MODULE_NAME'
run_with_expected_output dkms add test/dkms_conf_test_defaulted_BUILT_MODULE_NAME << EOF
Creating symlink /var/lib/dkms/dkms_conf_test/1.0/source -> /usr/src/dkms_conf_test-1.0
EOF
echo 'Building test module without source (expected error)'
run_with_expected_error 8 dkms build -k " ${ KERNEL_VER } " -m dkms_conf_test -v 1.0 << EOF
Error! The directory /var/lib/dkms/dkms_conf_test/1.0/source does not appear to have module source located within it.
Build halted.
EOF
run_status_with_expected_output 'dkms_conf_test' << EOF
dkms_conf_test/1.0: added
EOF
run_with_expected_output dkms remove --all -m dkms_conf_test -v 1.0 << EOF
Deleting module dkms_conf_test-1.0 completely from the DKMS tree.
EOF
echo 'Removing /usr/src/dkms_conf_test-1.0'
rm -r /usr/src/dkms_conf_test-1.0
echo 'Checking that the environment is clean again'
check_no_dkms_test
############################################################################
### Testing dkms on a module with multiple versions ###
############################################################################
echo 'Adding the multiver test modules by directory'
run_with_expected_output dkms add test/dkms_multiver_test/1.0 << EOF
Creating symlink /var/lib/dkms/dkms_multiver_test/1.0/source -> /usr/src/dkms_multiver_test-1.0
EOF
run_status_with_expected_output 'dkms_multiver_test' << EOF
dkms_multiver_test/1.0: added
EOF
if ! [ [ -d /usr/src/dkms_multiver_test-1.0 ] ] ; then
echo >& 2 'Error: directory /usr/src/dkms_multiver_test-1.0 was not created'
exit 1
fi
run_with_expected_output dkms add test/dkms_multiver_test/2.0 << EOF
Creating symlink /var/lib/dkms/dkms_multiver_test/2.0/source -> /usr/src/dkms_multiver_test-2.0
EOF
run_status_with_expected_output 'dkms_multiver_test' << EOF
dkms_multiver_test/1.0: added
dkms_multiver_test/2.0: added
EOF
if ! [ [ -d /usr/src/dkms_multiver_test-1.0 ] ] ; then
echo >& 2 'Error: directory /usr/src/dkms_multiver_test-2.0 was not created'
exit 1
fi
echo 'Building the multiver test modules'
set_signing_message "dkms_multiver_test" "1.0"
run_with_expected_output dkms build -k " ${ KERNEL_VER } " -m dkms_multiver_test -v 1.0 << EOF
Building module:
Cleaning build area...
make -j1 KERNELRELEASE = ${ KERNEL_VER } -C /lib/modules/${ KERNEL_VER } /build M = /var/lib/dkms/dkms_multiver_test/1.0/build...
${ SIGNING_MESSAGE } Cleaning build area...
EOF
run_status_with_expected_output 'dkms_multiver_test' << EOF
dkms_multiver_test/1.0, ${ KERNEL_VER } , ${ KERNEL_ARCH } : built
dkms_multiver_test/2.0: added
EOF
set_signing_message "dkms_multiver_test" "2.0"
run_with_expected_output dkms build -k " ${ KERNEL_VER } " -m dkms_multiver_test -v 2.0 << EOF
Building module:
Cleaning build area...
make -j1 KERNELRELEASE = ${ KERNEL_VER } -C /lib/modules/${ KERNEL_VER } /build M = /var/lib/dkms/dkms_multiver_test/2.0/build...
${ SIGNING_MESSAGE } Cleaning build area...
EOF
run_status_with_expected_output 'dkms_multiver_test' << EOF
dkms_multiver_test/1.0, ${ KERNEL_VER } , ${ KERNEL_ARCH } : built
dkms_multiver_test/2.0, ${ KERNEL_VER } , ${ KERNEL_ARCH } : built
EOF
echo 'Installing the multiver test modules'
run_with_expected_output dkms install -k " ${ KERNEL_VER } " -m dkms_multiver_test -v 1.0 << EOF
dkms_multiver_test.ko${ mod_compression_ext } :
Running module version sanity check.
- Original module
- No original module exists within this kernel
- Installation
- Installing to /lib/modules/${ KERNEL_VER } /${ expected_dest_loc } /
depmod...
EOF
run_status_with_expected_output 'dkms_multiver_test' << EOF
dkms_multiver_test/1.0, ${ KERNEL_VER } , ${ KERNEL_ARCH } : installed
dkms_multiver_test/2.0, ${ KERNEL_VER } , ${ KERNEL_ARCH } : built
EOF
run_with_expected_output dkms install -k " ${ KERNEL_VER } " -m dkms_multiver_test -v 2.0 << EOF
dkms_multiver_test.ko${ mod_compression_ext } :
Running module version sanity check.
- Original module
- This kernel never originally had a module by this name
- Installation
- Installing to /lib/modules/${ KERNEL_VER } /${ expected_dest_loc } /
depmod...
EOF
run_status_with_expected_output 'dkms_multiver_test' << EOF
dkms_multiver_test/1.0, ${ KERNEL_VER } , ${ KERNEL_ARCH } : built
dkms_multiver_test/2.0, ${ KERNEL_VER } , ${ KERNEL_ARCH } : installed
EOF
run_with_expected_error 6 dkms install -k " ${ KERNEL_VER } " -m dkms_multiver_test -v 1.0 << EOF
dkms_multiver_test.ko${ mod_compression_ext } :
Running module version sanity check.
Error! Module version 1.0 for dkms_multiver_test.ko${ mod_compression_ext }
is not newer than what is already found in kernel ${ KERNEL_VER } ( 2.0) .
You may override by specifying --force.
Error! Installation aborted.
EOF
run_status_with_expected_output 'dkms_multiver_test' << EOF
dkms_multiver_test/1.0, ${ KERNEL_VER } , ${ KERNEL_ARCH } : built
dkms_multiver_test/2.0, ${ KERNEL_VER } , ${ KERNEL_ARCH } : installed
EOF
echo 'Uninstalling the multiver test modules'
run_with_expected_output dkms uninstall -k " ${ KERNEL_VER } " -m dkms_multiver_test -v 1.0 << EOF
Module dkms_multiver_test 1.0 is not installed for kernel ${ KERNEL_VER } ( ${ KERNEL_ARCH } ) . Skipping...
EOF
run_status_with_expected_output 'dkms_multiver_test' << EOF
dkms_multiver_test/1.0, ${ KERNEL_VER } , ${ KERNEL_ARCH } : built
dkms_multiver_test/2.0, ${ KERNEL_VER } , ${ KERNEL_ARCH } : installed
EOF
run_with_expected_output dkms uninstall -k " ${ KERNEL_VER } " -m dkms_multiver_test -v 2.0 << EOF
Module dkms_multiver_test-2.0 for kernel ${ KERNEL_VER } ( ${ KERNEL_ARCH } ) .
Before uninstall, this module version was ACTIVE on this kernel.
dkms_multiver_test.ko${ mod_compression_ext } :
- Uninstallation
- Deleting from: /lib/modules/${ KERNEL_VER } /${ expected_dest_loc } /
- Original module
- No original module was found for this module on this kernel.
- Use the dkms install command to reinstall any previous module version.
EOF
run_status_with_expected_output 'dkms_multiver_test' << EOF
dkms_multiver_test/1.0, ${ KERNEL_VER } , ${ KERNEL_ARCH } : built
dkms_multiver_test/2.0, ${ KERNEL_VER } , ${ KERNEL_ARCH } : built
EOF
if [ [ -e " /lib/modules/ ${ KERNEL_VER } / ${ expected_dest_loc } /dkms_multiver_test.ko ${ mod_compression_ext } " ] ] ; then
echo >& 2 " Error: module not removed in /lib/modules/ ${ KERNEL_VER } / ${ expected_dest_loc } /dkms_multiver_test.ko ${ mod_compression_ext } "
exit 1
fi
echo 'Unbuilding the multiver test modules'
run_with_expected_output dkms unbuild -k " ${ KERNEL_VER } " -m dkms_multiver_test -v 1.0 << EOF
Module dkms_multiver_test 1.0 is not installed for kernel ${ KERNEL_VER } ( ${ KERNEL_ARCH } ) . Skipping...
EOF
run_status_with_expected_output 'dkms_multiver_test' << EOF
dkms_multiver_test/1.0: added
dkms_multiver_test/2.0, ${ KERNEL_VER } , ${ KERNEL_ARCH } : built
EOF
run_with_expected_output dkms unbuild -k " ${ KERNEL_VER } " -m dkms_multiver_test -v 2.0 << EOF
Module dkms_multiver_test 2.0 is not installed for kernel ${ KERNEL_VER } ( ${ KERNEL_ARCH } ) . Skipping...
EOF
run_status_with_expected_output 'dkms_multiver_test' << EOF
dkms_multiver_test/1.0: added
dkms_multiver_test/2.0: added
EOF
echo 'Removing the multiver test modules'
run_with_expected_output dkms remove -k " ${ KERNEL_VER } " -m dkms_multiver_test -v 1.0 << EOF
Module dkms_multiver_test 1.0 is not installed for kernel ${ KERNEL_VER } ( ${ KERNEL_ARCH } ) . Skipping...
Module dkms_multiver_test 1.0 is not built for kernel ${ KERNEL_VER } ( ${ KERNEL_ARCH } ) . Skipping...
Deleting module dkms_multiver_test-1.0 completely from the DKMS tree.
EOF
run_status_with_expected_output 'dkms_multiver_test' << EOF
dkms_multiver_test/2.0: added
EOF
run_with_expected_output dkms remove -k " ${ KERNEL_VER } " -m dkms_multiver_test -v 2.0 << EOF
Module dkms_multiver_test 2.0 is not installed for kernel ${ KERNEL_VER } ( ${ KERNEL_ARCH } ) . Skipping...
Module dkms_multiver_test 2.0 is not built for kernel ${ KERNEL_VER } ( ${ KERNEL_ARCH } ) . Skipping...
Deleting module dkms_multiver_test-2.0 completely from the DKMS tree.
EOF
run_status_with_expected_output 'dkms_multiver_test' << EOF
EOF
echo 'Removing /usr/src/dkms_multiver_test-1.0 /usr/src/dkms_multiver_test-2.0'
rm -r /usr/src/dkms_multiver_test-1.0 /usr/src/dkms_multiver_test-2.0
############################################################################
### Testing dkms operations ...
############################################################################
echo 'Adding the nover/emptyver test modules by directory'
run_with_expected_output dkms add test/dkms_nover_test << EOF
Creating symlink /var/lib/dkms/dkms_nover_test/1.0/source -> /usr/src/dkms_nover_test-1.0
EOF
run_status_with_expected_output 'dkms_nover_test' << EOF
dkms_nover_test/1.0: added
EOF
if ! [ [ -d /usr/src/dkms_nover_test-1.0 ] ] ; then
echo >& 2 'Error: directory /usr/src/dkms_nover_test-1.0 was not created'
exit 1
fi
run_with_expected_output dkms add test/dkms_emptyver_test << EOF
Creating symlink /var/lib/dkms/dkms_emptyver_test/1.0/source -> /usr/src/dkms_emptyver_test-1.0
EOF
run_status_with_expected_output 'dkms_emptyver_test' << EOF
dkms_emptyver_test/1.0: added
EOF
if ! [ [ -d /usr/src/dkms_emptyver_test-1.0 ] ] ; then
echo >& 2 'Error: directory /usr/src/dkms_emptyver_test-1.0 was not created'
exit 1
fi
echo 'Building the nover/emptyver test modules'
set_signing_message "dkms_nover_test" "1.0"
run_with_expected_output dkms build -k " ${ KERNEL_VER } " -m dkms_nover_test -v 1.0 << EOF
Building module:
Cleaning build area...
make -j1 KERNELRELEASE = ${ KERNEL_VER } -C /lib/modules/${ KERNEL_VER } /build M = /var/lib/dkms/dkms_nover_test/1.0/build...
${ SIGNING_MESSAGE } Cleaning build area...
EOF
run_status_with_expected_output 'dkms_nover_test' << EOF
dkms_nover_test/1.0, ${ KERNEL_VER } , ${ KERNEL_ARCH } : built
EOF
set_signing_message "dkms_emptyver_test" "1.0"
run_with_expected_output dkms build -k " ${ KERNEL_VER } " -m dkms_emptyver_test -v 1.0 << EOF
Building module:
Cleaning build area...
make -j1 KERNELRELEASE = ${ KERNEL_VER } -C /lib/modules/${ KERNEL_VER } /build M = /var/lib/dkms/dkms_emptyver_test/1.0/build...
${ SIGNING_MESSAGE } Cleaning build area...
EOF
run_status_with_expected_output 'dkms_emptyver_test' << EOF
dkms_emptyver_test/1.0, ${ KERNEL_VER } , ${ KERNEL_ARCH } : built
EOF
echo 'Installing the nover/emptyver test modules'
run_with_expected_output dkms install -k " ${ KERNEL_VER } " -m dkms_nover_test -v 1.0 << EOF
dkms_nover_test.ko${ mod_compression_ext } :
Running module version sanity check.
- Original module
- No original module exists within this kernel
- Installation
- Installing to /lib/modules/${ KERNEL_VER } /${ expected_dest_loc } /
depmod...
EOF
run_status_with_expected_output 'dkms_nover_test' << EOF
dkms_nover_test/1.0, ${ KERNEL_VER } , ${ KERNEL_ARCH } : installed
EOF
run_with_expected_output dkms install -k " ${ KERNEL_VER } " -m dkms_emptyver_test -v 1.0 << EOF
dkms_emptyver_test.ko${ mod_compression_ext } :
Running module version sanity check.
- Original module
- No original module exists within this kernel
- Installation
- Installing to /lib/modules/${ KERNEL_VER } /${ expected_dest_loc } /
depmod...
EOF
run_status_with_expected_output 'dkms_emptyver_test' << EOF
dkms_emptyver_test/1.0, ${ KERNEL_VER } , ${ KERNEL_ARCH } : installed
EOF
echo 'Uninstalling the nover/emptyver test modules'
run_with_expected_output dkms uninstall -k " ${ KERNEL_VER } " -m dkms_nover_test -v 1.0 << EOF
Module dkms_nover_test-1.0 for kernel ${ KERNEL_VER } ( ${ KERNEL_ARCH } ) .
Before uninstall, this module version was ACTIVE on this kernel.
dkms_nover_test.ko${ mod_compression_ext } :
- Uninstallation
- Deleting from: /lib/modules/${ KERNEL_VER } /${ expected_dest_loc } /
- Original module
- No original module was found for this module on this kernel.
- Use the dkms install command to reinstall any previous module version.
EOF
run_status_with_expected_output 'dkms_nover_test' << EOF
dkms_nover_test/1.0, ${ KERNEL_VER } , ${ KERNEL_ARCH } : built
EOF
if [ [ -e " /lib/modules/ ${ KERNEL_VER } / ${ expected_dest_loc } /dkms_nover_test.ko ${ mod_compression_ext } " ] ] ; then
echo >& 2 " Error: module not removed in /lib/modules/ ${ KERNEL_VER } / ${ expected_dest_loc } /dkms_nover_test.ko ${ mod_compression_ext } "
exit 1
fi
run_with_expected_output dkms uninstall -k " ${ KERNEL_VER } " -m dkms_emptyver_test -v 1.0 << EOF
Module dkms_emptyver_test-1.0 for kernel ${ KERNEL_VER } ( ${ KERNEL_ARCH } ) .
Before uninstall, this module version was ACTIVE on this kernel.
dkms_emptyver_test.ko${ mod_compression_ext } :
- Uninstallation
- Deleting from: /lib/modules/${ KERNEL_VER } /${ expected_dest_loc } /
- Original module
- No original module was found for this module on this kernel.
- Use the dkms install command to reinstall any previous module version.
EOF
run_status_with_expected_output 'dkms_emptyver_test' << EOF
dkms_emptyver_test/1.0, ${ KERNEL_VER } , ${ KERNEL_ARCH } : built
EOF
if [ [ -e " /lib/modules/ ${ KERNEL_VER } / ${ expected_dest_loc } /dkms_emptyver_test.ko ${ mod_compression_ext } " ] ] ; then
echo >& 2 " Error: module not removed in /lib/modules/ ${ KERNEL_VER } / ${ expected_dest_loc } /dkms_emptyver_test.ko ${ mod_compression_ext } "
exit 1
fi
echo 'Unbuilding the nover/emptyver test modules'
run_with_expected_output dkms unbuild -k " ${ KERNEL_VER } " -m dkms_nover_test -v 1.0 << EOF
Module dkms_nover_test 1.0 is not installed for kernel ${ KERNEL_VER } ( ${ KERNEL_ARCH } ) . Skipping...
EOF
run_status_with_expected_output 'dkms_nover_test' << EOF
dkms_nover_test/1.0: added
EOF
run_with_expected_output dkms unbuild -k " ${ KERNEL_VER } " -m dkms_emptyver_test -v 1.0 << EOF
Module dkms_emptyver_test 1.0 is not installed for kernel ${ KERNEL_VER } ( ${ KERNEL_ARCH } ) . Skipping...
EOF
run_status_with_expected_output 'dkms_emptyver_test' << EOF
dkms_emptyver_test/1.0: added
EOF
echo 'Removing the nover/emptyver test modules'
run_with_expected_output dkms remove -k " ${ KERNEL_VER } " -m dkms_nover_test -v 1.0 << EOF
Module dkms_nover_test 1.0 is not installed for kernel ${ KERNEL_VER } ( ${ KERNEL_ARCH } ) . Skipping...
Module dkms_nover_test 1.0 is not built for kernel ${ KERNEL_VER } ( ${ KERNEL_ARCH } ) . Skipping...
Deleting module dkms_nover_test-1.0 completely from the DKMS tree.
EOF
run_status_with_expected_output 'dkms_nover_test' << EOF
EOF
run_with_expected_output dkms remove -k " ${ KERNEL_VER } " -m dkms_emptyver_test -v 1.0 << EOF
Module dkms_emptyver_test 1.0 is not installed for kernel ${ KERNEL_VER } ( ${ KERNEL_ARCH } ) . Skipping...
Module dkms_emptyver_test 1.0 is not built for kernel ${ KERNEL_VER } ( ${ KERNEL_ARCH } ) . Skipping...
Deleting module dkms_emptyver_test-1.0 completely from the DKMS tree.
EOF
run_status_with_expected_output 'dkms_emptyver_test' << EOF
EOF
echo 'Removing /usr/src/dkms_nover_test-1.0 /usr/src/dkms_emptyver_test-1.0'
rm -r /usr/src/dkms_nover_test-1.0 /usr/src/dkms_emptyver_test-1.0
echo 'Adding the nover update test modules 1.0 by directory'
run_with_expected_output dkms add test/dkms_nover_update_test/1.0 << EOF
Creating symlink /var/lib/dkms/dkms_nover_update_test/1.0/source -> /usr/src/dkms_nover_update_test-1.0
EOF
run_status_with_expected_output 'dkms_nover_update_test' << EOF
dkms_nover_update_test/1.0: added
EOF
if ! [ [ -d /usr/src/dkms_nover_update_test-1.0 ] ] ; then
echo >& 2 'Error: directory /usr/src/dkms_nover_update_test-1.0 was not created'
exit 1
fi
echo 'Installing the nover update test 1.0 modules'
set_signing_message "dkms_nover_update_test" "1.0"
run_with_expected_output dkms install -k " ${ KERNEL_VER } " -m dkms_nover_update_test -v 1.0 << EOF
Building module:
Cleaning build area...
make -j1 KERNELRELEASE = ${ KERNEL_VER } -C /lib/modules/${ KERNEL_VER } /build M = /var/lib/dkms/dkms_nover_update_test/1.0/build...
${ SIGNING_MESSAGE } Cleaning build area...
dkms_nover_update_test.ko${ mod_compression_ext } :
Running module version sanity check.
- Original module
- No original module exists within this kernel
- Installation
- Installing to /lib/modules/${ KERNEL_VER } /${ expected_dest_loc } /
depmod...
EOF
run_status_with_expected_output 'dkms_nover_update_test' << EOF
dkms_nover_update_test/1.0, ${ KERNEL_VER } , ${ KERNEL_ARCH } : installed
EOF
echo 'Adding the nover update test modules 2.0 by directory'
run_with_expected_output dkms add test/dkms_nover_update_test/2.0 << EOF
Creating symlink /var/lib/dkms/dkms_nover_update_test/2.0/source -> /usr/src/dkms_nover_update_test-2.0
EOF
run_status_with_expected_output 'dkms_nover_update_test' << EOF
dkms_nover_update_test/1.0, ${ KERNEL_VER } , ${ KERNEL_ARCH } : installed
dkms_nover_update_test/2.0: added
EOF
if ! [ [ -d /usr/src/dkms_nover_update_test-2.0 ] ] ; then
echo >& 2 'Error: directory /usr/src/dkms_nover_update_test-2.0 was not created'
exit 1
fi
echo 'Installing the nover update test 2.0 modules'
set_signing_message "dkms_nover_update_test" "2.0"
run_with_expected_output dkms install -k " ${ KERNEL_VER } " -m dkms_nover_update_test -v 2.0 << EOF
Building module:
Cleaning build area...
make -j1 KERNELRELEASE = ${ KERNEL_VER } -C /lib/modules/${ KERNEL_VER } /build M = /var/lib/dkms/dkms_nover_update_test/2.0/build...
${ SIGNING_MESSAGE } Cleaning build area...
dkms_nover_update_test.ko${ mod_compression_ext } :
Running module version sanity check.
- Original module
- This kernel never originally had a module by this name
- Installation
- Installing to /lib/modules/${ KERNEL_VER } /${ expected_dest_loc } /
depmod...
EOF
run_status_with_expected_output 'dkms_nover_update_test' << EOF
dkms_nover_update_test/1.0, ${ KERNEL_VER } , ${ KERNEL_ARCH } : built
dkms_nover_update_test/2.0, ${ KERNEL_VER } , ${ KERNEL_ARCH } : installed
EOF
echo 'Adding the nover update test modules 3.0 by directory'
run_with_expected_output dkms add test/dkms_nover_update_test/3.0 << EOF
Creating symlink /var/lib/dkms/dkms_nover_update_test/3.0/source -> /usr/src/dkms_nover_update_test-3.0
EOF
run_status_with_expected_output 'dkms_nover_update_test' << EOF
dkms_nover_update_test/1.0, ${ KERNEL_VER } , ${ KERNEL_ARCH } : built
dkms_nover_update_test/2.0, ${ KERNEL_VER } , ${ KERNEL_ARCH } : installed
dkms_nover_update_test/3.0: added
EOF
if ! [ [ -d /usr/src/dkms_nover_update_test-3.0 ] ] ; then
echo >& 2 'Error: directory /usr/src/dkms_nover_update_test-3.0 was not created'
exit 1
fi
echo 'Building the nover update test 3.0 modules'
set_signing_message "dkms_nover_update_test" "3.0"
run_with_expected_output dkms build -k " ${ KERNEL_VER } " -m dkms_nover_update_test -v 3.0 << EOF
Building module:
Cleaning build area...
make -j1 KERNELRELEASE = ${ KERNEL_VER } -C /lib/modules/${ KERNEL_VER } /build M = /var/lib/dkms/dkms_nover_update_test/3.0/build...
${ SIGNING_MESSAGE } Cleaning build area...
EOF
run_status_with_expected_output 'dkms_nover_update_test' << EOF
dkms_nover_update_test/1.0, ${ KERNEL_VER } , ${ KERNEL_ARCH } : built
dkms_nover_update_test/2.0, ${ KERNEL_VER } , ${ KERNEL_ARCH } : installed
dkms_nover_update_test/3.0, ${ KERNEL_VER } , ${ KERNEL_ARCH } : built
EOF
MODULE_PATH_2 = " /var/lib/dkms/dkms_nover_update_test/2.0/ ${ KERNEL_VER } / ${ KERNEL_ARCH } /module/dkms_nover_update_test.ko ${ mod_compression_ext } "
MODULE_PATH_3 = " /var/lib/dkms/dkms_nover_update_test/3.0/ ${ KERNEL_VER } / ${ KERNEL_ARCH } /module/dkms_nover_update_test.ko ${ mod_compression_ext } "
if ! modinfo " ${ MODULE_PATH_3 } " | grep -q '^srcversion:' && ! diff " ${ MODULE_PATH_2 } " " ${ MODULE_PATH_3 } " & >/dev/null; then
# On debian, no srcversion in modinfo's output, the installation will always succeed
echo 'Notice: Skip installation test on this platform'
else
echo 'Installing the nover update test 3.0 modules (expected error)'
set_signing_message "dkms_nover_update_test" "3.0"
run_with_expected_error 6 dkms install -k " ${ KERNEL_VER } " -m dkms_nover_update_test -v 3.0 << EOF
dkms_nover_update_test.ko${ mod_compression_ext } :
Running module version sanity check.
Module version for dkms_nover_update_test.ko${ mod_compression_ext }
exactly matches what is already found in kernel ${ KERNEL_VER } .
DKMS will not replace this module.
You may override by specifying --force.
Error! Installation aborted.
EOF
run_status_with_expected_output 'dkms_nover_update_test' << EOF
dkms_nover_update_test/1.0, ${ KERNEL_VER } , ${ KERNEL_ARCH } : built
dkms_nover_update_test/2.0, ${ KERNEL_VER } , ${ KERNEL_ARCH } : installed
dkms_nover_update_test/3.0, ${ KERNEL_VER } , ${ KERNEL_ARCH } : built
EOF
fi
echo 'Removing the nover update test modules'
run_with_expected_output dkms remove -k " ${ KERNEL_VER } " -m dkms_nover_update_test -v 3.0 << EOF
Module dkms_nover_update_test 3.0 is not installed for kernel ${ KERNEL_VER } ( ${ KERNEL_ARCH } ) . Skipping...
Deleting module dkms_nover_update_test-3.0 completely from the DKMS tree.
EOF
run_with_expected_output dkms remove -k " ${ KERNEL_VER } " -m dkms_nover_update_test -v 2.0 << EOF
Module dkms_nover_update_test-2.0 for kernel ${ KERNEL_VER } ( ${ KERNEL_ARCH } ) .
Before uninstall, this module version was ACTIVE on this kernel.
dkms_nover_update_test.ko${ mod_compression_ext } :
- Uninstallation
- Deleting from: /lib/modules/${ KERNEL_VER } /${ expected_dest_loc } /
- Original module
- No original module was found for this module on this kernel.
- Use the dkms install command to reinstall any previous module version.
Deleting module dkms_nover_update_test-2.0 completely from the DKMS tree.
EOF
run_with_expected_output dkms remove -k " ${ KERNEL_VER } " -m dkms_nover_update_test -v 1.0 << EOF
Module dkms_nover_update_test 1.0 is not installed for kernel ${ KERNEL_VER } ( ${ KERNEL_ARCH } ) . Skipping...
Deleting module dkms_nover_update_test-1.0 completely from the DKMS tree.
EOF
run_status_with_expected_output 'dkms_nover_update_test' << EOF
EOF
echo 'Removing /usr/src/dkms_nover_update_test-{1,2,3}.0'
rm -r /usr/src/dkms_nover_update_test-{ 1,2,3} .0
echo 'Checking that the environment is clean'
check_no_dkms_test
############################################################################
### Testing dkms autoinstall ###
############################################################################
echo 'Running autoinstall error testing'
echo 'Adding failing test module by directory'
run_with_expected_output dkms add test/dkms_failing_test-1.0 << EOF
Creating symlink /var/lib/dkms/dkms_failing_test/1.0/source -> /usr/src/dkms_failing_test-1.0
EOF
echo 'Running autoinstall with failing test module (expected error)'
run_with_expected_error 11 dkms autoinstall -k " ${ KERNEL_VER } " << EOF
Building module:
Cleaning build area...
make -j1 KERNELRELEASE = ${ KERNEL_VER } all...( bad exit status: 2)
Error! Bad return status for module build on kernel: ${ KERNEL_VER } ( ${ KERNEL_ARCH } )
Consult /var/lib/dkms/dkms_failing_test/1.0/build/make.log for more information.
dkms autoinstall on ${ KERNEL_VER } /${ KERNEL_ARCH } failed for dkms_failing_test( 10)
Error! One or more modules failed to install during autoinstall.
Refer to previous errors for more information.
EOF
echo 'Adding test module with dependencies on failing test module by directory'
run_with_expected_output dkms add test/dkms_dependencies_test-1.0 << EOF
Creating symlink /var/lib/dkms/dkms_dependencies_test/1.0/source -> /usr/src/dkms_dependencies_test-1.0
EOF
echo 'Running autoinstall with failing test module and test module with dependencies on the failing module (expected error)'
run_with_expected_error 11 dkms autoinstall -k " ${ KERNEL_VER } " << EOF
Building module:
Cleaning build area...
make -j1 KERNELRELEASE = ${ KERNEL_VER } all...( bad exit status: 2)
Error! Bad return status for module build on kernel: ${ KERNEL_VER } ( ${ KERNEL_ARCH } )
Consult /var/lib/dkms/dkms_failing_test/1.0/build/make.log for more information.
dkms autoinstall on ${ KERNEL_VER } /${ KERNEL_ARCH } failed for dkms_failing_test( 10)
dkms_dependencies_test/1.0 autoinstall failed due to missing dependencies: dkms_failing_test
Error! One or more modules failed to install during autoinstall.
Refer to previous errors for more information.
EOF
echo 'Removing failing test module'
run_with_expected_output dkms remove -k " ${ KERNEL_VER } " -m dkms_failing_test -v 1.0 << EOF
Module dkms_failing_test 1.0 is not installed for kernel ${ KERNEL_VER } ( ${ KERNEL_ARCH } ) . Skipping...
Module dkms_failing_test 1.0 is not built for kernel ${ KERNEL_VER } ( ${ KERNEL_ARCH } ) . Skipping...
Deleting module dkms_failing_test-1.0 completely from the DKMS tree.
EOF
echo 'Removing /usr/src/dkms_failing_test-1.0'
rm -r /usr/src/dkms_failing_test-1.0
echo 'Running autoinstall with test module with missing dependencies (expected error)'
run_with_expected_error 11 dkms autoinstall -k " ${ KERNEL_VER } " << EOF
dkms_dependencies_test/1.0 autoinstall failed due to missing dependencies: dkms_failing_test
Error! One or more modules failed to install during autoinstall.
Refer to previous errors for more information.
EOF
echo 'Removing test module with dependencies'
run_with_expected_output dkms remove -k " ${ KERNEL_VER } " -m dkms_dependencies_test -v 1.0 << EOF
Module dkms_dependencies_test 1.0 is not installed for kernel ${ KERNEL_VER } ( ${ KERNEL_ARCH } ) . Skipping...
Module dkms_dependencies_test 1.0 is not built for kernel ${ KERNEL_VER } ( ${ KERNEL_ARCH } ) . Skipping...
Deleting module dkms_dependencies_test-1.0 completely from the DKMS tree.
EOF
echo 'Removing /usr/src/dkms_dependencies_test-1.0'
rm -r /usr/src/dkms_dependencies_test-1.0
echo 'Checking that the environment is clean again'
check_no_dkms_test
############################################################################
### Testing BUILD_EXCLUSIVE_* ###
############################################################################
echo 'Running tests with BUILD_EXCLUSIVE_* modules'
set_signing_message "dkms_test" "1.0"
echo 'Adding the build-exclusive test module by directory'
run_with_expected_output dkms add test/dkms_build_exclusive_test-1.0 << EOF
Creating symlink /var/lib/dkms/dkms_build_exclusive_test/1.0/source -> /usr/src/dkms_build_exclusive_test-1.0
EOF
run_status_with_expected_output 'dkms_build_exclusive_test' << EOF
dkms_build_exclusive_test/1.0: added
EOF
if ! [ [ -d /usr/src/dkms_build_exclusive_test-1.0 ] ] ; then
echo >& 2 'Error: directory /usr/src/dkms_build_exclusive_test-1.0 was not created'
return 1
fi
# Should this really fail?
echo '(Not) building the build-exclusive test module'
run_with_expected_error 77 dkms build -k " ${ KERNEL_VER } " -m dkms_build_exclusive_test -v 1.0 << EOF
Error! The /var/lib/dkms/dkms_build_exclusive_test/1.0/${ KERNEL_VER } /${ KERNEL_ARCH } /dkms.conf for module dkms_build_exclusive_test includes a BUILD_EXCLUSIVE directive which does not match this kernel/arch/config.
This indicates that it should not be built.
EOF
run_status_with_expected_output 'dkms_build_exclusive_test' << EOF
dkms_build_exclusive_test/1.0: added
EOF
echo "Running dkms autoinstall (1 x skip)"
run_with_expected_output dkms autoinstall -k " ${ KERNEL_VER } " << EOF
Error! The /var/lib/dkms/dkms_build_exclusive_test/1.0/${ KERNEL_VER } /${ KERNEL_ARCH } /dkms.conf for module dkms_build_exclusive_test includes a BUILD_EXCLUSIVE directive which does not match this kernel/arch/config.
This indicates that it should not be built.
dkms autoinstall on ${ KERNEL_VER } /${ KERNEL_ARCH } was skipped for dkms_build_exclusive_test
EOF
run_status_with_expected_output 'dkms_build_exclusive_test' << EOF
dkms_build_exclusive_test/1.0: added
EOF
echo 'Adding the test module by directory'
run_with_expected_output dkms add test/dkms_test-1.0 << EOF
Creating symlink /var/lib/dkms/dkms_test/1.0/source -> /usr/src/dkms_test-1.0
EOF
run_status_with_expected_output 'dkms_test' << EOF
dkms_test/1.0: added
EOF
echo "Running dkms autoinstall (1 x skip, 1 x pass)"
run_with_expected_output dkms autoinstall -k " ${ KERNEL_VER } " << EOF
Error! The /var/lib/dkms/dkms_build_exclusive_test/1.0/${ KERNEL_VER } /${ KERNEL_ARCH } /dkms.conf for module dkms_build_exclusive_test includes a BUILD_EXCLUSIVE directive which does not match this kernel/arch/config.
This indicates that it should not be built.
Building module:
Cleaning build area...
make -j1 KERNELRELEASE = ${ KERNEL_VER } -C /lib/modules/${ KERNEL_VER } /build M = /var/lib/dkms/dkms_test/1.0/build...
${ SIGNING_MESSAGE } Cleaning build area...
dkms_test.ko${ mod_compression_ext } :
Running module version sanity check.
- Original module
- No original module exists within this kernel
- Installation
- Installing to /lib/modules/${ KERNEL_VER } /${ expected_dest_loc } /
depmod...
dkms autoinstall on ${ KERNEL_VER } /${ KERNEL_ARCH } succeeded for dkms_test
dkms autoinstall on ${ KERNEL_VER } /${ KERNEL_ARCH } was skipped for dkms_build_exclusive_test
EOF
run_status_with_expected_output 'dkms_build_exclusive_test' << EOF
dkms_build_exclusive_test/1.0: added
EOF
run_status_with_expected_output 'dkms_test' << EOF
dkms_test/1.0, ${ KERNEL_VER } , ${ KERNEL_ARCH } : installed
EOF
echo 'Unbuilding the test module'
run_with_expected_output dkms unbuild -k " ${ KERNEL_VER } " -m dkms_test -v 1.0 << EOF
Module dkms_test-1.0 for kernel ${ KERNEL_VER } ( ${ KERNEL_ARCH } ) .
Before uninstall, this module version was ACTIVE on this kernel.
dkms_test.ko${ mod_compression_ext } :
- Uninstallation
- Deleting from: /lib/modules/${ KERNEL_VER } /${ expected_dest_loc } /
- Original module
- No original module was found for this module on this kernel.
- Use the dkms install command to reinstall any previous module version.
EOF
run_status_with_expected_output 'dkms_test' << EOF
dkms_test/1.0: added
EOF
echo 'Adding failing test module by directory'
run_with_expected_output dkms add test/dkms_failing_test-1.0 << EOF
Creating symlink /var/lib/dkms/dkms_failing_test/1.0/source -> /usr/src/dkms_failing_test-1.0
EOF
echo "Running dkms autoinstall (1 x skip, 1 x fail, 1 x pass) (expected error)"
run_with_expected_error 11 dkms autoinstall -k " ${ KERNEL_VER } " << EOF
Error! The /var/lib/dkms/dkms_build_exclusive_test/1.0/${ KERNEL_VER } /${ KERNEL_ARCH } /dkms.conf for module dkms_build_exclusive_test includes a BUILD_EXCLUSIVE directive which does not match this kernel/arch/config.
This indicates that it should not be built.
Building module:
Cleaning build area...
make -j1 KERNELRELEASE = ${ KERNEL_VER } all...( bad exit status: 2)
Error! Bad return status for module build on kernel: ${ KERNEL_VER } ( ${ KERNEL_ARCH } )
Consult /var/lib/dkms/dkms_failing_test/1.0/build/make.log for more information.
Building module:
Cleaning build area...
make -j1 KERNELRELEASE = ${ KERNEL_VER } -C /lib/modules/${ KERNEL_VER } /build M = /var/lib/dkms/dkms_test/1.0/build...
${ SIGNING_MESSAGE } Cleaning build area...
dkms_test.ko${ mod_compression_ext } :
Running module version sanity check.
- Original module
- No original module exists within this kernel
- Installation
- Installing to /lib/modules/${ KERNEL_VER } /${ expected_dest_loc } /
depmod...
dkms autoinstall on ${ KERNEL_VER } /${ KERNEL_ARCH } succeeded for dkms_test
dkms autoinstall on ${ KERNEL_VER } /${ KERNEL_ARCH } was skipped for dkms_build_exclusive_test
dkms autoinstall on ${ KERNEL_VER } /${ KERNEL_ARCH } failed for dkms_failing_test( 10)
Error! One or more modules failed to install during autoinstall.
Refer to previous errors for more information.
EOF
echo 'Removing failing test module'
run_with_expected_output dkms remove -k " ${ KERNEL_VER } " -m dkms_failing_test -v 1.0 << EOF
Module dkms_failing_test 1.0 is not installed for kernel ${ KERNEL_VER } ( ${ KERNEL_ARCH } ) . Skipping...
Module dkms_failing_test 1.0 is not built for kernel ${ KERNEL_VER } ( ${ KERNEL_ARCH } ) . Skipping...
Deleting module dkms_failing_test-1.0 completely from the DKMS tree.
EOF
echo 'Removing /usr/src/dkms_failing_test-1.0'
rm -r /usr/src/dkms_failing_test-1.0
echo 'Removing the test module'
run_with_expected_output dkms remove --all -m dkms_test -v 1.0 << EOF
Module dkms_test-1.0 for kernel ${ KERNEL_VER } ( ${ KERNEL_ARCH } ) .
Before uninstall, this module version was ACTIVE on this kernel.
dkms_test.ko${ mod_compression_ext } :
- Uninstallation
- Deleting from: /lib/modules/${ KERNEL_VER } /${ expected_dest_loc } /
- Original module
- No original module was found for this module on this kernel.
- Use the dkms install command to reinstall any previous module version.
Deleting module dkms_test-1.0 completely from the DKMS tree.
EOF
run_status_with_expected_output 'dkms_test' << EOF
EOF
echo 'Removing /usr/src/dkms_test-1.0'
rm -r /usr/src/dkms_test-1.0
echo 'Adding the build-exclusive dependencies test module by directory'
run_with_expected_output dkms add test/dkms_build_exclusive_dependencies_test-1.0 << EOF
Creating symlink /var/lib/dkms/dkms_build_exclusive_dependencies_test/1.0/source -> /usr/src/dkms_build_exclusive_dependencies_test-1.0
EOF
run_status_with_expected_output 'dkms_build_exclusive_dependencies_test' << EOF
dkms_build_exclusive_dependencies_test/1.0: added
EOF
if ! [ [ -d /usr/src/dkms_build_exclusive_dependencies_test-1.0 ] ] ; then
echo >& 2 'Error: directory /usr/src/dkms_build_exclusive_dependencies_test-1.0 was not created'
return 1
fi
echo "Running dkms autoinstall (2 x skip, with dependency)"
run_with_expected_output dkms autoinstall -k " ${ KERNEL_VER } " << EOF
Error! The /var/lib/dkms/dkms_build_exclusive_test/1.0/${ KERNEL_VER } /${ KERNEL_ARCH } /dkms.conf for module dkms_build_exclusive_test includes a BUILD_EXCLUSIVE directive which does not match this kernel/arch/config.
This indicates that it should not be built.
Error! The /var/lib/dkms/dkms_build_exclusive_dependencies_test/1.0/${ KERNEL_VER } /${ KERNEL_ARCH } /dkms.conf for module dkms_build_exclusive_dependencies_test includes a BUILD_EXCLUSIVE directive which does not match this kernel/arch/config.
This indicates that it should not be built.
dkms autoinstall on ${ KERNEL_VER } /${ KERNEL_ARCH } was skipped for dkms_build_exclusive_test dkms_build_exclusive_dependencies_test
EOF
run_status_with_expected_output 'dkms_build_exclusive_test' << EOF
dkms_build_exclusive_test/1.0: added
EOF
run_status_with_expected_output 'dkms_build_exclusive_dependencies_test' << EOF
dkms_build_exclusive_dependencies_test/1.0: added
EOF
echo 'Removing the build-exclusive dependencies test module'
run_with_expected_output dkms remove --all -m dkms_build_exclusive_dependencies_test -v 1.0 << EOF
Deleting module dkms_build_exclusive_dependencies_test-1.0 completely from the DKMS tree.
EOF
run_status_with_expected_output 'dkms_build_exclusive_dependencies_test' << EOF
EOF
echo 'Removing /usr/src/dkms_build_exclusive_dependencies_test-1.0'
rm -r /usr/src/dkms_build_exclusive_dependencies_test-1.0
echo 'Removing the build-exclusive test module'
run_with_expected_output dkms remove --all -m dkms_build_exclusive_test -v 1.0 << EOF
Deleting module dkms_build_exclusive_test-1.0 completely from the DKMS tree.
EOF
run_status_with_expected_output 'dkms_build_exclusive_test' << EOF
EOF
echo 'Removing /usr/src/dkms_build_exclusive_test-1.0'
rm -r /usr/src/dkms_build_exclusive_test-1.0
echo 'Checking that the environment is clean again'
check_no_dkms_test
2022-10-09 17:17:07 +08:00
echo 'All tests successful :)'