Version in base suite: 3.2.0-1 Base version: dkms_3.2.0-1 Target version: dkms_3.2.2-1~deb13u1 Base file: /srv/ftp-master.debian.org/ftp/pool/main/d/dkms/dkms_3.2.0-1.dsc Target file: /srv/ftp-master.debian.org/policy/pool/main/d/dkms/dkms_3.2.2-1~deb13u1.dsc .github/workflows/shellcheck.yml | 2 .github/workflows/tests.yml | 14 + Makefile | 5 debian/changelog | 30 +++- debian/control | 4 debian/dkms.install | 1 debian/patches/0001-drop-duplicate-slash-from-path.patch | 25 --- debian/patches/0001-run_test.sh-show-make.log-on-unexpected-errors.patch | 33 ++++ debian/patches/0002-common.postinst-emit-a-warning-if-no-kernel-headers-.patch | 32 ++++ debian/patches/0002-do-not-store-an-unused-copy-of-the-kernel-config.patch | 24 --- debian/patches/0003-common.postinst-fix-warning-message.patch | 25 +++ debian/patches/no-CLEAN-deprecation-warning.patch | 2 debian/patches/series | 5 dkms.in | 75 ++++++---- dkms_framework.conf.in | 6 redhat_kernel_install.d.in | 6 run_test.sh | 55 +++---- test/dkms_build_exclusive_test-1.0/dkms.conf | 3 test/dkms_conf_test_sparse_arrays/dkms.conf | 7 19 files changed, 215 insertions(+), 139 deletions(-) diff -Nru dkms-3.2.0/.github/workflows/shellcheck.yml dkms-3.2.2/.github/workflows/shellcheck.yml --- dkms-3.2.0/.github/workflows/shellcheck.yml 2025-05-07 16:14:58.000000000 +0000 +++ dkms-3.2.2/.github/workflows/shellcheck.yml 2025-09-12 13:00:32.000000000 +0000 @@ -9,7 +9,7 @@ name: Shellcheck runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 - name: Run ShellCheck uses: ludeeus/action-shellcheck@master with: diff -Nru dkms-3.2.0/.github/workflows/tests.yml dkms-3.2.2/.github/workflows/tests.yml --- dkms-3.2.0/.github/workflows/tests.yml 2025-05-07 16:14:58.000000000 +0000 +++ dkms-3.2.2/.github/workflows/tests.yml 2025-09-12 13:00:32.000000000 +0000 @@ -13,22 +13,23 @@ strategy: matrix: distro: + - {name: "almalinux", tag: "10"} - {name: "almalinux", tag: "9"} - {name: "almalinux", tag: "8"} + - {name: "alpine", tag: "3.22", variant: "-lts"} + - {name: "alpine", tag: "3.22", variant: "-virt"} - {name: "alpine", tag: "3.21", variant: "-lts"} - {name: "alpine", tag: "3.21", variant: "-virt"} - {name: "alpine", tag: "3.20", variant: "-lts"} - {name: "alpine", tag: "3.20", variant: "-virt"} - {name: "alpine", tag: "3.19", variant: "-lts"} - {name: "alpine", tag: "3.19", variant: "-virt"} - - {name: "alpine", tag: "3.18", variant: "-lts"} - - {name: "alpine", tag: "3.18", variant: "-virt"} - {name: "archlinux", tag: "latest"} - {name: "archlinux", tag: "latest", variant: "-lts"} - {name: "archlinux", tag: "latest", variant: "-zen"} - {name: "centos", tag: "stream10", url: "quay.io/centos/"} - {name: "centos", tag: "stream9", url: "quay.io/centos/"} - - {name: "debian", tag: "testing"} + - {name: "debian", tag: "13"} - {name: "debian", tag: "12"} - {name: "fedora", tag: "rawhide", url: "registry.fedoraproject.org/"} - {name: "fedora", tag: "42", url: "registry.fedoraproject.org/"} @@ -37,10 +38,8 @@ - {name: "opensuse/tumbleweed", tag: "latest", variant: "-default", url: "registry.opensuse.org/"} - {name: "opensuse/leap", tag: "15.6", variant: "-default", url: "registry.opensuse.org/"} - {name: "ubuntu", tag: "25.04"} - - {name: "ubuntu", tag: "24.10"} - {name: "ubuntu", tag: "24.04"} - {name: "ubuntu", tag: "22.04"} - - {name: "ubuntu", tag: "20.04"} runs-on: ubuntu-24.04 container: image: ${{ matrix.distro.url }}${{ matrix.distro.name }}:${{ matrix.distro.tag }} @@ -51,7 +50,7 @@ run: | zypper --non-interactive install git - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 - name: Install dependencies for Red Hat based distributions if: matrix.distro.name == 'almalinux' || matrix.distro.name == 'centos' || matrix.distro.name == 'fedora' @@ -76,6 +75,7 @@ - name: Install Debian dependencies if: matrix.distro.name == 'debian' run: | + export DEBIAN_FRONTEND=noninteractive apt-get update -q apt-get install -qy make linux-headers-amd64 linux-image-amd64 openssl xz-utils patch make install-debian @@ -97,6 +97,7 @@ - name: Install Ubuntu dependencies if: matrix.distro.name == 'ubuntu' run: | + export DEBIAN_FRONTEND=noninteractive apt-get update -q apt-get install -qy gcc make linux-headers-generic linux-image-generic openssl shim-signed patch make install-debian @@ -129,4 +130,5 @@ [ -e "$depmod" ] && grep -r ^search "$depmod" || true done + # Run all tests ./run_test.sh diff -Nru dkms-3.2.0/Makefile dkms-3.2.2/Makefile --- dkms-3.2.0/Makefile 2025-05-07 16:14:58.000000000 +0000 +++ dkms-3.2.2/Makefile 2025-09-12 13:00:32.000000000 +0000 @@ -1,7 +1,7 @@ -RELEASE_DATE := "07 May 2025" +RELEASE_DATE := "12 Sep 2025" RELEASE_MAJOR := 3 RELEASE_MINOR := 2 -RELEASE_MICRO := 0 +RELEASE_MICRO := 2 RELEASE_NAME := dkms RELEASE_VERSION := $(RELEASE_MAJOR).$(RELEASE_MINOR).$(RELEASE_MICRO) RELEASE_STRING := $(RELEASE_NAME)-$(RELEASE_VERSION) @@ -85,7 +85,6 @@ install -D -m 0755 debian_kernel_postinst.d $(DESTDIR)$(KCONF)/header_postinst.d/dkms install -D -m 0755 debian_kernel_preinst.d $(DESTDIR)$(KCONF)/preinst.d/dkms install -D -m 0755 debian_kernel_prerm.d $(DESTDIR)$(KCONF)/prerm.d/dkms - install -D -m 0644 dkms.service $(DESTDIR)$(SYSTEMD)/dkms.service install-doc: $(if $(strip $(DOC)),$(error Setting DOCDIR is not supported)) diff -Nru dkms-3.2.0/debian/changelog dkms-3.2.2/debian/changelog --- dkms-3.2.0/debian/changelog 2025-05-10 02:47:51.000000000 +0000 +++ dkms-3.2.2/debian/changelog 2025-11-01 19:49:32.000000000 +0000 @@ -1,3 +1,21 @@ +dkms (3.2.2-1~deb13u1) trixie; urgency=medium + + * Rebuild for trixie. + + -- Andreas Beckmann Sat, 01 Nov 2025 20:49:32 +0100 + +dkms (3.2.2-1) unstable; urgency=medium + + * New upstream release. + * Stop shipping dkms.service. Not really needed and causes a dependency + cycle with cloud-init-network.service. (Closes: #1107232) + * common.postinst: Emit a warning if no kernel headers were found. + (Closes: #1114731) + * Drop Pre-Depends: lsb-release, no longer used since 3.0.12. + * Add Breaks against more obsolete *-dkms packages. + + -- Andreas Beckmann Wed, 17 Sep 2025 00:42:50 +0200 + dkms (3.2.0-1) unstable; urgency=medium * New upstream release. @@ -20,7 +38,7 @@ dkms (3.1.7-1) unstable; urgency=medium - * New upstream release. + * New upstream release. (Closes: #1025785) * Install zsh completions in /usr/share/zsh/vendor-completions/. * New autopkgtest: Run upstream testsuite with /proc unmounted. * Ship dkms.service. @@ -42,7 +60,7 @@ * New upstream release. (Closes: #1009645, #706868) * Refresh patches. * framework.conf.d: Enable autoinstall_all_kernels="yes" by default. - (Closes: #1087433) + (Closes: #1087433, #704788, #704150) * dkms-autopkgtest: Skip test (exit 0) on i386 (no more kernels or headers). * dkms-autopkgtest: Skip test (exit 77) if no linux-headers-* seem to exist. * Skip upstream testsuite on i386. @@ -55,7 +73,7 @@ dkms (3.1.4-1) experimental; urgency=medium - * New upstream release. (Closes: #1088640) + * New upstream release. (Closes: #1088640, #843113) * Refresh patches. * Add dkms-replace-test-dkms package with a trivial kernel module for dkms tests. @@ -99,7 +117,7 @@ dkms (3.0.13-1) unstable; urgency=medium - * New upstream release. + * New upstream release. (Closes: #897677) * Refresh patches. * Downgrade compiler dependency to Recommends to ease cross installation. The linux-headers-* packages have a proper compiler dependency. @@ -304,7 +322,7 @@ dkms (3.0.9-1) unstable; urgency=medium - * New upstream version 3.0.9 (Closes: #1019425, #1008505) + * New upstream version 3.0.9 (Closes: #1019425, #1008505, #1025224) * Remove patches merged upstream and refresh remainders * Remove unused override: source/maintainer-manual-page * Remove unused "Breaks: ${dkms:Breaks}" from d/control @@ -813,7 +831,7 @@ [ Aron Xu ] * Downgrade menu from Recommends to Suggests (Closes: #744054) - * Imported Upstream version 2.3 + * Imported Upstream version 2.3 (Closes: #702018) * Upstream post-release cherry-picks * d/compat: 7 -> 9 diff -Nru dkms-3.2.0/debian/control dkms-3.2.2/debian/control --- dkms-3.2.0/debian/control 2025-05-10 02:47:51.000000000 +0000 +++ dkms-3.2.2/debian/control 2025-11-01 19:49:32.000000000 +0000 @@ -17,7 +17,6 @@ Package: dkms Architecture: all Multi-Arch: foreign -Pre-Depends: lsb-release Depends: ${misc:Depends}, kmod, dpkg-dev, @@ -32,6 +31,7 @@ # fewer supported architectures in trixie than before broadcom-sta-dkms (<< 6.30.223.271-25.1~), dahdi-dkms (<< 1:3.1.0+git20230717~dfsg-10.1~), + nvidia-tesla-535-kernel-dkms (<< 535.230), tp-smapi-dkms (<< 0.44-1.2~), # in bookworm, not in trixie adv-17v35x-dkms (<< 5.0.7.0-1.0), @@ -60,7 +60,7 @@ # in jessie, not in stretch fglrx-modules-dkms (<< 1:15.12-2.0), iscsitarget-dkms (<< 1.4.20.3+svn502-2.0), - oss4-dkms (<< 4.2-build2020-1~), + oss4-dkms (<< 4.2-build2020-5~), virtualbox-dkms (<< 5), virtualbox-guest-dkms (<< 7), # in wheezy, not in jessie diff -Nru dkms-3.2.0/debian/dkms.install dkms-3.2.2/debian/dkms.install --- dkms-3.2.0/debian/dkms.install 2025-05-10 02:47:51.000000000 +0000 +++ dkms-3.2.2/debian/dkms.install 2025-11-01 19:49:32.000000000 +0000 @@ -2,7 +2,6 @@ etc/kernel/ usr/lib/dkms/ usr/lib/kernel/ -usr/lib/systemd/system/ usr/sbin/dkms usr/share/apport/ usr/share/bash-completion/ diff -Nru dkms-3.2.0/debian/patches/0001-drop-duplicate-slash-from-path.patch dkms-3.2.2/debian/patches/0001-drop-duplicate-slash-from-path.patch --- dkms-3.2.0/debian/patches/0001-drop-duplicate-slash-from-path.patch 2025-05-10 02:47:51.000000000 +0000 +++ dkms-3.2.2/debian/patches/0001-drop-duplicate-slash-from-path.patch 1970-01-01 00:00:00.000000000 +0000 @@ -1,25 +0,0 @@ -From ae6d62a31a863be18c00ccaccddd995e76182f44 Mon Sep 17 00:00:00 2001 -From: Andreas Beckmann -Date: Sat, 10 May 2025 03:16:55 +0200 -Subject: [PATCH 1/3] drop duplicate slash from path - ---- - dkms.in | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/dkms.in b/dkms.in -index bbb1c37..8a26c8e 100644 ---- a/dkms.in -+++ b/dkms.in -@@ -1020,7 +1020,7 @@ check_version_sanity() - return 0 - fi - local dkms_module -- dkms_module=$(compressed_or_uncompressed "$dkms_tree/$module/$module_version/$1/$2/module/" "${4}") -+ dkms_module=$(compressed_or_uncompressed "$dkms_tree/$module/$module_version/$1/$2/module" "${4}") - - local cmp_res - cmp_res="$(compare_module_version "${kernels_module}" "${dkms_module}")" --- -2.39.5 - diff -Nru dkms-3.2.0/debian/patches/0001-run_test.sh-show-make.log-on-unexpected-errors.patch dkms-3.2.2/debian/patches/0001-run_test.sh-show-make.log-on-unexpected-errors.patch --- dkms-3.2.0/debian/patches/0001-run_test.sh-show-make.log-on-unexpected-errors.patch 1970-01-01 00:00:00.000000000 +0000 +++ dkms-3.2.2/debian/patches/0001-run_test.sh-show-make.log-on-unexpected-errors.patch 2025-11-01 19:49:32.000000000 +0000 @@ -0,0 +1,33 @@ +From 4a00fead920c99e480e42f5b88573c5b0944ff6d Mon Sep 17 00:00:00 2001 +From: Andreas Beckmann +Date: Wed, 3 Sep 2025 13:32:00 +0200 +Subject: [PATCH 1/2] run_test.sh: show make.log on unexpected errors + +--- + run_test.sh | 3 +++ + 1 file changed, 3 insertions(+) + +diff --git a/run_test.sh b/run_test.sh +index 2790a7e..9bc11e9 100755 +--- a/run_test.sh ++++ b/run_test.sh +@@ -222,13 +222,16 @@ run_with_expected_error() { + local output_log=test_cmd_output.log + local expected_output_log=test_cmd_expected_output.log + local error_code=0 ++ local make_log + + shift + cat > "${expected_output_log}" + stdbuf -o L -e L "$@" > "${output_log}" 2>&1 || error_code=$? ++ make_log=$(awk '{print $2}' "${output_log}" | grep make.log || true) + if [[ "${error_code}" != "${expected_error_code}" ]] ; then + echo "Error: command '$*' returned status ${error_code} instead of expected ${expected_error_code}" + cat "${output_log}" ++ [ -z "${make_log}" ] || cat "${make_log}" + rm "${expected_output_log}" "${output_log}" + return 1 + fi +-- +2.39.5 + diff -Nru dkms-3.2.0/debian/patches/0002-common.postinst-emit-a-warning-if-no-kernel-headers-.patch dkms-3.2.2/debian/patches/0002-common.postinst-emit-a-warning-if-no-kernel-headers-.patch --- dkms-3.2.0/debian/patches/0002-common.postinst-emit-a-warning-if-no-kernel-headers-.patch 1970-01-01 00:00:00.000000000 +0000 +++ dkms-3.2.2/debian/patches/0002-common.postinst-emit-a-warning-if-no-kernel-headers-.patch 2025-11-01 19:49:32.000000000 +0000 @@ -0,0 +1,32 @@ +From d876d6ce26a1d6e01384bd404d4d64e8f078b01e Mon Sep 17 00:00:00 2001 +From: Andreas Beckmann +Date: Sun, 14 Sep 2025 13:27:56 +0200 +Subject: [PATCH 2/2] common.postinst: emit a warning if no kernel headers were + found + +Fixes: #545 +--- + dkms_common.postinst.in | 7 +++++++ + 1 file changed, 7 insertions(+) + +diff --git a/dkms_common.postinst.in b/dkms_common.postinst.in +index 9e76604..87781b8 100644 +--- a/dkms_common.postinst.in ++++ b/dkms_common.postinst.in +@@ -208,6 +208,13 @@ if [ -z "$autoinstall_all_kernels" ]; then + fi + fi + ++if [ -z "$KERNELS" ]; then ++ echo "WARNING: No kernel headers were found, skipping module build." ++ echo " The get the headers for the running kernel ($CURRENT_KERNEL)" ++ echo " please install the linux-headers-$CURRENT_KERNEL package." ++ exit 0 ++fi ++ + # Take care of displaying newline separated list + echo "Building for $KERNELS" | tr '\n' ',' \ + | sed -e 's/,/, /g; s/, $/\n/; s/, \([^,]\+\)$/ and \1/' +-- +2.39.5 + diff -Nru dkms-3.2.0/debian/patches/0002-do-not-store-an-unused-copy-of-the-kernel-config.patch dkms-3.2.2/debian/patches/0002-do-not-store-an-unused-copy-of-the-kernel-config.patch --- dkms-3.2.0/debian/patches/0002-do-not-store-an-unused-copy-of-the-kernel-config.patch 2025-05-10 02:47:51.000000000 +0000 +++ dkms-3.2.2/debian/patches/0002-do-not-store-an-unused-copy-of-the-kernel-config.patch 1970-01-01 00:00:00.000000000 +0000 @@ -1,24 +0,0 @@ -From 9f0ff1439a9e8a4b045ea8a224106f378056e04d Mon Sep 17 00:00:00 2001 -From: Andreas Beckmann -Date: Sat, 10 May 2025 03:17:37 +0200 -Subject: [PATCH 2/3] do not store an unused copy of the kernel config - ---- - dkms.in | 1 - - 1 file changed, 1 deletion(-) - -diff --git a/dkms.in b/dkms.in -index 8a26c8e..a0e91e9 100644 ---- a/dkms.in -+++ b/dkms.in -@@ -1462,7 +1462,6 @@ do_build() - mkdir -p "$kernelver_dir" - local -r tmp_base_dir=$(mktemp_or_die -d "$kernelver_dir/.tmp_${arch}_XXXXXX") - mkdir -p "$tmp_base_dir/log" -- [[ $kernel_config ]] && cp -f "$kernel_config" "$tmp_base_dir/log/" - - # Save a copy of the new module - mkdir -p "$tmp_base_dir/module" --- -2.39.5 - diff -Nru dkms-3.2.0/debian/patches/0003-common.postinst-fix-warning-message.patch dkms-3.2.2/debian/patches/0003-common.postinst-fix-warning-message.patch --- dkms-3.2.0/debian/patches/0003-common.postinst-fix-warning-message.patch 1970-01-01 00:00:00.000000000 +0000 +++ dkms-3.2.2/debian/patches/0003-common.postinst-fix-warning-message.patch 2025-11-01 19:49:32.000000000 +0000 @@ -0,0 +1,25 @@ +From a66123e937308553e9d721b3ddc965149d65ba31 Mon Sep 17 00:00:00 2001 +From: Andreas Beckmann +Date: Mon, 15 Sep 2025 13:05:47 +0200 +Subject: [PATCH] common.postinst: fix warning message + +--- + dkms_common.postinst.in | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/dkms_common.postinst.in b/dkms_common.postinst.in +index 87781b8..10dd392 100644 +--- a/dkms_common.postinst.in ++++ b/dkms_common.postinst.in +@@ -210,7 +210,7 @@ fi + + if [ -z "$KERNELS" ]; then + echo "WARNING: No kernel headers were found, skipping module build." +- echo " The get the headers for the running kernel ($CURRENT_KERNEL)" ++ echo " To get the headers for the running kernel ($CURRENT_KERNEL)" + echo " please install the linux-headers-$CURRENT_KERNEL package." + exit 0 + fi +-- +2.39.5 + diff -Nru dkms-3.2.0/debian/patches/no-CLEAN-deprecation-warning.patch dkms-3.2.2/debian/patches/no-CLEAN-deprecation-warning.patch --- dkms-3.2.0/debian/patches/no-CLEAN-deprecation-warning.patch 2025-05-10 02:47:51.000000000 +0000 +++ dkms-3.2.2/debian/patches/no-CLEAN-deprecation-warning.patch 2025-11-01 19:49:32.000000000 +0000 @@ -4,7 +4,7 @@ --- a/dkms.in +++ b/dkms.in -@@ -569,7 +569,7 @@ safe_source() { +@@ -577,7 +577,7 @@ safe_source() { if (( ${#CLEAN[@]} )); then case "$CLEAN" in true|/bin/true|/usr/bin/true) ;; diff -Nru dkms-3.2.0/debian/patches/series dkms-3.2.2/debian/patches/series --- dkms-3.2.0/debian/patches/series 2025-05-10 02:47:51.000000000 +0000 +++ dkms-3.2.2/debian/patches/series 2025-11-01 19:49:32.000000000 +0000 @@ -1,4 +1,5 @@ -0001-drop-duplicate-slash-from-path.patch -0002-do-not-store-an-unused-copy-of-the-kernel-config.patch +0001-run_test.sh-show-make.log-on-unexpected-errors.patch +0002-common.postinst-emit-a-warning-if-no-kernel-headers-.patch +0003-common.postinst-fix-warning-message.patch 0003-document-CLEAN-true.patch no-CLEAN-deprecation-warning.patch diff -Nru dkms-3.2.0/dkms.in dkms-3.2.2/dkms.in --- dkms-3.2.0/dkms.in 2025-05-07 16:14:58.000000000 +0000 +++ dkms-3.2.2/dkms.in 2025-09-12 13:00:32.000000000 +0000 @@ -149,6 +149,11 @@ unset make_tarball_rm_temp_dir_name load_tarball_rm_temp_dir_name trap on_exit EXIT +CP() +{ + cp --reflink=auto "$@" +} + # Run a command that we may or may not want to be detailed about. invoke_command() { @@ -673,15 +678,18 @@ fi # Determine number of modules + # The arrays are possibly sparse, so use the maximum index instead of the array length local s - num_modules=0 + local max_index + max_index=-1 # shellcheck disable=SC2153 - for s in ${#BUILT_MODULE_NAME[@]} \ - ${#BUILT_MODULE_LOCATION[@]} \ - ${#DEST_MODULE_NAME[@]} \ - ${#DEST_MODULE_LOCATION[@]}; do - ((s > num_modules)) && num_modules=$s + for s in "${!BUILT_MODULE_NAME[@]}" \ + "${!BUILT_MODULE_LOCATION[@]}" \ + "${!DEST_MODULE_NAME[@]}" \ + "${!DEST_MODULE_LOCATION[@]}"; do + ((s > max_index)) && max_index=$s done + num_modules=$((max_index + 1)) # Set module naming/location arrays local index @@ -739,14 +747,12 @@ # Override location for specific distributions dest_module_location[index]="$(override_dest_module_location "${dest_module_location[index]}")" - # Fail if no DEST_MODULE_LOCATION - if [[ ! ${DEST_MODULE_LOCATION[$index]} ]]; then - echo "dkms.conf: Error! No 'DEST_MODULE_LOCATION' directive specified for record #$index.">&2 - return_value=1 - fi - # Fail if bad DEST_MODULE_LOCATION case ${DEST_MODULE_LOCATION[$index]} in + "") + echo "dkms.conf: Error! No 'DEST_MODULE_LOCATION' directive specified for record #$index.">&2 + return_value=1 + ;; /kernel*) ;; /updates*) @@ -754,9 +760,9 @@ /extra*) ;; *) - echo "dkms.conf: Error! Directive 'DEST_MODULE_LOCATION' does not begin with">&2 - echo "'/kernel', '/updates', or '/extra' in record #$index.">&2 - return_value=1 + echo "dkms.conf: Error! Directive 'DEST_MODULE_LOCATION' does not begin with">&2 + echo "'/kernel', '/updates', or '/extra' in record #$index.">&2 + return_value=1 ;; esac done @@ -1020,7 +1026,7 @@ return 0 fi local dkms_module - dkms_module=$(compressed_or_uncompressed "$dkms_tree/$module/$module_version/$1/$2/module/" "${4}") + dkms_module=$(compressed_or_uncompressed "$dkms_tree/$module/$module_version/$1/$2/module" "${4}") local cmp_res cmp_res="$(compare_module_version "${kernels_module}" "${dkms_module}")" @@ -1366,7 +1372,17 @@ if [[ -e "${kernel_config}" ]]; then local cc - cc=$(sed -n 's|^CONFIG_CC_VERSION_TEXT="\([^ ]*\) .*"|\1|p' "${kernel_config}") + # Depending on the kernel version the strings might be formatted differently (with or without quotes): + # + # $ grep CONFIG_CC_VERSION_TEXT= /lib/modules/5.15.0-141-generic/build/.config + # CONFIG_CC_VERSION_TEXT="gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0" + # $ grep CONFIG_CC_VERSION_TEXT= /lib/modules/5.15.0-141-generic/build/include/config/auto.conf + # CONFIG_CC_VERSION_TEXT="gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0" + # $ grep CONFIG_CC_VERSION_TEXT= /lib/modules/6.8.0-60-generic/build/.config + # CONFIG_CC_VERSION_TEXT="x86_64-linux-gnu-gcc-12 (Ubuntu 12.3.0-1ubuntu1~22.04) 12.3.0" + # $ grep CONFIG_CC_VERSION_TEXT= /lib/modules/6.8.0-60-generic/build/include/config/auto.conf + # CONFIG_CC_VERSION_TEXT=x86_64-linux-gnu-gcc-12 (Ubuntu 12.3.0-1ubuntu1~22.04) 12.3.0 + cc=$(sed -n 's|^CONFIG_CC_VERSION_TEXT="*\([^" ]*\) .*|\1|p' "${kernel_config}") if command -v "$cc" >/dev/null; then CC="$cc" KERNEL_CC="$cc" @@ -1418,7 +1434,7 @@ # Set up temporary build directory for build rm -rf "${build_dir:?}" - cp -a "$source_dir/" "$build_dir" + CP -a "$source_dir/" "$build_dir" echo "DKMS (@RELEASE_STRING@) make.log for $module/$module_version for kernel $kernelver ($arch)" >> "$build_log" date >> "$build_log" @@ -1462,12 +1478,11 @@ mkdir -p "$kernelver_dir" local -r tmp_base_dir=$(mktemp_or_die -d "$kernelver_dir/.tmp_${arch}_XXXXXX") mkdir -p "$tmp_base_dir/log" - [[ $kernel_config ]] && cp -f "$kernel_config" "$tmp_base_dir/log/" # Save a copy of the new module mkdir -p "$tmp_base_dir/module" if [[ -f "$build_dir/Module.symvers" ]] ; then - cp -f "$build_dir/Module.symvers" "$tmp_base_dir/module/Module.symvers" + CP -f "$build_dir/Module.symvers" "$tmp_base_dir/module/Module.symvers" fi for ((count=0; count < num_modules; count++)); do local the_module @@ -1509,9 +1524,9 @@ zstd $compress_zstd_opts -f "$built_module" || compressed_module="" fi if [[ $compressed_module ]]; then - cp -f "$compressed_module" "$tmp_base_dir/module/${dest_module_name[$count]}$module_suffix" + CP -f "$compressed_module" "$tmp_base_dir/module/${dest_module_name[$count]}$module_suffix" else - cp -f "$built_module" "$tmp_base_dir/module/${dest_module_name[$count]}$module_uncompressed_suffix" + CP -f "$built_module" "$tmp_base_dir/module/${dest_module_name[$count]}$module_uncompressed_suffix" fi done @@ -1724,7 +1739,7 @@ dest_name=${toinstall##*/} echo "Installing $dest_dir/$dest_name" mkdir -p "$dest_dir" - cp -f $symlink "$toinstall" "$dest_dir/$dest_name" || die 6 "Copying '$toinstall' failed" + CP -f $symlink "$toinstall" "$dest_dir/$dest_name" || die 6 "Copying '$toinstall' failed" any_module_installed=1 done @@ -2398,7 +2413,7 @@ kernel_version_list="${kernel_version_list}-kernel${kernelver[$i]}-${arch[$i]}" fi mkdir -p "$temp_module_dir" - cp -rf "$intree_module_dir" "$temp_module_dir" + CP -rf "$intree_module_dir" "$temp_module_dir" done fi @@ -2415,12 +2430,12 @@ echo "$module" > "$binary_only_dir/PACKAGE_NAME" echo "$module_version" > "$binary_only_dir/PACKAGE_VERSION" [[ ! $conf ]] && conf="$source_dir/dkms.conf" - cp -f "$conf" "$binary_only_dir/" 2>/dev/null + CP -f "$conf" "$binary_only_dir/" 2>/dev/null else echo "" echo "Marking $source_dir for archiving..." mkdir -p "$temp_dir_name/dkms_source_tree" - cp -rf "$source_dir/"* "$temp_dir_name/dkms_source_tree" + CP -fprT "$source_dir/" "$temp_dir_name/dkms_source_tree" fi # shellcheck disable=SC1083 @@ -2542,7 +2557,7 @@ echo "Creating $source_dir" mkdir -p "$source_dir" echo "Copying dkms.conf to $source_dir ..." - cp -rf "$temp_dir_name/dkms_binaries_only/dkms.conf" "$source_dir" + CP -rf "$temp_dir_name/dkms_binaries_only/dkms.conf" "$source_dir" fi ;; esac @@ -2564,7 +2579,7 @@ echo "Loading $dkms_dir_location..." rm -rf "${dkms_dir_location:?}" mkdir -p "$dkms_dir_location" - cp -rf "$directory/"* "$dkms_dir_location/" + CP -rf "$directory/"* "$dkms_dir_location/" fi done @@ -2741,7 +2756,7 @@ ;; esac mkdir -p "$source_tree/$module-$module_version" - cp -fr "$from"/* "$source_tree/$module-$module_version" + CP -fprT "$from/" "$source_tree/$module-$module_version" } # This code used to be in dkms_autoinstaller. @@ -3437,7 +3452,7 @@ check_root && autoinstall ret=$? # Execute post_transaction command if set - if [[ $ret -eq 0 && -n "$post_transaction" ]]; then + if [[ $ret -eq 0 && -n "$post_transaction" && ${#installed_modules[@]} -gt 0 ]]; then execute_post_transaction fi exit $ret diff -Nru dkms-3.2.0/dkms_framework.conf.in dkms-3.2.2/dkms_framework.conf.in --- dkms-3.2.0/dkms_framework.conf.in 2025-05-07 16:14:58.000000000 +0000 +++ dkms-3.2.2/dkms_framework.conf.in 2025-09-12 13:00:32.000000000 +0000 @@ -57,8 +57,8 @@ # compress_zstd_opts="-q --rm -T0 -3" # Command to run at the end of every DKMS transaction, for example after a new -# kernel has been installed on the system and all modules have been succesfully +# kernel has been installed on the system and all modules have been successfully # built and installed. -# The command listed below is executed with the kernel version passed as a -# parameter if set to any non null value: +# The command listed is executed if set to any non null value. $kernelver can be +# used in path to represent the target kernel version. # post_transaction="" diff -Nru dkms-3.2.0/redhat_kernel_install.d.in dkms-3.2.2/redhat_kernel_install.d.in --- dkms-3.2.0/redhat_kernel_install.d.in 2025-05-07 16:14:58.000000000 +0000 +++ dkms-3.2.2/redhat_kernel_install.d.in 2025-09-12 13:00:32.000000000 +0000 @@ -3,15 +3,13 @@ COMMAND=$1 KERNEL_VERSION=$2 -res=0 case "$COMMAND" in add) dkms kernel_postinst --kernelver "$KERNEL_VERSION" - res=$? ;; remove) dkms kernel_prerm --kernelver "$KERNEL_VERSION" - res=$? ;; esac -exit $res + +exit 0 diff -Nru dkms-3.2.0/run_test.sh dkms-3.2.2/run_test.sh --- dkms-3.2.0/run_test.sh 2025-05-07 16:14:58.000000000 +0000 +++ dkms-3.2.2/run_test.sh 2025-09-12 13:00:32.000000000 +0000 @@ -54,33 +54,6 @@ "dkms_build_exclusive_dependencies_test" ) TEST_TMPDIRS=( - "/usr/src/dkms_test-1.0" - "/usr/src/dkms_test-2.0" - "/usr/src/dkms_dependencies_test-1.0" - "/usr/src/dkms_dependencies_rebuild_test-1.0" - "/usr/src/dkms_circular_dependencies_test-1.0" - "/usr/src/dkms_replace_test-2.0" - "/usr/src/dkms_noautoinstall_test-1.0" - "/usr/src/dkms_failing_test-1.0" - "/usr/src/dkms_failing_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_duplicate_test-1.0" - "/usr/src/dkms_duplicate_built_test-1.0" - "/usr/src/dkms_duplicate_dest_test-1.0" - "/usr/src/dkms_patches_test-1.0" - "/usr/src/dkms_scripts_test-1.0" - "/usr/src/dkms_noisy_test-1.0" - "/usr/src/dkms_crlf_test-1.0" - "/usr/src/dkms_deprecated_test-1.0" - "/usr/src/dkms_build_exclusive_test-1.0" - "/usr/src/dkms_build_exclusive_dependencies_test-1.0" "${tmpdir}/dkms_test_dir_${KERNEL_VER}/" ) TEST_TMPFILES=( @@ -118,11 +91,14 @@ clean_dkms_env() { local found_module + local module + local version + local dir + local file for module in "${TEST_MODULES[@]}"; do found_module=$(dkms_status_grep_dkms_module "${module}") if [[ $found_module ]] ; then - local version for version in 1.0 2.0 3.0; do [[ ! -d "/var/lib/dkms/${module}/${version}" ]] || dkms remove "${module}/${version}" >/dev/null || true done @@ -130,6 +106,9 @@ rm -rf "/var/lib/dkms/${module}/" rm -f "/lib/modules/${KERNEL_VER}/${expected_dest_loc}/${module}.ko${mod_compression_ext}" rm -f "/lib/modules/${KERNEL_VER}/kernel/extra/${module}.ko${mod_compression_ext}" + for version in 1.0 2.0 3.0; do + rm -rf "/usr/src/${module}-${version}" + done done for dir in "${TEST_TMPDIRS[@]}"; do rm -rf "$dir" @@ -2945,8 +2924,6 @@ '/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. dkms.conf: Error! Unsupported AUTOINSTALL value 'maybe' Error! Bad conf file. @@ -3025,6 +3002,22 @@ # -------------------------------------------------------------------------- +echo 'Testing dkms.conf with sparse BUILT_MODULE_NAME[] array (expected error)' +run_with_expected_error 8 dkms add test/dkms_conf_test_sparse_arrays << EOF +dkms.conf: Error! No 'BUILT_MODULE_NAME' directive specified for record #0. +dkms.conf: Error! No 'DEST_MODULE_LOCATION' directive specified for record #0. +dkms.conf: Error! No 'BUILT_MODULE_NAME' directive specified for record #2. +dkms.conf: Error! No 'DEST_MODULE_LOCATION' directive specified for record #2. +dkms.conf: Error! No 'BUILT_MODULE_NAME' directive specified for record #4. +dkms.conf: Error! Directive 'DEST_MODULE_LOCATION' does not begin with +'/kernel', '/updates', or '/extra' in record #4. + +Error! Bad conf file. +File: ${abspwd}/test/dkms_conf_test_sparse_arrays/dkms.conf does not represent a valid dkms.conf file. +EOF + +# -------------------------------------------------------------------------- + echo 'Testing dkms.conf with missing patch' run_with_expected_output dkms add test/dkms_conf_test_patch_missing << EOF Creating symlink /var/lib/dkms/dkms_conf_test/1.0/source -> /usr/src/dkms_conf_test-1.0 @@ -3670,7 +3663,7 @@ if [[ ! $only || $only = exclusive ]]; then ############################################################################ -echo '*** Running tests with BUILD_EXCLUSIVE_* modules' +echo '*** Testing modules with BUILD_EXCLUSIVE_* directives' ############################################################################ set_signing_message "dkms_test" "1.0" diff -Nru dkms-3.2.0/test/dkms_build_exclusive_test-1.0/dkms.conf dkms-3.2.2/test/dkms_build_exclusive_test-1.0/dkms.conf --- dkms-3.2.0/test/dkms_build_exclusive_test-1.0/dkms.conf 2025-05-07 16:14:58.000000000 +0000 +++ dkms-3.2.2/test/dkms_build_exclusive_test-1.0/dkms.conf 2025-09-12 13:00:32.000000000 +0000 @@ -1,5 +1,8 @@ PACKAGE_NAME="dkms_build_exclusive_test" PACKAGE_VERSION="1.0" +BUILT_MODULE_NAME[0]="dkms_build_exclusive_test" DEST_MODULE_LOCATION[0]="/updates/dkms" +BUILT_MODULE_NAME[1]="dkms_build_exclusive_test2" +DEST_MODULE_LOCATION[1]="/updates/dkms" BUILD_EXCLUSIVE_ARCH="none" AUTOINSTALL="yes" diff -Nru dkms-3.2.0/test/dkms_conf_test_sparse_arrays/dkms.conf dkms-3.2.2/test/dkms_conf_test_sparse_arrays/dkms.conf --- dkms-3.2.0/test/dkms_conf_test_sparse_arrays/dkms.conf 1970-01-01 00:00:00.000000000 +0000 +++ dkms-3.2.2/test/dkms_conf_test_sparse_arrays/dkms.conf 2025-09-12 13:00:32.000000000 +0000 @@ -0,0 +1,7 @@ +PACKAGE_NAME="dkms_conf_test" +PACKAGE_VERSION="1.0" +BUILT_MODULE_NAME[1]="dkms_sparse_arrays_test_1" +DEST_MODULE_LOCATION[1]="/kernel/extra" +BUILT_MODULE_NAME[3]="dkms_sparse_arrays_test_3" +DEST_MODULE_LOCATION[3]="/kernel/extra" +DEST_MODULE_LOCATION[4]="/oops"