Kesalahan VirtualBox setelah Pembaruan Perangkat Lunak (Ubuntu) terakhir

19
  • Versi Ubuntu: 16.04

  • Versi VirtualBox: 5.2.26

  • Pembaruan yang telah "merusak" sesuatu: antara minggu lalu dan hari ini (2019/03/18)

Saya menjalankan Ubuntu Software Updater pagi ini, setelah menyalakan komputer. Setelah itu saya mencoba meluncurkan mesin Virtual Box (versi diinstal melalui .deb, bukan Ubuntu Software Center) dan mendapatkan kesalahan yang terkenal itu:

Kernel driver not installed (rc=-1908)

The VirtualBox Linux kernel driver (vboxdrv) is either not loaded or there is a permission problem with /dev/vboxdrv. Please reinstall the kernel module by executing

'/sbin/vboxconfig'

as root.

where: suplibOsInit what: 3 VERR_VM_DRIVER_NOT_INSTALLED (-1908) - The support driver is not installed. On linux, open returned ENOENT.

Setelah membaca tentang masalah yang sama dan memahami mengapa saya harus melakukannya, saya menjalankannya (hasil yang sama dengan 'sudo /usr/lib/virtualbox/vboxdrv.sh setup' dan solusi lain untuk masalah / posting serupa yang saya temukan di situs ini ):

$ sudo /sbin/vboxconfig

vboxdrv.sh: Stopping VirtualBox services.
vboxdrv.sh: Starting VirtualBox services.
vboxdrv.sh: Building VirtualBox kernel modules.
vboxdrv.sh: failed: Look at /var/log/vbox-setup.log to find out what went wrong.

Membaca .log, saya melihat bahwa masalahnya tampaknya terkait dengan fungsi "get_user_pages", dan pada titik ini saya jujur ​​tidak tahu bagaimana menyelesaikannya.

Building the main VirtualBox module.
Error building the module:
make V=1 CONFIG_MODULE_SIG= -C /lib/modules/4.4.0-143-generic/build SUBDIRS=/tmp/vbox.0 SRCROOT=/tmp/vbox.0 -j8 modules
make[1]: warning: -jN forced in submake: disabling jobserver mode.
mkdir -p /tmp/vbox.0/.tmp_versions ; rm -f /tmp/vbox.0/.tmp_versions/*
make -f ./scripts/Makefile.build obj=/tmp/vbox.0
[...]
[...]
[...]
/tmp/vbox.0/r0drv/linux/memobj-r0drv-linux.c: In function ‘rtR0MemObjNativeLockUser’:
/tmp/vbox.0/r0drv/linux/memobj-r0drv-linux.c:1122:33: warning: passing argument 6 of ‘get_user_pages’ makes pointer from integer without a cast [-Wint-conversion]
                                 fWrite,                 /* force write access. */
                                 ^
In file included from /tmp/vbox.0/r0drv/linux/the-linux-kernel.h:98:0,
                 from /tmp/vbox.0/r0drv/linux/memobj-r0drv-linux.c:31:
include/linux/mm.h:1222:6: note: expected ‘struct page **’ but argument is of type ‘int’
 long get_user_pages(struct task_struct *tsk, struct mm_struct *mm,
      ^
/tmp/vbox.0/r0drv/linux/memobj-r0drv-linux.c:1124:33: warning: passing argument 7 of ‘get_user_pages’ from incompatible pointer type [-Wincompatible-pointer-types]
                                 &pMemLnx->apPages[0],   /* Page array. */
                                 ^
In file included from /tmp/vbox.0/r0drv/linux/the-linux-kernel.h:98:0,
                 from /tmp/vbox.0/r0drv/linux/memobj-r0drv-linux.c:31:
include/linux/mm.h:1222:6: note: expected ‘struct vm_area_struct **’ but argument is of type ‘struct page **’
 long get_user_pages(struct task_struct *tsk, struct mm_struct *mm,
      ^
/tmp/vbox.0/r0drv/linux/memobj-r0drv-linux.c:1112:18: error: too many arguments to function ‘get_user_pages’
             rc = get_user_pages(pTask,                  /* Task for fault accounting. */
                  ^
In file included from /tmp/vbox.0/r0drv/linux/the-linux-kernel.h:98:0,
                 from /tmp/vbox.0/r0drv/linux/memobj-r0drv-linux.c:31:
include/linux/mm.h:1222:6: note: declared here
 long get_user_pages(struct task_struct *tsk, struct mm_struct *mm,
      ^
  gcc -Wp,-MD,/tmp/vbox.0/r0drv/linux/.mpnotification-r0drv-linux.o.d  -nostdinc -isystem /usr/lib/gcc/x86_64-linux-gnu/5/include  -I./arch/x86/include -Iarch/x86/include/generated/uapi -Iarch/x86/include/generated  -Iinclude -I./arch/x86/include/uapi -Iarch/x86/include/generated/uapi -I./include/uapi -Iinclude/generated/uapi -include ./include/linux/kconfig.h -Iubuntu/include  -D__KERNEL__ -fno-pie -Wall -Wundef -Wstrict-prototypes -Wno-trigraphs -fno-strict-aliasing -fno-common -Werror-implicit-function-declaration -Wno-format-security -std=gnu89 -fno-PIE -fno-pie -no-pie -mno-sse -mno-mmx -mno-sse2 -mno-3dnow -mno-avx -m64 -falign-jumps=1 -falign-loops=1 -mno-80387 -mno-fp-ret-in-387 -mpreferred-stack-boundary=3 -mskip-rax-setup -mtune=generic -mno-red-zone -mcmodel=kernel -funit-at-a-time -maccumulate-outgoing-args -DCONFIG_X86_X32_ABI -DCONFIG_AS_CFI=1 -DCONFIG_AS_CFI_SIGNAL_FRAME=1 -DCONFIG_AS_CFI_SECTIONS=1 -DCONFIG_AS_FXSAVEQ=1 -DCONFIG_AS_SSSE3=1 -DCONFIG_AS_CRC32=1 -DCONFIG_AS_AVX=1 -DCONFIG_AS_AVX2=1 -DCONFIG_AS_SHA1_NI=1 -DCONFIG_AS_SHA256_NI=1 -pipe -Wno-sign-compare -fno-asynchronous-unwind-tables -mindirect-branch=thunk-extern -mindirect-branch-register -DRETPOLINE -fno-delete-null-pointer-checks -Wno-maybe-uninitialized -O2 --param=allow-store-data-races=0 -DCC_HAVE_ASM_GOTO -Wframe-larger-than=1024 -fstack-protector-strong -Wno-unused-but-set-variable -fno-omit-frame-pointer -fno-optimize-sibling-calls -fno-var-tracking-assignments -pg -mfentry -DCC_USING_FENTRY -Wdeclaration-after-statement -Wno-pointer-sign -fno-strict-overflow -fno-merge-all-constants -fmerge-constants -fno-stack-check -fconserve-stack -Werror=implicit-int -Werror=strict-prototypes -Werror=date-time -include /tmp/vbox.0/include/VBox/SUPDrvMangling.h -fno-omit-frame-pointer -fno-pie -I/lib/modules/4.4.0-143-generic/build/include -I/tmp/vbox.0/ -I/tmp/vbox.0/include -I/tmp/vbox.0/r0drv/linux -D__KERNEL__ -DMODULE -DRT_OS_LINUX -DIN_RING0 -DIN_RT_R0 -DIN_SUP_R0 -DVBOX -DRT_WITH_VBOX -DVBOX_WITH_HARDENING -DSUPDRV_WITH_RELEASE_LOGGER -Wno-declaration-after-statement -DCONFIG_VBOXDRV_AS_MISC -DRT_ARCH_AMD64 -DVBOX_WITH_64_BITS_GUESTS  -DMODULE  -D"KBUILD_STR(s)=#s" -D"KBUILD_BASENAME=KBUILD_STR(mpnotification_r0drv_linux)"  -D"KBUILD_MODNAME=KBUILD_STR(vboxdrv)" -c -o /tmp/vbox.0/r0drv/linux/.tmp_mpnotification-r0drv-linux.o /tmp/vbox.0/r0drv/linux/mpnotification-r0drv-linux.c
scripts/Makefile.build:285: recipe for target '/tmp/vbox.0/r0drv/linux/memobj-r0drv-linux.o' failed
make[2]: *** [/tmp/vbox.0/r0drv/linux/memobj-r0drv-linux.o] Error 1
make[2]: *** Waiting for unfinished jobs....
  if [ "-pg" = "-pg" ]; then if [ /tmp/vbox.0/r0drv/linux/initterm-r0drv-linux.o != "scripts/mod/empty.o" ]; then ./scripts/recordmcount  "/tmp/vbox.0/r0drv/linux/initterm-r0drv-linux.o"; fi; fi;
  if [ "-pg" = "-pg" ]; then if [ /tmp/vbox.0/SUPDrv.o != "scripts/mod/empty.o" ]; then ./scripts/recordmcount  "/tmp/vbox.0/SUPDrv.o"; fi; fi;
  if [ "-pg" = "-pg" ]; then if [ /tmp/vbox.0/r0drv/linux/assert-r0drv-linux.o != "scripts/mod/empty.o" ]; then ./scripts/recordmcount  "/tmp/vbox.0/r0drv/linux/assert-r0drv-linux.o"; fi; fi;
  if [ "-pg" = "-pg" ]; then if [ /tmp/vbox.0/r0drv/linux/alloc-r0drv-linux.o != "scripts/mod/empty.o" ]; then ./scripts/recordmcount  "/tmp/vbox.0/r0drv/linux/alloc-r0drv-linux.o"; fi; fi;
  if [ "-pg" = "-pg" ]; then if [ /tmp/vbox.0/r0drv/linux/memuserkernel-r0drv-linux.o != "scripts/mod/empty.o" ]; then ./scripts/recordmcount  "/tmp/vbox.0/r0drv/linux/memuserkernel-r0drv-linux.o"; fi; fi;
  if [ "-pg" = "-pg" ]; then if [ /tmp/vbox.0/r0drv/linux/mpnotification-r0drv-linux.o != "scripts/mod/empty.o" ]; then ./scripts/recordmcount  "/tmp/vbox.0/r0drv/linux/mpnotification-r0drv-linux.o"; fi; fi;
  if [ "-pg" = "-pg" ]; then if [ /tmp/vbox.0/r0drv/linux/mp-r0drv-linux.o != "scripts/mod/empty.o" ]; then ./scripts/recordmcount  "/tmp/vbox.0/r0drv/linux/mp-r0drv-linux.o"; fi; fi;
Makefile:1454: recipe for target '_module_/tmp/vbox.0' failed
make[1]: *** [_module_/tmp/vbox.0] Error 2
/tmp/vbox.0/Makefile.include.footer:101: recipe for target 'vboxdrv' failed
make: *** [vboxdrv] Error 2

Saya sudah mencoba setiap solusi untuk masalah serupa dengan pesan kesalahan ini tetapi tidak ada yang berhasil untuk saya.

Adakah yang mengalami masalah serupa setelah pembaruan Ubuntu terakhir?

PEMBARUAN: Saya telah sepenuhnya menghapus instalan VirtualBox, menghidupkan ulang sistem, menginstal VirtualBox lagi, dan masih kesalahan yang sama.

Alberto Martín
sumber
2
Benar. Apa yang saya tidak mengerti adalah bahwa ada orang yang mengklaim bahwa "versi" kesalahan yang harus diselesaikan untuk Trusty dan Xenial ini sangat 10 Maret dan hari ini kita memiliki "versi baru" dari masalah.
Alberto Martín
Sudahkah Anda mencoba VB 6.0?
heynnema
1
Saya telah melihat ini hari ini setelah memperbarui beberapa mesin host ke 4.4.0-143. Yang satu memiliki versi VirtualBox yang cukup lama (5.0.x) dan yang lainnya memiliki 5.2.x (jadi tidak terlalu lama). Setelah pembaruan, tak satu pun dari mereka akan meluncurkan VM saya yang menunjukkan modul kernel tidak diinstal masalah. Saya memutakhirkan / kembali ke 5.1.38 pada keduanya, akhirnya membuat mereka menjalankan VM. Namun, ketika saya mencoba menginstal tambahan tamu di salah satu tamu, saya mendapatkan kesalahan get_user_pages di file vboxadd-install.log.
cosimo193
Saya mendapat kesalahan yang sama baru-baru ini ketika saya mencoba untuk menginstal Virtualbox 5.2.18 dan kemudian v6.0, latop saya yang merupakan sistem UEFI dengan Boot Aman, jadi ada komplikasi tambahan, milik Anda sistem UEFI, jika itu biarkan saya tahu saya tahu bagaimana cara memperbaikinya dan dapat memberikan solusi. Anda dapat mengonfirmasi bahwa sistem Anda UEFI atau tidak dengan menjalankan perintah: cd / sys / firmware / efi
Jika mungkin bermanfaat bagi siapa pun: ada laporan bug di bugs.launchpad.net/ubuntu/+source/virtualbox/+bug/1821083
Ganton

Jawaban:

13

Jawaban mudahnya, untuk saat ini - gunakan testbuild yang disediakan oleh Vbox sambil menunggu patch kernel.

Anda dapat menemukan bangunan di sini . Anda perlu menggunakan tautan saat ini yang disediakan pada halaman itu karena yang digunakan di sini dalam contoh telah berubah.

Pastikan Anda mencopot pemasangan versi Anda saat ini:

sudo apt remove virtualbox*
dkpk -r virtualbox 
# the tab key will autocomplete the version if there's one for dpkg to remove

Instal test build (ubah url agar sesuai dengan test build terbaru yang disediakan oleh virtualbox menggunakan tautan di atas - https://www.virtualbox.org/wiki/Testbuilds ):

wget https://www.virtualbox.org/download/testcase/VirtualBox-6.0.5-129423-Linux_amd64.run
chmod +x VirtualBox-6.0.5-129423-Linux_amd64.run
sudo ./VirtualBox-6.0.5-129423-Linux_amd64.run

Jika Anda memerlukan paket ekstensi (ubah url agar sesuai dengan test build terbaru yang disediakan oleh virtualbox menggunakan tautan di atas - https://www.virtualbox.org/wiki/Testbuilds ):

wget https://www.virtualbox.org/download/testcase/Oracle_VM_VirtualBox_Extension_Pack-6.0.5-129380.vbox-extpack
sudo VBoxManage extpack install Oracle_VM_VirtualBox_Extension_Pack-6.0.5-129380.vbox-extpack
Robco
sumber
1
Robco terima kasih. Saya belum punya waktu untuk mencobanya; Saya menurunkan VirtualBox dan pada prinsipnya saya hanya akan menunggu sampai diperbaiki atau hanya sampai kernel berikutnya (saya benar-benar tidak memerlukan versi terakhir dari VirtualBox). Namun solusi Anda bagi saya tampaknya yang terbaik bagi mereka yang membutuhkan versi terakhir / sebelum terakhir, sejauh itu stabil. Sudahkah Anda mencobanya sendiri? Apakah stabil?
Alberto Martín
Hai Alberto. Ya, saya lebih suka untuk tidak menurunkan versi kernel dan saya mencoba menurunkan vbox (mungkin saya tidak kembali cukup jauh) tetapi drivernya masih belum dapat dibangun. Saya telah melakukan ini untuk 4 pengguna dan tidak memiliki masalah.
Robco
1
Terima kasih atas umpan balik Robco. Kedengarannya bagus. Dalam hal ini saya kira ini adalah solusi paling elegan untuk masalah sejauh ini.
Alberto Martín
1
Anda dapat menemukan tes build terbaru di halaman ini: virtualbox.org/wiki/Testbuilds .
Tom Saleeba
2
Ini memiliki peringatan: "Silakan juga menggunakan versi 5.2 jika Anda masih membutuhkan dukungan untuk host 32-bit, karena ini telah dihentikan dalam 6.0" virtualbox.org/wiki/Downloads . Tamu 32-bit masih didukung.
Piskvor
4

Saya memiliki masalah yang sama.

Saya beralih kembali ke kernel sebelumnya. Lihat ini: http://karlcode.owtelse.com/blog/2017/03/13/reverting-to-a-previous-kernel/

setelah itu instal ulang kotak virtual dan itu berfungsi lagi.

Salam Alex

Alex
sumber
Hai Alex. Sebanyak mungkin itu bisa membuat trik, saya merasa terlalu berantakan dan kadang-kadang berisiko daripada hanya menurunkan versi VirtualBox, yang akan bekerja dengan sempurna.
Alberto Martín
4

Ini terlihat sangat mirip dengan bug yang dikenal 1818049 bernama "modul virtualbox dkms gagal dibangun dengan linux 4.4.0-143.169 [kesalahan: terlalu banyak argumen yang berfungsi 'get_user_pages']" .

Solusi kerja yang sebenarnya akan sama seperti untuk masalah TTY - hapus kernel terbaru dan instal kernel yang bagus sebelumnya ( 4.4.0-138-generic terlihat terbaik untuk saya - USB 3.0 dengan aman akan bekerja, masalah getty tidak ada):

sudo apt-get purge linux-image-generic linux-headers-generic
sudo apt-get purge linux-image-4.4.0-139-generic linux-headers-4.4.0-139-generic \
linux-image-4.4.0-140-generic linux-headers-4.4.0-140-generic \
linux-image-4.4.0-141-generic linux-headers-4.4.0-141-generic \
linux-image-4.4.0-142-generic linux-headers-4.4.0-142-generic \
linux-image-4.4.0-143-generic linux-headers-4.4.0-143-generic

sudo apt-get install amd64-microcode intel-microcode thermald
sudo apt-get autoremove

sudo apt-get install linux-image-4.4.0-138-generic linux-image-extra-4.4.0-138-generic
sudo apt-get install linux-headers-4.4.0-138 linux-headers-4.4.0-138-generic

dan reboot setelah itu. Jadi kita perlu menunggu kernel normal yang teruji dengan baik .

Peringatan: jangan tingkatkan kernel ke 4.4.0-143-generik jika Anda memerlukan VirtualBox pada tamu dan host. Berlangganan bug 1818049 dan setelah konfirmasi perbaikan, instal kembali kernel terbaru dengan sudo apt-get install linux-image-generic linux-headers-generic.

N0rbert
sumber
3

Perbaikan termudah untuk Ubuntu 16.04 adalah dengan memutakhirkan kernel ke versi yang sama yang digunakan Ubuntu 18.04 dengan menjalankan perintah berikut:

sudo apt-get install --install-recommends linux-generic-hwe-16.04

Reboot setelah menjalankan perintah di atas.

Jika Anda menjalankan dkms, Anda tidak perlu menginstal ulang penambahan tamu setelah mesin dinyalakan kembali. Lain, instal tambahan tamu, dan itu akan berfungsi dengan baik sekarang di Ubuntu 16.04

Sendiri
sumber
Terima kasih, bekerja untuk saya
Jason Morgan
2

Sangat mirip dengan milik Alberto

  1. sudo /usr/lib/virtualbox/vboxdrv.sh setup (saya mendapatkan kesalahan, tetapi berhenti VBox ...)
  2. sudo dpkg -l | grep virtualbox (dapatkan versi VBox.)
  3. sudo apt-get purge virtualbox-5.XYZ virtualbox-qt (versi XYZ dari langkah 2)
  4. Diinstal dari Perangkat Lunak Ubuntu: diturunkan ke 5.1.38

Bangkit dan berjalan lagi!

Luis Capriles
sumber
2

Setelah berusaha sangat keras untuk menyelesaikannya (baik DKMS maupun Synaptics tampaknya tidak berguna sebagai solusi untuk masalah ini), saya tidak dapat melakukannya, sehingga solusi SEMENTARA bagi mereka yang mungkin berada dalam situasi yang sama, dan hanya dalam rangka untuk dapat terus bekerja dengan mesin tamu, saya sarankan untuk menurunkan versi VirtualBox ke versi yang ditawarkan USC.

  • Cukup hapus versi VirtualBox saat ini (saya melakukannya melalui Synaptics, tetapi GDebi juga akan bekerja dengan baik).

  • Instal VirtualBox USC versi yang ditawarkan (baik melalui USC atau Synaptics)

  • Turunkan modul instalan VBoxGuestAdditions di mesin host.

  • Di mesin tamu, ingatlah untuk menurunkan versi VBoxGuestAdditions (masukkan CD VBoxGuestAdditions lama dan jalankan).

Masalah / kesalahan masih ada karena tidak memungkinkan untuk menggunakan versi VirtualBox terakhir, saya harap itu membantu, tapi saya akan menghargai solusi akhir untuk dapat menginstal dan menggunakan versi deb lagi.

UPDATE: Sejauh ini tampaknya tidak ada solusi pamungkas, jadi dalam kasus saya * yang satu ini terus menjadi yang paling sederhana. (* Secara pribadi saya lebih suka downgrade VirtualBox daripada kembali ke kernel Ubuntu sebelumnya).

Namun, jika karena alasan apa pun seseorang perlu menggunakan / menginstal versi terakhir VirtualBox, ia dapat melakukannya dengan mengikuti petunjuk ini, juga disebutkan oleh pengguna lain: https://bugs.launchpad.net/ubuntu/+source/virtualbox/ + bug / 1818049 / komentar / 27

Alberto Martín
sumber
1

Saya juga melihat masalah ini. Saya memiliki Ubuntu 16,04 LTS. Itu diperbarui ke kernel 4.4.0-143. Virtualbox (5.2.14) tidak akan membangun vboxdrv.ko. Penurunan versi ke kernel 4.4.0-142 (kemudian menghapus -143) menyelesaikan masalah.

Brian Armstrong
sumber