vboxdrv.sh:失败:modprobe vboxdrv失败。请使用“ dmesg”找出原因


53

我在Ubuntu笔记本电脑上运行VirtualBox时遇到问题。我的笔记本电脑具有双启动功能,并且可以运行(Windows 10-我认为,多年来没有使用它),以及Ubuntu 16.0.4 LTS。

我在笔记本电脑的BIOS设置中启用了安全启动。

我知道这里有类似的问题,特别是这两个问题:

对于这两个问题,我已经按照答案部分给出的所有说明进行了操作-但是,该问题仍未解决。

当我尝试运行virtualbox时,这是控制台输出:

me@YOURBOX:~$ virtualbox
WARNING: The vboxdrv kernel module is not loaded. Either there is no module
         available for the current kernel (4.4.0-47-generic) or it failed to
         load. Please recompile the kernel module and install it by

           sudo /sbin/vboxconfig

         You will not be able to start VMs until this problem is fixed.

这是我/sbin/vboxconfig按照建议运行时的控制台输出:

me@YOURBOX:~$ sudo /sbin/vboxconfig  
vboxdrv.sh: Stopping VirtualBox services.
vboxdrv.sh: Building VirtualBox kernel modules.
vboxdrv.sh: Starting VirtualBox services.
vboxdrv.sh: Building VirtualBox kernel modules.
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.

这是输出的尾端dmesg

[   44.319682] audit: type=1400 audit(1491313982.374:11): apparmor="STATUS" operation="profile_load" profile="unconfined" name="/usr/bin/evince-previewer" pid=705 comm="apparmor_parser"
[   45.041433] cgroup: new mount options do not match the existing superblock, will be ignored
[   59.682936] IPv6: ADDRCONF(NETDEV_UP): wlp3s0: link is not ready
[   59.697820] IPv6: ADDRCONF(NETDEV_UP): wlp3s0: link is not ready
[   59.702008] IPv6: ADDRCONF(NETDEV_UP): enp2s0f0: link is not ready
[   60.267000] IPv6: ADDRCONF(NETDEV_UP): enp2s0f0: link is not ready
[   62.473044] IPv6: ADDRCONF(NETDEV_UP): wlp3s0: link is not ready
[   70.681706] audit_printk_skb: 60 callbacks suppressed
[   70.681709] audit: type=1400 audit(1491314008.734:32): apparmor="STATUS" operation="profile_load" profile="unconfined" name="docker-default" pid=2009 comm="apparmor_parser"
[   70.850936] aufs 4.x-rcN-20160111
[   75.407218] bridge: automatic filtering via arp/ip/ip6tables has been deprecated. Update your scripts to load br_netfilter if you need this.
[   75.408555] Bridge firewalling registered
[   75.427172] nf_conntrack version 0.5.0 (16384 buckets, 65536 max)
[   75.848416] ip_tables: (C) 2000-2006 Netfilter Core Team
[   76.703232] Initializing XFRM netlink socket
[   77.060003] IPv6: ADDRCONF(NETDEV_UP): docker0: link is not ready
[   80.101042] aufs au_opts_verify:1597:dockerd[1402]: dirperm1 breaks the protection by the permission bits on the lower branch
[  113.895236] wlp3s0: authenticate with 84:16:f9:77:e1:54
[  113.910483] wlp3s0: send auth to 84:16:f9:77:e1:54 (try 1/3)
[  113.912712] wlp3s0: authenticated
[  113.915101] wlp3s0: associate with 84:16:f9:77:e1:54 (try 1/3)
[  113.919397] wlp3s0: RX AssocResp from 84:16:f9:77:e1:54 (capab=0x1411 status=0 aid=1)
[  113.919516] wlp3s0: associated
[  113.919559] IPv6: ADDRCONF(NETDEV_CHANGE): wlp3s0: link becomes ready

现在,我不会说谎-我完全不知道 dmesg刚刚喷出了什么-而且据我所知,日志输出中没有错误消息-这使情况更加令人震惊。

是否有人在运行Ubuntu 16.0.4 LTS的笔记本电脑上安装VirtualBox 5.x,但在BIOS上启用了安全启动?-如果是,解决方案是什么。???!

很多人都有这个问题-甚至要追溯到几年前。很奇怪,似乎没人能解决它-???


2
“我在笔记本电脑的BIOS设置中启用了安全启动。” -这可能是您问题的一部分。我记得有一阵子听说安全启动破坏了VBox。
Android Dev

Answers:


64

VirtualBox +安全启动+ Ubuntu =失败

问题是所有内核模块必须由UEFI系统信任的密钥签名,否则加载将失败。Ubuntu不会对第三方vbox *内核模块进行签名,而是为用户提供了在安装virtualbox软件包时禁用安全启动的选项。我可以这样做,但是每次机器启动时,我都会看到一个烦人的“以不安全模式启动”消息,而且我安装的双启动Windows 10无法正常工作。

Dell Latitude E7440上的Ubuntu 16.04,BIOS A18和双引导Windows 10安装。

信誉是我用来解决此问题的主要信息来源,该信息特别适用于Fedora / Redhat:http : //gorka.eguileor.com/vbox-vmware-in-secureboot-linux-2016-update/

还有一个相关的Ask Ubuntu问题: 升级到Ubuntu 16.04后无法加载“ vboxdrv”(我想保持安全启动)

使它工作的步骤,特别是针对Ubuntu / Debian的

  1. 安装virtualbox程序包。如果安装程序检测到启用了安全启动,将向您显示问题,并提供禁用安全启动的选项。选择“否”。

  2. 创建一个个人公用/专用RSA密钥对,该密钥对将用于对内核模块进行签名。我选择使用root帐户和目录/ root / module-signing /存储与签名内核模块有关的所有内容。

    $ sudo -i
    # mkdir /root/module-signing
    # cd /root/module-signing
    # openssl req -new -x509 -newkey rsa:2048 -keyout MOK.priv -outform DER -out MOK.der -nodes -days 36500 -subj "/CN=YOUR_NAME/"
    [...]
    # chmod 600 MOK.priv
    
  3. 使用MOK(“计算机所有者密钥”)实用程序导入公共密钥,以便系统可以信任它。这是一个两步过程,在该过程中,首先导入密钥,然后在下次启动计算机时必须注册密钥。一个简单的密码就足够了,因为它仅用于临时使用。

    # mokutil --import /root/module-signing/MOK.der
    input password:
    input password again:
    
  4. 重新启动机器。引导加载程序启动时,MOK管理器EFI实用程序应自动启动。它将要求提供步骤3中提供的部分密码。选择“注册MOK”,然后您应该会看到在步骤3中导入的密钥。完成注册步骤,然后继续进行引导。Linux内核将记录已加载的密钥,并且您应该能够使用以下命令查看自己的密钥: dmesg|grep 'EFI: Loaded cert'

  5. 使用随内核构建文件提供的签名实用程序,使用在步骤2中生成的私有MOK密钥对所有VirtualBox模块进行签名。我将其放在一个小脚本中/root/module-signing/sign-vbox-modules,以便在作为常规更新的一部分安装新内核时可以轻松地运行它。 :

    #!/bin/bash
    
    for modfile in $(dirname $(modinfo -n vboxdrv))/*.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
    

    接着:

    # chmod 700 /root/module-signing/sign-vbox-modules
    
  6. 以根用户身份运行第5步中的脚本。每次安装新的内核更新时,您将需要运行签名脚本,因为这将导致第三方VirtualBox模块的重建。仅在引导新内核之后才使用该脚本,因为它依赖于 modinfo -nuname -r告诉您要签名的内核版本。

  7. 加载vboxdrv模块并启动VirtualBox:

    # modprobe vboxdrv
    

如果需要,该过程还可以用于签署其他第三方内核模块,例如nvidia图形驱动程序。(我自己还没有测试过。)

注意:上面的答案完全来自ØyvindStegard的博客文章VirtualBox + Secure Boot + Ubuntu = fail


1
我收到一个错误:vboxdrv.sh: failed: modprobe vboxnetflt failed. Please use 'dmesg' to find out why. dmesg:[70567.246789] vboxdrv: Found 2 processor cores [70567.267310] vboxdrv: TSC mode is Invariant, tentative frequency 2166734189 Hz [70567.267315] vboxdrv: Successfully loaded version 5.0.40_Ubuntu (interface 0x00240000)
marshy101

5
关于18.04+的注意事项:建议的grep应该改为:dmesg|grep 'EFI:'代替dmesg|grep 'EFI: Loaded cert'
gkephorus

3
绝对不知道并了解它的作用,但是它确实有效。
Naneri

1
以防万一需要:我遇到了没有UEFI或安全模式的问题。就我而言,在18.04.x上的virtualbox-dkms安装被破坏了。我的解决方法是:apt清除virtualbox-dkms和&apt安装virtualbox-dkms和&modprobe vboxdrv
gorlok

1
如果将virtualbox从5.2升级到6.0,请不要忘记再次完成6和7步骤。
voleger

12

上面的答案可能很好用,但是如果您希望更轻松的时间:

我能够通过解决

引导进入BIOS并进入>高级(f7)>引导>向下滚动到“安全引导”>将“ Windows EUFI模式”更改为“其他操作系统”

我的virtualbox现在可以完美运行了。


2
您是否有理由不想这样做?
Taegost

由于电涌或某些原因,我的BIOS已重置,因此我需要这样做。现在我没有得到以上错误。
jamadagni
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.