From f5759f40a3cd586c78c2ca98a605f80d77e58085 Mon Sep 17 00:00:00 2001 From: Andreas Beckmann Date: Mon, 12 Jun 2023 13:56:05 +0200 Subject: [PATCH] dkms: error out if $arch cannot be determined if for some reason $arch cannot be determined (e.g. due to a broken rpm shim on distributions using a different package manager), dkms will happily build a module, placing state info in /var/lib/dkms/$module/$version/$kernel//, but that subsequently causes errors because the module is not considered to be installed and at the same time cannot be removed any more Before: sid# dkms status sid# ln -s /bin/true /usr/bin/rpm sid# dkms add dkms_test/1.0 Creating symlink /var/lib/dkms/dkms_test/1.0/source -> /usr/src/dkms_test-1.0 sid# dkms status dkms_test/1.0: added sid# dkms build -k 6.1.0-9-amd64 dkms_test/1.0 Sign command: /usr/lib/linux-kbuild-6.1/scripts/sign-file Signing key: /var/lib/dkms/mok.key Public certificate (MOK): /var/lib/dkms/mok.pub Building module: Cleaning build area... make -j16 KERNELRELEASE=6.1.0-9-amd64 -C /lib/modules/6.1.0-9-amd64/build M=/var/lib/dkms/dkms_test/1.0/build... Signing module /var/lib/dkms/dkms_test/1.0/build/dkms_test.ko Cleaning build area... sid# dkms status dkms_test/1.0: added sid# dkms build -k 6.1.0-9-amd64 dkms_test/1.0 Sign command: /usr/lib/linux-kbuild-6.1/scripts/sign-file Signing key: /var/lib/dkms/mok.key Public certificate (MOK): /var/lib/dkms/mok.pub Error! This module/version has already been built on: 6.1.0-9-amd64 Directory /var/lib/dkms/dkms_test/1.0/6.1.0-9-amd64/ already exists. Use the dkms remove function before trying to build again. sid# dkms status dkms_test/1.0: added sid# dkms remove -k 6.1.0-9-amd64 dkms_test/1.0 Module dkms_test 1.0 is not installed for kernel 6.1.0-9-amd64 (). Skipping... Module dkms_test 1.0 is not built for kernel 6.1.0-9-amd64 (). Skipping... sid# dkms status dkms_test/1.0: added sid# dkms remove dkms_test/1.0 --all sid# dkms status dkms_test/1.0: added sid# find /var/lib/dkms/dkms_test/1.0/ /var/lib/dkms/dkms_test/1.0/ /var/lib/dkms/dkms_test/1.0/6.1.0-9-amd64 /var/lib/dkms/dkms_test/1.0/6.1.0-9-amd64/module /var/lib/dkms/dkms_test/1.0/6.1.0-9-amd64/module/dkms_test.ko /var/lib/dkms/dkms_test/1.0/6.1.0-9-amd64/log /var/lib/dkms/dkms_test/1.0/6.1.0-9-amd64/log/make.log /var/lib/dkms/dkms_test/1.0/6.1.0-9-amd64/log/.config /var/lib/dkms/dkms_test/1.0/source After: sid# dkms status sid# ln -s /bin/true /usr/bin/rpm sid# dkms add dkms_test/1.0 Error! Could not determine architecture. sid# echo $? 12 to manually recover from the bug use rm -rf /var/lib/dkms/$module/$version and add/build/install the module(s) again --- dkms.in | 3 +++ 1 file changed, 3 insertions(+) diff --git a/dkms.in b/dkms.in index ebd9ca95..ef94ad19 100644 --- a/dkms.in +++ b/dkms.in @@ -287,6 +287,9 @@ setup_kernels_arches() fi fi fi + if [[ ! $arch ]]; then + die 12 $"Could not determine architecture." + fi fi # If only one arch is specified, make it so for all the kernels