我用的是Ubuntu 16.04系统,想使用virtualbox创建虚拟机时,报错无法创建一个虚拟机任务,理由是"vboxdrv"未加载,尝试重新加载问题如下所示:
$ sudo modprobe vboxdrv
modprobe: ERROR: could not insert 'vboxdrv': Required key not available
参考解决办法
谷歌之后,根据链接网页描述,发现是在升级内核版本之后,从内核版本4.4.0-20开始,强制要求 unsigned 内核模块在启用安全启动的情况下运行。因此我们无法加载一个未签署的模块"vboxdrv"。
解决方式有两种,一种是禁用安全启动,这种方法简单,但不推荐使用,需要在引导菜单禁用secure-boot。
第二种方法是签署这些模块。
具体步骤如下:
创建签名秘钥:
openssl req -new -x509 -newkey rsa:2048 -keyout MOK.priv -outform DER -out MOK.der -nodes -days 36500 -subj "/CN=Descriptive common name/"
签署模块
sudo /usr/src/linux-headers-$(uname -r)/scripts/sign-file sha256 ./MOK.priv ./MOK.der $(modinfo -n vboxdrv)
确认模块已签名
tail $(modinfo -n vboxdrv) | grep "Module signature appended"
运行该命令之后显示"匹配到二进制文件"
最后,将密钥注册到安全启动
sudo mokutil --import MOK.der
以上步骤完成后,重新启动并按照说明注册MOK(机器所有者密钥)。网上好多方法到这之后就没有了,理论上可以解决问题。
但我在这里遇到了问题,重启系统之后没有带图示例中显示的蓝屏界面,参考这篇文章ubuntu系统UEFI SecureBoot,我安装了shim-signed包。在安装完之后,需要输两次密码,该密码是注册MOK要使用的密码。
安装需要的包
sudo apt-get install shim-signed
使用以下命令将现有密钥注册到填充程序
sudo update-secureboot-policy --enroll-key
虽然问题解决了,但是我不明白的是这个注册MOK是上面那条命令起作用了还是最后安装的包起作用了。有没有明白的大佬给我科普一下。
参考(侵删):
https://wiki.ubuntu.com/UEFI/SecureBoot
https://sourceware.org/systemtap/wiki/SecureBoot
https://chubuntu.com/questions/726/could-not-load-vboxdrv-after-upgrade-to-ubuntu-16-04-and-i-want-to-keep-secur.html