Błąd VirtualBox po ostatniej aktualizacji oprogramowania (Ubuntu)

19
  • Wersja Ubuntu: 16.04

  • Wersja VirtualBox: 5.2.26

  • Aktualizacje, które coś „zepsuły”: te między ostatnim tygodniem a dniem dzisiejszym (2019/03/18)

Uruchomiłem Ubuntu Software Updater dziś rano, po włączeniu komputera. Następnie próbowałem uruchomić maszynę Virtual Box (wersja zainstalowana przez .deb, a nie Ubuntu Software Center) i otrzymałem ten słynny błąd:

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.

Po przeczytaniu o podobnych problemach i zrozumieniu, dlaczego powinienem to zrobić, wykonałem go (te same wyniki z „sudo /usr/lib/virtualbox/vboxdrv.sh setup” i innymi rozwiązaniami podobnych problemów / postów, które znalazłem na tej stronie ):

$ 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.

Czytając .log, widzę, że problem wydaje się być związany z funkcją „get_user_pages” iw tym momencie szczerze mówiąc nie mam pojęcia, jak go rozwiązać.

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

Próbowałem już wszystkich rozwiązań podobnych problemów z tym komunikatem o błędzie, ale żadne nie działa dla mnie.

Czy ktoś miał podobne problemy po ostatnich aktualizacjach Ubuntu?

AKTUALIZACJA: Całkowicie odinstalowałem VirtualBox, zrestartowałem system, ponownie zainstalowałem VirtualBox i nadal występuje ten sam błąd.

Alberto Martín
źródło
2
Absolutnie. Nie rozumiem, że są ludzie, którzy twierdzą, że poprzednia „wersja” błędu do rozwiązania dla Trusty i Xenial już 10 marca, a dziś mamy „nową wersję” problemu.
Alberto Martín
Próbowałeś już VB 6.0?
heynnema
1
Widziałem to dzisiaj po aktualizacji kilku hostów do 4.4.0-143. Jedna miała dość starą wersję VirtualBox (5.0.x), a druga miała 5.2.x (więc nie tak stara). Po aktualizacji żadna z nich nie uruchomiła moich maszyn wirtualnych, pokazując, że moduł jądra nie jest zainstalowany. Uaktualniłem / przywróciłem do wersji 5.1.38 na obu, w końcu zmuszając je do uruchamiania maszyn wirtualnych. Jednak gdy próbuję zainstalować dodatki gościa na jednym z gości, pojawia się błąd get_user_pages w pliku vboxadd-install.log.
cosimo193
Niedawno dostałem ten sam błąd, gdy próbowałem zainstalować Virtualbox 5.2.18, a następnie v6.0, mój latop, który jest systemem UEFI z funkcją bezpiecznego rozruchu, więc jest dodatkowa komplikacja, to twój system UEFI, jeśli pozwolę mi wiem jak wiem, jak to naprawić i może dostarczyć rozwiązanie. Możesz potwierdzić, że Twój system to UEFI lub nie, uruchamiając polecenie: cd / sys / firmware / efi
Jeśli może być przydatny dla każdego: raport o błędzie znajduje się na stronie bugs.launchpad.net/ubuntu/+source/virtualbox/+bug/1821083
Ganton

Odpowiedzi:

13

Na razie łatwa odpowiedź - użyj kompilacji testowej dostarczonej przez Vbox, czekając na łatę do jądra.

Możesz znaleźć kompilację tutaj . Będziesz musiał użyć bieżących linków podanych na tej stronie, ponieważ te użyte w tym przykładzie uległy zmianie.

Upewnij się, że odinstalowałeś bieżącą wersję:

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

Zainstaluj wersję testową (zmień adres URL, aby pasował do najnowszej wersji testowej dostarczonej przez virtualbox, korzystając z powyższego linku - 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

Jeśli potrzebujesz pakietu rozszerzeń (zmień adres URL, aby pasował do najnowszej wersji testowej udostępnionej przez virtualbox, korzystając z powyższego linku - 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
źródło
1
Dzięki Robco. Nie miałem czasu, aby spróbować; Obniżyłem wersję VirtualBox i zasadniczo poczekam, aż zostanie naprawiony lub tylko do następnego jądra (naprawdę nie potrzebuję ostatniej wersji VirtualBox). Jednak twoje rozwiązanie wydaje mi się najlepsze dla tych, którzy potrzebują ostatniej / przed ostatnią wersją, o ile jest ona stabilna. Próbowałeś tego sam? Czy to jest stabilne?
Alberto Martín
Cześć Alberto. Tak, wolę nie obniżać wersji jądra i próbowałem obniżyć wersję vbox (być może nie wróciłem wystarczająco daleko), ale nadal nie można zbudować sterownika. Zrobiłem to dla 4 użytkowników i nie miałem problemów.
Robco
1
Dziękujemy za opinię Robco. Brzmi całkiem nieźle. W takim razie wydaje mi się, że jest to najbardziej eleganckie rozwiązanie problemu do tej pory.
Alberto Martín
1
Najnowsze wersje testowe można znaleźć na tej stronie: virtualbox.org/wiki/Testbuilds .
Tom Saleeba
2
Ma to zastrzeżenie: „Proszę również użyć wersji 5.2, jeśli nadal potrzebujesz wsparcia dla hostów 32-bitowych, ponieważ zostało to wycofane w wersji 6.0” virtualbox.org/wiki/Downloads . Goście 32-bitowi są nadal obsługiwani.
Piskvor
4

Mam te same problemy.

Wróciłem do poprzedniego jądra. Zobacz: http://karlcode.owtelse.com/blog/2017/03/13/reverting-to-a-previous-kernel/

po tym zainstaluj ponownie wirtualne pudełko i znów działa.

Pozdrawiam Alex

Alex
źródło
Cześć Aleks. Mimo, że prawdopodobnie może to załatwić sprawę, uważam, że jest to zbyt bałaganiarskie i czasami ryzykowne niż obniżenie poziomu VirtualBox, który będzie działał idealnie.
Alberto Martín
4

Wygląda to bardzo podobnie do znanego błędu 1818049 o nazwie „Moduły Virtualbox dkms nie budują się z Linuksem 4.4.0-143.169 [błąd: zbyt wiele argumentów, aby można było użyć funkcji„ get_user_pages ”] .

Prawdziwe działające rozwiązanie byłoby takie samo jak w przypadku problemu TTY - usuń najnowsze jądra i zainstaluj poprzednie dobre ( 4.4.0-138-ogólny wygląda najlepiej dla mnie - USB 3.0 bezpiecznie usunie się zadziała, problem getty będzie nieobecny):

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

i uruchom ponownie później. Musimy więc poczekać na normalne stabilne, dobrze przetestowane jądro.

Ostrzeżenie: nie aktualizuj jądra do wersji 4.4.0-143-generic, jeśli potrzebujesz VirtualBox na gościach i hostach. Subskrybuj błąd 1818049, a po potwierdzeniu poprawki zainstaluj ponownie najnowsze jądro za pomocą sudo apt-get install linux-image-generic linux-headers-generic.

N0rbert
źródło
3

Najłatwiejszą poprawką dla Ubuntu 16.04 jest aktualizacja jądra do tej samej wersji, z której korzysta Ubuntu 18.04, poprzez uruchomienie następującego polecenia:

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

Uruchom ponownie po uruchomieniu powyższej komendy.

Jeśli uruchomisz dkms, nie będziesz musiał ponownie instalować dodatków gości po ponownym uruchomieniu komputera. W przeciwnym razie zainstaluj ponownie dodatki dla gości, a teraz powinno działać dobrze w Ubuntu 16.04

Posiadać
źródło
Dzięki, pracowałeś dla mnie
Jason Morgan
2

Bardzo jak Alberto

  1. sudo /usr/lib/virtualbox/vboxdrv.sh setup (dostaję błędy, ale zatrzymuje VBox ...)
  2. sudo dpkg -l | grep virtualbox (pobierz wersję VBox.)
  3. sudo apt-get purge virtualbox-5.XYZ virtualbox-qt (wersja XYZ od kroku 2)
  4. Zainstalowane z oprogramowania Ubuntu: obniżono wersję do 5.1.38

Gotowy do pracy!

Luis Capriles
źródło
2

Po dość trudnych próbach jego rozwiązania (ani DKMS, ani Synaptics nie wydają się przydatne jako obejście problemu), nie byłem w stanie tego zrobić, więc jako rozwiązanie TYMCZASOWE dla tych, którzy mogą być w tej samej sytuacji i tylko w celu aby móc kontynuować pracę z maszynami-gośćmi, sugeruję obniżyć VirtualBox do wersji oferowanej przez USC.

  • Po prostu odinstaluj aktualną wersję VirtualBox (zrobiłem to przez Synaptics, ale GDebi też idealnie by działało).

  • Zainstaluj wersję VirtualBox USC (za pośrednictwem USC lub Synaptics)

  • Zmień wersję (odinstaluj-zainstaluj) moduł VBoxGuestAdditions na maszynie hosta.

  • Na maszynach gości pamiętaj o obniżeniu wersji VBoxGuestAdditions (włóż starą płytę CD VBoxGuestAdditions i uruchom ją).

Problem / błąd nadal występuje, ponieważ nie pozwala na użycie ostatniej wersji VirtualBox, mam nadzieję, że to pomoże, ale byłbym wdzięczny za najlepsze rozwiązanie, aby móc ponownie zainstalować i używać wersji .deb.

AKTUALIZACJA: Jak dotąd wydaje się, że nie ma ostatecznego rozwiązania, więc w moim przypadku * ten wciąż jest najprostszy. (* Osobiście wolę obniżyć wersję VirtualBox zamiast wracać do poprzednich jąder Ubuntu).

Jeśli jednak z jakiegoś powodu ktoś musi użyć / zainstalować ostatnią wersję VirtualBox, może to zrobić zgodnie z instrukcjami, o których wspominają także inni użytkownicy: https://bugs.launchpad.net/ubuntu/+source/virtualbox/ + błąd / 1818049 / komentarze / 27

Alberto Martín
źródło
1

Widziałem także ten problem. Mam Ubuntu 16.04 LTS. Zaktualizowano do jądra 4.4.0-143. Virtualbox (5.2.14) nie zbudowałby vboxdrv.ko. Zmiana na jądro 4.4.0-142 (a następnie usunięcie -143) rozwiązało problem.

Brian Armstrong
źródło