Skip to content

Commit

Permalink
dkms: error out if $arch cannot be determined
Browse files Browse the repository at this point in the history
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
  • Loading branch information
anbe42 committed Jun 13, 2023
1 parent 3707494 commit f5759f4
Showing 1 changed file with 3 additions and 0 deletions.
3 changes: 3 additions & 0 deletions dkms.in
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down

0 comments on commit f5759f4

Please sign in to comment.