如何在 17.04 中正确设置 VirtualBox?

如何在 17.04 中正确设置 VirtualBox?

我从主站点安装 VirtualBox,并使用给定的 .dpkg 包,在安装过程中出现错误:

dpkg: dependency problems prevent configuration of virtualbox-5.1:
 virtualbox-5.1 depends on libqt5x11extras5 (>= 5.6.0); however:
  Package libqt5x11extras5 is not installed.
 virtualbox-5.1 depends on libsdl1.2debian (>= 1.2.11); however:
  Package libsdl1.2debian is not installed.

dpkg: error processing package virtualbox-5.1 (--install):
 dependency problems - leaving unconfigured
Processing triggers for systemd (232-21ubuntu5) ...
Processing triggers for ureadahead (0.100.0-19) ...
ureadahead will be reprofiled on next reboot
Processing triggers for bamfdaemon (0.5.3+17.04.20170406-0ubuntu1) ...
Rebuilding /usr/share/applications/bamf-2.index...
Processing triggers for gnome-menus (3.13.3-6ubuntu5) ...
Processing triggers for desktop-file-utils (0.23-1ubuntu2) ...
Processing triggers for mime-support (3.60ubuntu1) ...
Processing triggers for hicolor-icon-theme (0.15-1) ...
Processing triggers for shared-mime-info (1.8-1) ...
Errors were encountered while processing:
 virtualbox-5.1

起初我以为问题是由于未满足的依赖关系,于是运行:

sudo apt-get install -f

但后来我收到以下错误信息:

Adding group `vboxusers' (GID 132) ...
Done.
Created symlink /etc/systemd/system/multi-user.target.wants/vboxdrv.service → /lib/systemd/system/vboxdrv.service.
Created symlink /etc/systemd/system/multi-user.target.wants/vboxballoonctrl-service.service → /lib/systemd/system/vboxballoonctrl-service.service.
Created symlink /etc/systemd/system/multi-user.target.wants/vboxautostart-service.service → /lib/systemd/system/vboxautostart-service.service.
Created symlink /etc/systemd/system/multi-user.target.wants/vboxweb-service.service → /lib/systemd/system/vboxweb-service.service.
vboxdrv.sh: failed: modprobe vboxdrv failed. Please use 'dmesg' to find out why.

There were problems setting up VirtualBox.  To re-start the set-up process, run
  /sbin/vboxconfig
as root.

此后我运行了建议的命令并得到了完全相同的错误。

根据@George 的建议,我运行了 dmesg -kHd --time-format ctime | tail -20,结果如下:

[dom ago 13 13:59:07 2017 <    0,005021>] wlo1: authenticate with ea:de:27:93:b1:50
[dom ago 13 13:59:07 2017 <    0,005558>] wlo1: send auth to ea:de:27:93:b1:50 (try 1/3)
[dom ago 13 13:59:07 2017 <    0,003337>] wlo1: authenticated
[dom ago 13 13:59:07 2017 <    0,008390>] wlo1: associate with ea:de:27:93:b1:50 (try 1/3)
[dom ago 13 13:59:07 2017 <    0,006367>] wlo1: RX AssocResp from ea:de:27:93:b1:50 (capab=0x421 status=0 aid=1)
[dom ago 13 13:59:07 2017 <    0,001071>] wlo1: associated
[dom ago 13 14:01:06 2017 <  119,551821>] wlo1: disconnect from AP ea:de:27:93:b1:50 for new auth to c6:6e:1f:08:83:ce
[dom ago 13 14:01:06 2017 <    0,005411>] wlo1: authenticate with c6:6e:1f:08:83:ce
[dom ago 13 14:01:06 2017 <    0,004158>] wlo1: send auth to c6:6e:1f:08:83:ce (try 1/3)
[dom ago 13 14:01:06 2017 <    0,005006>] wlo1: authenticated
[dom ago 13 14:01:06 2017 <    0,001436>] wlo1: associate with c6:6e:1f:08:83:ce (try 1/3)
[dom ago 13 14:01:06 2017 <    0,003535>] wlo1: RX AssocResp from c6:6e:1f:08:83:ce (capab=0x421 status=0 aid=1)
[dom ago 13 14:01:06 2017 <    0,000535>] wlo1: associated
[dom ago 13 14:05:07 2017 <  240,406581>] wlo1: disconnect from AP c6:6e:1f:08:83:ce for new auth to c6:6e:1f:08:83:cf
[dom ago 13 14:05:07 2017 <    0,014262>] wlo1: authenticate with c6:6e:1f:08:83:cf
[dom ago 13 14:05:07 2017 <    0,006950>] wlo1: send auth to c6:6e:1f:08:83:cf (try 1/3)
[dom ago 13 14:05:07 2017 <    0,002182>] wlo1: authenticated
[dom ago 13 14:05:07 2017 <    0,005477>] wlo1: associate with c6:6e:1f:08:83:cf (try 1/3)
[dom ago 13 14:05:07 2017 <    0,001717>] wlo1: RX AssocResp from c6:6e:1f:08:83:cf (capab=0x1 status=0 aid=1)
[dom ago 13 14:05:07 2017 <    0,001518>] wlo1: associated

我该如何修复此问题?

答案1

由于评论,我能够解决这个问题,并且我分享解决方案以防有人遇到与我相同的问题。UEFI 是硬件和软件之间的接口,它对系统的启动负有最大责任,它具有一项称为安全启动的技术,该技术反过来会检查系统引导加载程序是否使用固件中包含的数据库授权的加密密钥进行签名。通过在下一阶段的引导加载程序、内核以及可能的用户空间中进行充分的签名验证,可以防止执行未签名的代码。这有助于提高系统安全性并阻止恶意软件访问您的系统。

安装中出现的当前问题是由于 VirtualBox 软件的某些模块缺少有效密钥。如果您遇到此问题,有几种方法可以解决它,第一种方法很容易,最后一种方法有点费力:

  1. 禁用安全启动 正如所指出的飞行员6:

在大多数情况下,您可以使用 grub 菜单进入 UEFI 设置。按下ESC启动按钮,进入 grub 菜单并选择系统设置。安全启动选项应位于 UEFI 的“安全”或“启动”部分。

您可以直接进入 UEFI,但这取决于您的硬件。请阅读您的计算机手册以了解如何进入。它可能是Del,或F2在启动时,或其他。

另一种方法是使用 禁用安全启动mokutil

从 Ubuntu 内核版本 4.4.0-21.37 开始,可以通过运行以下命令来修复此问题

sudo apt install mokutil
sudo mokutil --disable-validation

需要创建一个密码。密码长度至少为 8 个字符。重启后,UEFI 会询问您是否要更改安全设置。选择“是”。

然后会要求您输入之前创建的密码。有些 UEFI 固件不要求输入完整密码,而是要求输入密码中的一些字符,如 1st、3rd 等。要小心。有些人不明白这一点。我第一次尝试也没有成功 ;-)

更新:现在,此内核配置已在所有受支持的 Ubuntu 内核中启用。Ubuntu 16.04、15.10 和 14.04 受到影响。

  1. 使用 VituralBox 模块作为建议作者:Majal:

从内核版本 4.4.0-20 开始,未签名启用安全启动后,内核模块将不允许运行。因为您想保留安全启动,所以下一个合乎逻辑的步骤是符号那些模块。

那我们就尝试一下吧。

  1. 创建签名密钥

    openssl req -new -x509 -newkey rsa:2048 -keyout MOK.priv -outform DER -out MOK.der -nodes -days 36500 -subj "/CN=Descriptive name/"
    
  2. 对模块进行签名(本例中为 vboxdrv)

    sudo /usr/src/linux-headers-$(uname -r)/scripts/sign-file sha256 ./MOK.priv ./MOK.der $(modinfo -n vboxdrv)
    
  3. 将密钥注册到安全启动

    sudo mokutil --import MOK.der
    

    提供密码以供重启后使用

  4. Reboot并按照说明注册 MOK(机器所有者密钥)。以下是样本附图片。系统将再次重启。重启后,您可能还需要sudo modprobe vboxdrv加载模块。

请让我知道 VirtualBox 是否可以在 Ubuntu 16.04 上以这种方式运行(我相信在内核 4.4.0-21 或更高版本上)。

资源:详细网站Fedora 文章Ubuntu 实现模块签名。(他们一直在努力);-)对于安全意识强的人,请考虑一下评论以下是@zwets 的。要获得完整的网络和 PCI 功能,您可能还希望签署以下模块:vboxnetfltvboxnetadpvboxpci。感谢@shasha_trn 提供的评论以下。

额外资源:我创建了一个 bash 脚本,供自己每次virtualbox-dkms升级时使用,从而覆盖已签名的模块。查看我的GitHub 上的 vboxsign

相关内容