vboxdrv.sh: failed: modprobe vboxdrv failed. Proszę użyć „dmesg”, aby dowiedzieć się, dlaczego

53

Mam problemy z uruchomieniem VirtualBox na moim laptopie Ubuntu. Mój laptop ma podwójny rozruch i działa (Windows 10 - myślę, że nie używałem go od lat), a także Ubuntu 16.0.4 LTS.

Mam włączony bezpieczny rozruch w ustawieniach BIOS mojego laptopa.

Zdaję sobie sprawę, że na stronie znajdują się podobne pytania, w szczególności te dwa:

Postępowałem zgodnie ze wszystkimi instrukcjami podanymi w sekcjach odpowiedzi dla tych dwóch pytań - jednak problem pozostaje nierozwiązany.

Oto dane wyjściowe konsoli, gdy próbuję uruchomić 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.

oto dane wyjściowe konsoli, gdy uruchamiam /sbin/vboxconfigzgodnie z sugestią:

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.

Oto koniec danych wyjściowych 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

Teraz nie zamierzam kłamać - absolutnie nie mam pojęcia, co dmesg właśnie wyrzuciło - i, o ile mogę stwierdzić, nie ma komunikatów o błędach w danych wyjściowych dziennika - co czyni sytuację jeszcze bardziej irytującą.

Czy ktoś kiedykolwiek instalował VirtualBox 5.x na laptopie z systemem Ubuntu 16.0.4 LTS - ale z włączonym bezpiecznym uruchomieniem w systemie BIOS ? - jeśli tak, jakie jest rozwiązanie. ???

Wiele osób ma ten problem - nawet kilka lat wstecz. to bardzo dziwne, że nikt nie ma na to rozwiązania - ???

Homunculus Reticulli
źródło
2
„Mam włączony bezpieczny rozruch w ustawieniach BIOS mojego laptopa”. - To może być część twojego problemu. Pamiętam, jak jakiś czas temu słyszałem, że ten bezpieczny but zepsuł VBox.
Android Dev
Kolejne podobne pytanie: askubuntu.com/questions/760671/…
Dan Dascalescu

Odpowiedzi:

64

VirtualBox + Secure Boot + Ubuntu = fail

Problem polega na tym, że wszystkie moduły jądra muszą być podpisane kluczem zaufanym przez system UEFI, w przeciwnym razie ładowanie się nie powiedzie. Ubuntu nie podpisuje zewnętrznych modułów jądra vbox *, ale daje użytkownikowi opcję wyłączenia Bezpiecznego rozruchu po instalacji pakietu virtualbox. Mógłbym to zrobić, ale wtedy przy każdym uruchomieniu komputera zobaczyłbym irytujący komunikat „Uruchamianie w trybie niepewnym”, a także instalacja podwójnego rozruchu systemu Windows 10, której nie mam.

Ubuntu 16.04 na Dell Latitude E7440 z BIOS A18 i podwójną instalacją systemu Windows 10.

Kredyt trafia do głównego źródła informacji, których użyłem do rozwiązania tego problemu, który dotyczy konkretnie Fedory / Redhat: http://gorka.eguileor.com/vbox-vmware-in-secureboot-linux-2016-update/

I odpowiednie pytanie Zadaj Ubuntu: Nie można załadować „vboxdrv” po aktualizacji do Ubuntu 16.04 (i chcę zachować bezpieczny rozruch)

Kroki, aby to zadziałało, szczególnie dla Ubuntu / Debian

  1. Zainstaluj pakiet virtualbox. Jeśli instalacja wykryje, że Bezpieczny rozruch jest włączony, zostanie wyświetlony problem i dostępna opcja wyłączenia Bezpiecznego rozruchu. Wybierz „Nie”.

  2. Utwórz osobistą publiczną / prywatną parę kluczy RSA, która będzie używana do podpisywania modułów jądra. Wybrałem konto root i katalog / root / module-signing / do przechowywania wszystkich rzeczy związanych z podpisywaniem modułów jądra.

    $ 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. Użyj narzędzia MOK („Klucz właściciela maszyny”), aby zaimportować klucz publiczny, aby system mógł mu zaufać. Jest to dwuetapowy proces, w którym klucz jest najpierw importowany, a następnie musi zostać zarejestrowany przy następnym uruchomieniu komputera. Proste hasło jest wystarczające, ponieważ służy tylko do tymczasowego użycia.

    # mokutil --import /root/module-signing/MOK.der
    input password:
    input password again:
    
  4. Uruchom ponownie maszynę. Po uruchomieniu programu ładującego narzędzie EFI menedżera MOK powinno uruchomić się automatycznie. Zostaniesz poproszony o podanie części hasła podanego w kroku 3. Wybierz „Enroll MOK”, następnie powinieneś zobaczyć klucz zaimportowany w kroku 3. Wykonaj kroki rejestracji, a następnie kontynuuj rozruch. Jądro Linux zarejestruje załadowane klucze i powinieneś być w stanie zobaczyć swój własny klucz za pomocą polecenia: dmesg|grep 'EFI: Loaded cert'

  5. Korzystając z narzędzia do podpisywania dostarczonego z plikami kompilacji jądra, podpisz wszystkie moduły VirtualBox za pomocą prywatnego klucza MOK wygenerowanego w kroku 2. Umieszczam to w małym skrypcie /root/module-signing/sign-vbox-modules, aby można go było łatwo uruchomić, gdy nowe jądra są instalowane w ramach regularnych aktualizacji :

    #!/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
    

    I wtedy:

    # chmod 700 /root/module-signing/sign-vbox-modules
    
  6. Uruchom skrypt od kroku 5 jako root. Będziesz musiał uruchomić skrypt podpisujący za każdym razem, gdy instalowana jest nowa aktualizacja jądra, ponieważ spowoduje to przebudowę modułów VirtualBox innych firm. Użyj skryptu dopiero po uruchomieniu nowego jądra, ponieważ polega ono na tym modinfo -ni uname -rinformuje, którą wersję jądra ma podpisać.

  7. Załaduj moduł vboxdrv i uruchom VirtualBox:

    # modprobe vboxdrv
    

Procedurę można również wykorzystać do podpisania innych modułów jądra innych firm, takich jak sterowniki graficzne NVIDIA, jeśli jest to wymagane. (Sam tego nie testowałem.)

Uwaga: powyższa odpowiedź pochodzi w całości z postu na blogu Øyvinda Stegarda, VirtualBox + Secure Boot + Ubuntu = fail .

Android Dev
źródło
1
vboxdrv.sh: failed: modprobe vboxnetflt failed. Please use 'dmesg' to find out why.[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)
Pojawia
5
Uwaga o 18.04+: sugerowany grep powinien brzmieć: dmesg|grep 'EFI:'zamiastdmesg|grep 'EFI: Loaded cert'
gkephorus
3
Absolutnie nie wiem i nie rozumiem, co to działa, ale zadziałało.
naneri
1
Na wszelki wypadek: miałem ten problem bez UEFI lub trybu bezpiecznego. W moim przypadku instalacja virtualbox-dkms w dniu 18.04.x ​​została zerwana. Naprawiłem: apt purge virtualbox-dkms && apt install virtualbox-dkms && modprobe vboxdrv
gorlok
1
jeśli uaktualnisz virtualboksa z 5.2 do 6.0, nie zapomnij ponownie wykonać kroków 6 i 7.
voleger
12

Powyższa odpowiedź prawdopodobnie działa dobrze, ale jeśli chcesz na to łatwiej:

Udało mi się to rozwiązać

uruchomienie systemu BIOS i przejście> zaawansowane (f7)> uruchomienie> przewiń w dół do „bezpiecznego rozruchu”> zmień „Windows EUFI mode” na „inny system operacyjny”

Moja wirtualna skrzynka działa teraz idealnie.

Lee Gildemeester
źródło
2
Czy istnieje powód, dla którego nie chcesz tego robić?
Taegost
Z powodu nagłego wzrostu napięcia lub czegoś, co zresetowało mój BIOS, musiałem to zrobić. Teraz nie otrzymuję powyższego błędu.
jamadagni