vboxdrv.sh: сбой: сбой modprobe vboxdrv. Пожалуйста, используйте 'dmesg', чтобы узнать почему

53

У меня проблемы с запуском VirtualBox на моем ноутбуке с Ubuntu. У меня ноутбук с двойной загрузкой и работает (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 только что выкинул - и, насколько я могу судить, в выводе журнала нет сообщений об ошибках, что делает ситуацию еще более раздражающей.

Кто-нибудь когда-нибудь устанавливал VirtualBox 5.x на ноутбук с Ubuntu 16.0.4 LTS, но с включенной безопасной загрузкой в ​​BIOS ? - если да, то каково решение. ???!

У многих людей есть эта проблема - даже несколько лет назад. это очень странно, что ни у кого, кажется, нет решения для этого - ???

Гомункул Ретулли
источник
2
«У меня включена безопасная загрузка в настройках BIOS моего ноутбука». - Это может быть частью вашей проблемы. Я помню некоторое время назад, услышав, что безопасная загрузка сломала VBox.
Android Dev
Еще один похожий вопрос: askubuntu.com/questions/760671/…
Дан Даскалеску

Ответы:

64

VirtualBox + Безопасная загрузка + Ubuntu = сбой

Проблема заключается в том, что все модули ядра должны быть подписаны ключом, которому доверяет система UEFI, иначе загрузка не удастся. Ubuntu не подписывает сторонние модули ядра vbox *, а дает пользователю возможность отключить безопасную загрузку при установке пакета virtualbox. Я мог бы это сделать, но тогда я видел бы раздражающее сообщение «Загрузка в небезопасном режиме» при каждом запуске машины, а также установка Windows 10 с двойной загрузкой, которая у меня не работала.

Ubuntu 16.04 на Dell Latitude E7440 с BIOS A18 и установкой Windows 10 с двойной загрузкой.

Авторы относятся к первоисточнику информации, которую я использовал для решения этой проблемы, в частности, для Fedora / Redhat: http://gorka.eguileor.com/vbox-vmware-in-secureboot-linux-2016-update/

И соответствующий вопрос Ask Ubuntu: Не удалось загрузить vboxdrv после обновления до Ubuntu 16.04 (и я хочу сохранить безопасную загрузку)

Шаги, чтобы заставить это работать, особенно для Ubuntu / Debian

  1. Установите пакет virtualbox. Если установка обнаружит, что безопасная загрузка включена, вам будет представлен вопрос о проблеме и предоставлена ​​возможность отключить безопасную загрузку. Выберите «Нет».

  2. Создайте личную пару открытых / закрытых ключей RSA, которая будет использоваться для подписи модулей ядра. Я решил использовать учетную запись root и каталог / root / module-signature / для хранения всего, что связано с подписью модулей ядра.

    $ 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. Перезагрузите машину. При запуске загрузчика программа EFI manager MOK должна автоматически запуститься. Он запросит части пароля, предоставленные на шаге 3. Выберите «Enroll MOK», затем вы увидите ключ, импортированный на шаге 3. Выполните шаги регистрации, затем продолжите загрузку. Ядро Linux будет регистрировать загруженные ключи, и вы сможете увидеть свой собственный ключ с помощью команды: dmesg|grep 'EFI: Loaded cert'

  5. Используя утилиту для подписи, поставляемую с файлами сборки ядра, подпишите все модули VirtualBox с помощью закрытого ключа MOK, сгенерированного на шаге 2. Я поместил это в небольшой скрипт /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 от имени пользователя root. Вам нужно будет запускать сценарий подписи каждый раз, когда устанавливается новое обновление ядра, так как это приведет к перестройке сторонних модулей VirtualBox. Используйте сценарий только после загрузки нового ядра, так как он полагается modinfo -nи uname -rуказывает, какую версию ядра подписывать.

  7. Загрузите модуль vboxdrv и запустите VirtualBox:

    # modprobe vboxdrv
    

Процедура может также использоваться для подписи других сторонних модулей ядра, таких как графические драйверы nvidia, если это требуется. (Я не проверял это сам.)

Примечание. Ответ, приведенный выше, был полностью взят из сообщения в блоге Ойвинда Стегарда: VirtualBox + Secure Boot + Ubuntu = fail .

Android Dev
источник
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
Абсолютно не знаю и не понимаю, что это делает, но это сработало.
Нанери
1
На всякий случай, если это необходимо: у меня была эта проблема без UEFI или безопасного режима. В моем случае установка virtualbox-dkms на 18.04.x ​​была прервана. Мое исправление было следующим: apt purge virtualbox-dkms && apt установить virtualbox-dkms && modprobe vboxdrv
gorlok
1
если вы обновите virtualbox с 5.2 до 6.0, не забудьте снова выполнить 6 и 7 шагов.
Фольгер
12

Ответ выше, вероятно, работает нормально, но если вы хотите более легкое время для этого:

Я смог решить это

загрузка в BIOS и переход> расширенный (f7)> загрузочный> прокрутите вниз до «безопасной загрузки»> измените «режим Windows EUFI» на «другие ОС»

Моя виртуальная коробка теперь отлично работает.

Ли Гильдеместер
источник
2
Есть ли причина, по которой вы бы не хотели этого делать?
Taegost
Из-за скачка напряжения или чего-то еще мой BIOS был сброшен, поэтому мне нужно было это сделать. Теперь я не получаю вышеуказанную ошибку.
Джамадагни