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 + Secure Boot + Ubuntu = помилка

Проблема полягає в тому, що всі модулі ядра повинні бути підписані ключем, якому довіряє система UEFI, інакше завантаження не вдасться. Ubuntu не підписує сторонні модулі ядра vbox *, а надає користувачеві можливість відключити захищене завантаження після встановлення пакета віртуальної скриньки. Я міг би це зробити, але тоді я побачив би набридливе повідомлення "завантаження в небезпечному режимі" щоразу, коли машина запускається, а також установка подвійного завантаження 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/

І відповідне запитання Ubuntu: Не вдалося завантажити 'vboxdrv' після оновлення до Ubuntu 16.04 (і я хочу зберегти завантаження)

Кроки для того, щоб він працював, спеціально для Ubuntu / Debian

  1. Встановіть пакет virtualbox. Якщо інсталяція виявить, що Secure Boot увімкнено, вам буде представлено проблему під рукою та надано можливість вимкнути Захищене завантаження. Виберіть "Ні".

  2. Створіть персональну публічну / приватну пару ключів RSA, яка буде використовуватися для підписання модулів ядра. Я вирішив використовувати кореневий обліковий запис та каталог / 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 менеджера MOK повинна автоматично запускатися. Він запитає частини пароля, що подаються на кроці 3. Виберіть "Записати 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, якщо це потрібно. (Я сам цього не перевіряв.)

Примітка . Вищенаведена відповідь була повністю отримана з публікації блогу Øyvind Stegard, VirtualBox + Secure Boot + Ubuntu = невдача .


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+: запропонований греп повинен читати: dmesg|grep 'EFI:'замістьdmesg|grep 'EFI: Loaded cert'
gkephorus

3
Абсолютно не знаю і не розумію, що це робить, але це спрацювало.
naneri

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 кроків.
voleger

12

Наведена вище відповідь, ймовірно, працює чудово, але якщо ви хочете, щоб це було простіше:

Мені вдалося це вирішити

завантаження в BIOS та перехід> Advanced (f7)> boot> прокручування вниз до "безпечного завантаження"> зміни "Режим Windows EUFI" на "іншу ОС"

Мій віртуальний ящик зараз ідеально працює


2
Чи є причина, чому ви не хотіли б цього робити?
Taegost

Через деякий сплеск електроенергії або щось моє BIOS було скинуто, тому мені потрібно було це зробити. Тепер я не отримую вищезгаданої помилки.
джамадагні
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.