insmod or modprobe 出現 Required key not available 錯誤
之前沒遇過下面的問題
# modprobe lustre
modprobe: ERROR: could not insert 'lustre': Required key not available
一直以為是哪裡有安裝錯誤,後來才發現因為系統 UEFI Secure Boot enabled 然後 kernel 也啟動了 module.sig_enforce=1 設定,所以會出現無法安裝第三方的 kernel module
解決方式 1 : 停止使用 secure boot
這其實不是很安全 但是但是比較容易 XD 先安裝 mokutil
# dnf install mokutil
設定停用驗證
# mokutil --disable-validation
會要求你輸入 8-16 字的密碼,最好抄下來 以免等一下忘了
之後重新開機
# reboot
進入 Change Secure Boot state 設定
然後輸入剛剛輸入的密碼第 n 個字,只要一個字就好
反覆輸入後就可以關閉 Secure Boot
某天你想要啟動就用下面的指令
# mokutil --enable-validation
解決方式 2 : 手動為 kernel module 簽名
這個步驟我測試失敗,不過我還是先做一下筆記
先安裝好要用的工具
# dnf install mokutil openssl -y
產生設定檔案 把 req_distinguished_name 改成你要的字串及相對應的 O, CN email
# cat << EOF > configuration_file.config
[ req ]
default_bits = 4096
distinguished_name = req_distinguished_name
prompt = no
string_mask = utf8only
x509_extensions = myexts
[ req_distinguished_name ]
O = Organization
CN = Organization signing key
emailAddress = E-mail address
[ myexts ]
basicConstraints=critical,CA:FALSE
keyUsage=digitalSignature
subjectKeyIdentifier=hash
authorityKeyIdentifier=keyid
EOF
然後產生 keys
# openssl req -x509 -new -nodes -utf8 -sha256 -days 36500 -batch -config configuration_file.config -outform DER -out my_signing_key_pub.der -keyout my_signing_key.priv
匯入 key
# mokutil --import my_signing_key_pub.der
然後重新開機
# reboot
選 “Enroll MOK”
選 “Continue”
選 “Yes”
敲密碼然後重新開機
準備簽署 kernel 檔案,假設遇到有壓縮的檔案解開
# xz --decompress $(modinfo -n lustre)
然後再簽署 kernel module
# /usr/src/kernels/$(uname -r)/scripts/sign-file sha256 my_signing_key.priv my_signing_key_pub.der /lib/modules/$(uname -r)/extra/lustre.ko
部署
# depmod -a
檢查簽署狀態
# modinfo lustre
(omit)
signer: LIHO Kernel signing key
sig_key: 6B:CA:D7:CE:B1:D1:04:9E:59:50:12:A9:D3:42:C1:4F:A7:11:83:A3
sig_hashalgo: sha256
signature: 77:75:39:B4:09:46:DD:11:99:53:CB:CD:58:7A:DF:74:C9:7B:31:A8:
37:7C:EC:E2:EA:36:23:88:17:F5:17:5F:B5:E3:D6:52:68:14:1F:7E:
如果想要把 kernel 壓縮回去,記得再部署
# xz --compress $(modinfo -n lustre)
# depmod -a
我部署完還是有錯誤
# modprobe lustre
modprobe: ERROR: could not insert 'lustre': Required key not available
補充說明:dkms 有工具可以簽署 但是名稱要改成 dkms.key dkms.der XD
# cat /etc/dkms/sign_helper.sh
#!/bin/sh
/lib/modules/"$1"/build/scripts/sign-file sha512 /root/dkms.key /root/dkms.der "$2"