Хорошо - проблема была между клавиатурой и стулом - в моем BUILD_EXCLUSIVE_KERNEL
регулярном выражении была ошибка - суффикс .*
смешался с разделителем чисел \.
.Но я приведу здесь рабочий пример, так как Google не нашел хороших примеров, прежде чем я разместил здесь:
Во-первых, я не был уверен, какой диалект regexp мне нужно было использовать (grep, pcre и т. Д.,..) тем более, что в оболочку смешивается экранирование, поэтому, возможно, было рассмотрено несоответствие.
Оказывается, dkms
является bash
сценарием и поэтому использует [[ $ver =~ $match_regexp ]]
.Таким образом, чтобы проверить соответствие, это сработало:
re="^(3\.[0-9]+\.|4\.[0-9]\.)" ; [[ "4.15.0-43-generic" =~ $re ]] && echo true
# but this didn't
[[ "4.15.0-43-generic" =~ "^(3\.[0-9]+\.|4\.[0-9]\.)" ]] && echo true
Вот файл конфигурации, который я использовал в итоге:
PACKAGE_NAME="cp210x"
PACKAGE_VERSION="#MODULE_VERSION#"
BUILT_MODULE_NAME[0]="$PACKAGE_NAME"
DEST_MODULE_LOCATION[0]="/updates/dkms"
AUTOINSTALL="YES"
REMAKE_INITRD="YES"
# Since this code comes from 4.10 only update kernels 4.9 and earlier
BUILD_EXCLUSIVE_KERNEL="^(3\.[0-9]+\.|4\.[0-9]\.)"
Который выглядит так при установке через dpkg
.
First Installation: checking all kernels...
Building only for 4.15.0-43-generic
Building initial module for 4.15.0-43-generic
Error! The dkms.conf for this module includes a BUILD_EXCLUSIVE directive which
does not match this kernel/arch. This indicates that it should not be built.
Skipped.
Но корректно устанавливается для более низких версий ядра.
Кроме того, формулировка BUILD_EXCLUSIVE_KERNEL
документации предполагает, что это ошибка, если ядро не соответствует, что может быть нежелательным, однако, если вы посмотрите вывод вышевы увидите, что «Ошибка» не вызывает сбой установки пакета, просто помеченный как пропущенный.