vboxdrv.sh: gagal: modprobe vboxdrv gagal. Silakan gunakan 'dmesg' untuk mencari tahu alasannya

53

Saya mengalami masalah menjalankan VirtualBox di laptop Ubuntu saya. Laptop saya adalah dual boot, dan berjalan (Windows 10 - saya pikir, sudah bertahun-tahun tidak menggunakannya), serta Ubuntu 16.0.4 LTS.

Saya telah mengaktifkan boot aman pada pengaturan BIOS laptop saya.

Saya menyadari bahwa ada pertanyaan serupa yang diposting di sini, khususnya dua ini:

Saya telah mengikuti semua instruksi yang diberikan di bagian jawaban untuk dua pertanyaan itu - namun, masalahnya tetap belum terselesaikan.

Ini adalah output konsol, ketika saya mencoba menjalankan 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.

di sini adalah output konsol ketika saya menjalankan /sbin/vboxconfigseperti yang disarankan:

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.

Berikut ini adalah hasil akhir dari 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

Sekarang, saya tidak akan berbohong - Saya sama sekali tidak tahu apa yang baru saja dikeluarkan oleh dmesg - dan sejauh yang saya tahu, tidak ada pesan kesalahan dalam output log - yang membuat situasi semakin menyebalkan.

Adakah yang pernah menginstal VirtualBox 5.x pada laptop yang menjalankan Ubuntu 16.0.4 LTS - tetapi dengan boot aman yang diaktifkan pada BIOS ? - jika ya, apa solusinya. ???!

Banyak orang memiliki masalah ini - bahkan beberapa tahun yang lalu. sangat aneh bahwa tampaknya tidak ada yang punya solusi untuk itu - ???

Homunculus Reticulli
sumber
2
"Saya telah mengaktifkan boot aman pada pengaturan BIOS laptop saya." - Itu mungkin bagian dari masalahmu. Saya ingat beberapa waktu lalu ketika mendengar bahwa boot yang aman merusak VBox.
Android Dev
Pertanyaan serupa lainnya: askubuntu.com/questions/760671/…
Dan Dascalescu

Jawaban:

64

VirtualBox + Boot Aman + Ubuntu = gagal

Masalahnya adalah persyaratan bahwa semua modul kernel harus ditandatangani oleh kunci yang dipercaya oleh sistem UEFI, jika tidak, pemuatan akan gagal. Ubuntu tidak menandatangani modul kernel vbox * pihak ketiga, melainkan memberikan opsi kepada pengguna untuk menonaktifkan Secure Boot saat pemasangan paket virtualbox. Saya bisa melakukan itu, tetapi kemudian saya akan melihat pesan "Booting dalam mode tidak aman" yang mengganggu setiap kali mesin dinyalakan, dan juga instalasi dual boot Windows 10 yang saya miliki tidak akan berfungsi.

Ubuntu 16.04 pada Dell Latitude E7440 dengan BIOS A18, dan dengan instalasi Windows 10 dual boot.

Kredit diberikan ke sumber utama informasi yang saya gunakan untuk menyelesaikan masalah ini, yang berlaku khusus untuk Fedora / Redhat: http://gorka.eguileor.com/vbox-vmware-in-secureboot-linux-2016-update/

Dan ajukan pertanyaan Ubuntu yang relevan: Tidak dapat memuat 'vboxdrv' setelah memutakhirkan ke Ubuntu 16.04 (dan saya ingin menjaga boot aman)

Langkah-langkah untuk membuatnya bekerja, khusus untuk Ubuntu / Debian

  1. Instal paket virtualbox. Jika instalasi mendeteksi bahwa Boot Aman diaktifkan, Anda akan dihadapkan pada masalah yang dihadapi dan diberikan opsi untuk menonaktifkan Boot Aman. Pilih "Tidak".

  2. Buat pasangan kunci RSA publik / swasta yang akan digunakan untuk menandatangani modul kernel. Saya memilih untuk menggunakan akun root dan direktori / root / penandatanganan modul / untuk menyimpan semua hal yang terkait dengan penandatanganan modul kernel.

    $ 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. Gunakan utilitas MOK ("Kunci Pemilik Mesin") untuk mengimpor kunci publik sehingga dapat dipercaya oleh sistem. Ini adalah proses dua langkah di mana kunci diimpor pertama kali, dan kemudian harus didaftarkan ketika mesin di-boot di waktu berikutnya. Kata sandi sederhana cukup baik, karena hanya untuk penggunaan sementara.

    # mokutil --import /root/module-signing/MOK.der
    input password:
    input password again:
    
  4. Nyalakan ulang mesin. Ketika bootloader dimulai, utilitas EFI MOK manager harus secara otomatis dimulai. Ia akan menanyakan bagian kata sandi yang disediakan pada langkah 3. Pilih untuk “Daftarkan MOK”, maka Anda akan melihat kunci yang diimpor pada langkah 3. Selesaikan langkah pendaftaran, kemudian lanjutkan dengan booting. Kernel Linux akan mencatat kunci-kunci yang dimuat, dan Anda seharusnya dapat melihat kunci Anda sendiri dengan perintah: dmesg|grep 'EFI: Loaded cert'

  5. Menggunakan utilitas penandatanganan yang dikirimkan dengan kernel build file, tandatangani semua modul VirtualBox menggunakan kunci MOK pribadi yang dihasilkan pada langkah 2. Saya meletakkan ini dalam skrip kecil /root/module-signing/sign-vbox-modules, sehingga dapat dengan mudah dijalankan ketika kernel baru dipasang sebagai bagian dari pembaruan rutin :

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

    Lalu:

    # chmod 700 /root/module-signing/sign-vbox-modules
    
  6. Jalankan skrip dari langkah 5 sebagai root. Anda perlu menjalankan skrip penandatanganan setiap kali pembaruan kernel baru diinstal, karena ini akan menyebabkan pembangunan kembali modul VirtualBox pihak ketiga. Gunakan skrip hanya setelah kernel baru di-boot, karena bergantung pada modinfo -ndan uname -runtuk mengetahui versi kernel mana yang akan ditandatangani.

  7. Muat modul vboxdrv dan jalankan VirtualBox:

    # modprobe vboxdrv
    

Prosedur ini juga dapat digunakan untuk menandatangani modul kernel pihak ketiga lainnya, seperti driver grafis nvidia, jika diperlukan. (Saya belum mengujinya sendiri.)

Catatan: Jawaban di atas sepenuhnya bersumber dari posting blog Øyvind Stegard, VirtualBox + Secure Boot + Ubuntu = gagal .

Android Dev
sumber
1
Saya mendapat pesan kesalahan: 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
Catatan tentang 18.04+: grep yang disarankan harus membaca: dmesg|grep 'EFI:'sebagai penggantidmesg|grep 'EFI: Loaded cert'
gkephorus
3
Sama sekali tidak tahu dan mengerti apa ini, tetapi itu berhasil.
naneri
1
Hanya dalam beberapa kasus diperlukan: Saya punya masalah ini tanpa UEFI atau Mode Aman. Dalam kasus saya, instalasi virtualbox-dkms pada 18.04.x ​​rusak. Perbaikan saya adalah: apt purge virtualbox-dkms && apt install virtualbox-dkms && modprobe vboxdrv
gorlok
1
jika Anda memutakhirkan virtualbox dari 5.2 ke 6.0 jangan lupa selesaikan 6 dan 7 langkah lagi.
voleger
12

Jawaban di atas mungkin bekerja dengan baik, tetapi jika Anda menginginkan waktu yang lebih mudah untuk itu:

Saya bisa menyelesaikannya dengan

boot ke BIOS dan pergi> lanjut (f7)> boot> gulir ke bawah untuk "boot aman"> ubah "mode Windows EUFI" menjadi "OS lain"

Kotak virtual saya berfungsi dengan baik sekarang.

Lee Gildemeester
sumber
2
Apakah ada alasan Anda tidak ingin melakukan ini?
Taegost
Karena beberapa lonjakan daya atau sesuatu BIOS saya telah direset jadi saya perlu melakukan ini. Sekarang saya tidak mendapatkan kesalahan di atas.
jamadagni