与许多其他人一样,我需要从 Virtualbox 运行 Windows 实例,不想禁用安全启动,因此在内核更新后无法使 Virtualbox 正常工作。
我已经完成了必要的步骤,但肯定出了什么问题。目前,如果我禁用安全启动,Virtualbox 可以运行,但当我尝试在启用安全启动的情况下运行虚拟机(目前处于中断状态)时,整个系统就会冻结。
我检查了以下内容:
- 我已经生成了一个证书(使用
-subj "/CN=MyName/"
)。AMOK.der
在那里,我注册了它(mokutil --list-enrolled
显示它与 Canonical 的另一个证书一起)。事实上,如果我尝试另一个mokutil -n import MOK.der
,我会得到输出SKIP: MOK.der is already enrolled
我可以通过以下脚本对 virtualbox 模块进行签名:
<!-- language: bash --> #!/bin/bash for modfile in $(dirname $(modinfo -n vboxdrv))/vbox*.ko; do echo "Signing $modfile" /usr/src/linux-headers-$(uname -r)/scripts/sign-file sha256 \ /root/module-signing/MOK.priv \ /root/module-signing/MOK.der "$modfile" done
...我可以检查它们是否都已签名:
$ grep "MyName" $(dirname $(modinfo -n vboxdrv))/vbox*.ko Il file binario /lib/modules/4.13.0-37-generic/updates/dkms/vboxdrv.ko corrisponde Il file binario /lib/modules/4.13.0-37-generic/updates/dkms/vboxnetadp.ko corrisponde Il file binario /lib/modules/4.13.0-37-generic/updates/dkms/vboxnetflt.ko corrisponde Il file binario /lib/modules/4.13.0-37-generic/updates/dkms/vboxpci.ko corrisponde
实际上,我可以从命令行加载模块,并且没有错误消息:$ for modfile in $(dirname $(modinfo -n vboxdrv))/vbox*.ko; do modprobe $(basename -s .ko $modfile); done
尽管如此,我在 BIOS 级别已知的证书中找不到我的证书:
mokutil --pk
、mokutil --kek
、中都没有mokutil --db
在输出中包含“MyName”(但其中一些包含“Canonical”)
所以,问题s:
- 如果已注册的 MOK 不在 PK、DB 或 KEK 中,那么它存储在哪里?(实际上模块能加载)。我应该在 BIOS 实用程序中搜索哪个名称?
- 什么是垫片?
- 我已经
dkms
安装了软件包,最近也安装了virtualbox-dkms
。这些软件包是否需要?我应该按照什么顺序安装它们?在上述步骤之前还是之后?或者他们应该完成全部工作,而不是让我自己完成手动? - 我是否应该尝试卸载
virtualbox
、、dkms
(virtualbox-dkms
等等?)并从头开始重新执行该过程? 上述哪些内容适用于目录中的其余模块
/lib/modules/4.13.0-37-generic/updates/dkms
(即bbswitch
和nvidia*
)?实际上,从系统设置菜单的系统/软件和更新下,我看到正在使用 Nvidia 384.111 专有驱动程序,但我既看不到它,也看不到lsmod | grep nvidia
它modprobe
:$ modprobe nvidia_384 modprobe: ERROR: could not insert 'nvidia_384': Required key not available
情况是否不一致?从哪里开始修复它?
谢谢