Debian 12 Bookworm安装VirtualBox遇多类错误求助
Debian 12 Bookworm安装VirtualBox遇多类错误求助
问题背景
我刚从国内拿到一台Clevo PD70SND-G,装了Debian 12 Bookworm,现在想安装并使用VirtualBox来访问一台原本在Windows 10主机上创建的Ubuntu 22.04虚拟机,遇到了两个主要问题:
- 给
/etc/apt/sources.list添加Debian官方源后安装VirtualBox,出现了依赖错误; - 转而安装VirtualBox官网提供的Debian 12包后,VirtualBox管理器能正常打开,但启动虚拟机时提示内核驱动未安装,还出现了模块“未签名”的报错。另外,之前为了让NVIDIA GPU在Secure Boot开启状态下工作,已经创建过MOK签名文件。
解决方案
兄弟,你这情况是Secure Boot开启后内核模块必须签名导致的,加上Debian源的VirtualBox版本可能适配性问题,咱们一步步来解决:
一、先解决内核模块未签名的核心问题(适用于官网安装的VirtualBox)
既然你已经有MOK签名密钥了,直接复用它给VirtualBox的内核模块签名就行:
- 先确认当前内核版本,方便后续找模块和头文件:
uname -r - 找到你之前生成的MOK密钥文件(一般是
MOK.priv和MOK.der,可能在/root或者你的用户目录下) - 定位VirtualBox的所有内核模块:
find /lib/modules/$(uname -r) -name vbox*.ko - 逐个给这些模块签名(替换下面的密钥路径为你实际的路径):
sudo /usr/src/linux-headers-$(uname -r)/scripts/sign-file sha256 /path/to/MOK.priv /path/to/MOK.der /path/to/vboxdrv.ko sudo /usr/src/linux-headers-$(uname -r)/scripts/sign-file sha256 /path/to/MOK.priv /path/to/MOK.der /path/to/vboxnetflt.ko sudo /usr/src/linux-headers-$(uname -r)/scripts/sign-file sha256 /path/to/MOK.priv /path/to/MOK.der /path/to/vboxnetadp.ko - 重新加载VirtualBox内核模块:
sudo modprobe vboxdrv - 要是你找不到之前的MOK密钥了,就重新生成并注册:
- 生成密钥:
openssl req -new -x509 -newkey rsa:2048 -keyout MOK.priv -outform DER -out MOK.der -nodes -days 36500 -subj "/CN=VirtualBox Module Signing/" - 导入密钥到MOK:
sudo mokutil --import MOK.der - 重启电脑,进入UEFI的MOK管理界面,按照提示完成密钥注册(记得输入你设置的密码)
- 生成密钥:
二、修复Debian源安装时的依赖问题(可选,如果你想换回官方源安装)
如果之后你想从源安装VirtualBox,按照以下步骤操作:
- 先卸载当前的官网版VirtualBox:
sudo apt purge virtualbox-* - 安装对应内核的头文件(必须,不然模块编译失败):
sudo apt install linux-headers-$(uname -r) build-essential dkms - 添加VirtualBox官方源(比Debian默认源的版本更适配):
- 导入签名公钥:
sudo wget -O- https://www.virtualbox.org/download/oracle_vbox_2016.asc | sudo gpg --dearmor -o /usr/share/keyrings/oracle-virtualbox-2016.gpg - 添加源到sources.list.d:
echo "deb [signed-by=/usr/share/keyrings/oracle-virtualbox-2016.gpg] https://download.virtualbox.org/virtualbox/debian bookworm contrib" | sudo tee /etc/apt/sources.list.d/virtualbox.list
- 导入签名公钥:
- 更新源并安装VirtualBox:
sudo apt update && sudo apt install virtualbox-7.0 - 安装完成后,重复方案一的步骤给VirtualBox模块签名,就能正常启动虚拟机了
额外提醒
- 检查Secure Boot状态:
mokutil --sb-state,如果显示SecureBoot enabled,那所有第三方内核模块必须签名,这是你遇到问题的根本原因 - 启动VirtualBox前,确保用户加入了
vboxusers组:sudo usermod -aG vboxusers $USER,然后注销重新登录
备注:内容来源于stack exchange,提问作者Joshua E. Vines




