修炼者
修炼者
发布于 2025-06-18 / 18 阅读
0
0

VirtualBox

作为一个虚拟机,提供了可以在Windows、Linux、MacOS等操作系统运行的版本。用来在宿主操作系统上安装其他操作系统。

Window上的安装很简单,这里主要介绍在Ubuntu上安装后,运行在Window上创建的虚拟机时,遇到的问题和解决办法。

安装

  sudo apt update
  sudo apt install virtualbox virtualbox-ext-pack

加载已有虚拟机

通过菜单【控制】-【注册】打开的对话框,可选择已有的虚拟机文件(*.vbox),然后启动此虚拟机,会遇到错误。

安装相应模块

# 重新安装VirtualBox和相关内核模块
sudo apt update
sudo apt install --reinstall virtualbox-dkms virtualbox

# 加载内核模块
sudo modprobe vboxdrv

因为系统打开了EFI Security Boot(这个是一个为确保系统安全建立的签名链),上述模块会被拒绝。主要是需要对模块签名。可通过如下指令看系统是否打开了此开关。

$ mokutil --sb-state
SecureBoot enabled
# 最简单的办法是在启动时进入BIOS将此选项关闭,但是会降低安全性。建议通过下面的【为模块签名】解决。

为模块签名

为 VirtualBox 模块签名

创建密钥

# 安装必要工具
sudo apt install dkms build-essential linux-headers-$(uname -r)

# 生成签名密钥(如果尚未生成)
sudo mkdir -p /var/lib/shim-signed/mok/
sudo openssl req -new -x509 -newkey rsa:2048 -keyout /var/lib/shim-signed/mok/MOK.priv -outform DER -out /var/lib/shim-signed/mok/MOK.der -nodes -days 36500 -subj "/CN=VirtualBox/"

# 注册密钥
sudo mokutil --import /var/lib/shim-signed/mok/MOK.der

系统会提示设置密码(记住这个密码)

重启计算机

在启动时会进入蓝色 MOK 管理界面:

1. 选择 "Enroll MOK"

2. 选择 "Continue"

3. 选择 "Yes" 确认注册

4. 输入之前设置的密码

5. 选择 "Reboot" 重启

签名并加载模块

进入系统后,执行如下指令。

# 为 VirtualBox 模块签名
sudo /usr/src/linux-headers-$(uname -r)/scripts/sign-file sha256 /var/lib/shim-signed/mok/MOK.priv /var/lib/shim-signed/mok/MOK.der $(modinfo -n vboxdrv)

sudo /usr/src/linux-headers-$(uname -r)/scripts/sign-file sha256 /var/lib/shim-signed/mok/MOK.priv /var/lib/shim-signed/mok/MOK.der $(modinfo -n vboxnetadp)

sudo /usr/src/linux-headers-$(uname -r)/scripts/sign-file sha256 /var/lib/shim-signed/mok/MOK.priv /var/lib/shim-signed/mok/MOK.der $(modinfo -n vboxnetflt)

sudo /usr/src/linux-headers-$(uname -r)/scripts/sign-file sha256 /var/lib/shim-signed/mok/MOK.priv /var/lib/shim-signed/mok/MOK.der $(modinfo -n vboxpci)

# 重新加载模块
sudo modprobe vboxdrv
sudo modprobe vboxnetadp
sudo modprobe vboxnetflt
sudo modprobe vboxpci

# 重启 VirtualBox 服务
sudo systemctl restart vboxdrv.service

验证解决方案

# 检查模块是否加载

lsmod | grep vbox

# 检查 VirtualBox 服务状态

systemctl status vboxdrv.service


评论