VirtualBox
关于
VirtualBox 是一个 虚拟化 产品,最初由 innotek 开发,现在归 Oracle 所有。VirtualBox 的当前版本可以在 64 位 Intel 和 AMD CPU 上使用。VirtualBox 6.0.14 是在 32 位主机上构建的最后一个版本。基础软件包于 2007 年 1 月以自由开源软件 (GPLv2) 的形式发布。一个附加软件包包含一些缺失于开源版本的功能,例如 USB 2.0/3.0 支持,其许可协议是专有许可协议,允许个人和教育用户免费使用。由于此许可协议不符合 openSUSE 的要求,我们不会构建和分发此软件。当前版本的必要 ...extpack 文件可以从 下载,并使用 GUI 在“工具/扩展”选项卡下安装。
VirtualBox 随附 openSUSE,应该可以开箱即用。自 openSUSE 11.4 以来,如果由此产生的安全风险可接受,连接到主机的 USB 设备可以在客户操作系统中使用。有关更多详细信息,请参阅下文。
VirtualBox 在 openSUSE 12.3 上运行 PCBSD Rolling Release 会话 |
安装最新版本的 Guest Additions
VirtualBox 的现代版本 (7.0..X 及更高版本) 不需要运行 Linux 客户的 Guest Additions,因为包含在 Oracle 的 ISO 中的驱动程序已经包含在标准内核中。对于非 Linux 客户,您可能需要安装此软件。如果您已下载适用于您主机 VirtualBox 版本的 VirtualBoxGuestAddition...iso 版本,则使用“设备”选项卡将文件附加到虚拟光驱,否则,选择“设备”选项卡下的“升级 Guest Additions”选项,这将下载并挂载虚拟 CD。您的客户机可能会自动启动安装,否则使用文件浏览器找到适合您客户机的安装文件并启动它。在 Linux 上,该步骤需要以 root 用户身份完成。
默认情况下,只有 root 用户才能访问从主机系统挂载的共享文件夹(通常这些文件夹出现在 /media 下)。要允许普通用户访问这些文件夹
- 在 YaST 中打开用户和组管理模块,并将您想要授予权限的每个用户添加到 vboxsf 组
- 让受影响的用户注销并重新登录,他们现在应该能够访问共享文件夹。
- 打开 /media 目录时,您可能会遇到权限错误。快速解决方法是更改该目录的权限。
- chmod o+rx /media
这应该足够了,并且 /media 下的 sf_SHARENAME 目录现在应该可以访问了。
注意:许多论坛帖子和网络上的指南建议您在 /etc/fstab 设置中进行调整或使用脚本手动挂载共享文件夹。这种更简单的方法消除了对像那样的黑客的需求。
USB 直通 (发行版中的 rpm 包)
请注意,这是一种安全风险,请参阅 bug 664520。
由于安全风险,openSUSE 的版本维护了文件 ~/.config/VirtualBox/enable 和 ~/.config/VirtualBox/disable。如果 VirtualBox GUI 启动时不存在这两个文件中的任何一个,将运行一个单独的程序,询问用户的偏好。根据偏好,将创建 ../enable 或 ../disable。只有创建 ../enable 才会启用 USB 直通。
如果您从 virtualbox.org 下载并安装了软件包,将不会有任何针对 USB 操作的保护。
故障排除
重建主机内核模块
问题
内核更新后,VirtualBox 在启动虚拟机之前可能会抛出错误
解决方案
可能缺少一些必需的软件包。
su - zypper install virtualbox-host-source kernel-devel kernel-default-devel systemctl stop vboxdrv vboxconfig
签名主机内核模块
问题
如果您找不到预打包的内核模块,则必须自己对其进行签名。
UEFI/安全启动: 如果 /sbin/vboxconfig 因签名问题而失败 (`Key was rejected...`),尽管已安装了来自 repo 的所有相关软件包,您仍然需要手动签名模块(例如,因为版本不寻常)。
请参阅以下“ERROR”消息
Building kernel modules... Kernel modules built correctly. They will now be installed. insmod /usr/lib/modules/6.12.0-160000.5-default/updates/vboxdrv.ko modprobe: ERROR: could not insert 'vboxnetflt': Key was rejected by service
解决方案
手动 签名内核模块 需要三个步骤,假设您以前没有这样做过(或者密钥/证书不可用)。请注意参数 `-addext`,据我所知,它是 openSUSE 特有的。
1. 创建您的个人密钥和证书(替换 `<FULL_NAME>`)
openssl req -new -x509 -newkey rsa:2048 -keyout MOK.key -out MOK.crt -nodes -days 3650 -subj "/CN=<FULL_NAME>/" -addext "extendedKeyUsage=codeSigning" openssl x509 -in MOK.crt -out MOK.der -outform DER chmod 600 MOK.*
这将生成文件 `MOK.crt`、`MOK.key` 和 `MOK.der`。
2. 通过 shim 将密钥告知 UEFI
mokutil --import MOK.der
记住密码。重新启动,您将看到 MOK Management,选择 Enroll key,确认所有问题并重新输入密码。
3. 签名所需的内核模块
您需要在 Linux 内核源代码中找到签名工具。请参阅以下命令,以找到正确的版本。例如,对于 `6.12.0-160000.5-default`,<VERSION> 是 `6.12.0-160000.5`...
uname -r
现在使用内核源代码中的 sign-file,请替换 <VERSION>
/usr/src/linux-<VERSION>-obj/x86_64/default/scripts/sign-file sha256 MOK.key MOK.der /lib/modules/`uname -r`/updates/vboxdrv.ko /usr/src/linux-<VERSION>-obj/x86_64/default/scripts/sign-file sha256 MOK.key MOK.der /lib/modules/`uname -r`/updates/vboxnetadp.ko /usr/src/linux-<VERSION>-obj/x86_64/default/scripts/sign-file sha256 MOK.key MOK.der /lib/modules/`uname -r`/updates/vboxnetflt.ko
将 MOK 文件保存在安全的地方。您可以稍后重新使用它们来签名其他模块(因为密钥保留在 UEFI 中)。
之后,您需要重新启动系统。


