Erro do VirtualBox após a última atualização do software (Ubuntu)

19
  • Versão do Ubuntu: 16.04

  • Versão do VirtualBox: 5.2.26

  • Atualizações que "quebraram" algo: aquelas entre a semana passada e hoje (18/03/2019)

Eu executei o Ubuntu Software Updater hoje de manhã, depois de ligar o computador. Depois, tentei iniciar uma máquina Virtual Box (versão instalada via .deb, não a Ubuntu Software Center) e obtive o famoso erro:

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.

Depois de ler sobre problemas semelhantes e entender por que devo fazê-lo, executei-o (mesmos resultados com 'sudo /usr/lib/virtualbox/vboxdrv.sh setup' e outras soluções para problemas / posts semelhantes que encontrei neste site ):

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

Ao ler o .log, vejo que o problema parece estar relacionado à função "get_user_pages" e, neste ponto, sinceramente não tenho idéia de como resolvê-lo.

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

Eu já tentei todas as soluções para problemas semelhantes com essa mensagem de erro, mas nenhuma funciona para mim.

Alguém teve problemas semelhantes após as últimas atualizações do Ubuntu?

ATUALIZAÇÃO: Desinstalei completamente o VirtualBox, reiniciei o sistema, instalei o VirtualBox novamente e continuo com o mesmo erro.

Alberto Martín
fonte
2
Absolutamente. O que eu não entendo é que há pessoas que afirmam que a "versão" anterior do erro será resolvida para Trusty e Xenial em 10 de março e hoje temos uma "nova versão" do problema.
Alberto Martín
Você já experimentou o VB 6.0?
heynnema 18/03
1
Eu vi isso hoje depois de atualizar algumas máquinas host para 4.4.0-143. Um tinha uma versão bastante antiga do VirtualBox (5.0.x) e o outro 5.2.x (portanto, não tão antigo). Após a atualização, nenhum deles iniciaria minhas VMs mostrando o problema do módulo do kernel não instalado. Eu atualizei / reverti para 5.1.38 em ambos, finalmente fazendo com que eles executassem as VMs. No entanto, quando tento instalar adições de convidados em um dos convidados, recebo o erro get_user_pages no arquivo vboxadd-install.log.
cosimo193 18/03
Recebi o mesmo erro recentemente quando tentei instalar o Virtualbox 5.2.18 e, em seguida, a v6.0, meu latop que é um sistema UEFI com inicialização segura, portanto, há uma complicação adicional: o seu é um sistema UEFI, se for permitido saber como eu sei como corrigir esse adn pode fornecer uma solução. Você pode confirmar que seu sistema é UEFI ou não, executando o comando: cd / sys / firmware / efi
Se puder ser útil para qualquer pessoa: há um relatório de bug em bugs.launchpad.net/ubuntu/+source/virtualbox/+bug/1821083
Ganton em

Respostas:

13

A resposta fácil, por enquanto - use o testbuild fornecido pelo Vbox enquanto aguardamos um patch do kernel.

Você pode encontrar a compilação aqui . Você precisará usar os links atuais fornecidos nessa página porque os usados ​​aqui no exemplo foram alterados.

Certifique-se de desinstalar sua versão atual:

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

Instale a versão de teste (altere o URL para corresponder à versão de teste mais recente fornecida pelo virtualbox usando o link acima - 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

Se você precisar do pacote de extensão (altere o URL para corresponder à versão de teste mais recente fornecida pelo virtualbox usando o link acima - 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
fonte
1
Obrigado Robco. Não tive tempo de tentar; Eu desclassifiquei o VirtualBox e, em princípio, esperarei até que seja corrigido ou até o próximo kernel (realmente não preciso da última versão do VirtualBox). No entanto, sua solução me parece a melhor para quem precisa da versão anterior / anterior, na medida em que seja estável. Você já experimentou? É estável?
Alberto Martín
Olá Alberto. Sim, prefiro não fazer o downgrade do kernel e tentei fazer o downgrade do vbox (talvez não tenha voltado o suficiente), mas o driver ainda não pôde ser construído. Fiz isso para 4 usuários e não tive problemas.
Robco 25/03
1
Obrigado pelo feedback Robco. Parece muito bom. Nesse caso, acho que essa é a solução mais elegante para o problema até agora.
Alberto Martín
1
Você pode encontrar as versões de teste mais recentes nesta página: virtualbox.org/wiki/Testbuilds .
Tom Saleeba 15/04
2
Isso tem uma ressalva: "Use também a versão 5.2 se você ainda precisar de suporte para hosts de 32 bits, pois isso foi descontinuado no 6.0" virtualbox.org/wiki/Downloads . Convidados de 32 bits ainda são suportados.
Piskvor 23/04
4

Eu tenho os mesmos problemas.

Voltei ao kernel anterior. Veja isto: http://karlcode.owtelse.com/blog/2017/03/13/reverting-to-a-previous-kernel/

depois disso, reinstale a caixa virtual e ela estará funcionando novamente.

Atenciosamente Alex

Alex
fonte
Oi Alex. Por mais que isso possa provavelmente fazer o truque, acho muito confuso e às vezes arriscado do que apenas desclassificar o próprio VirtualBox, que funcionará perfeitamente.
Alberto Martín
4

Isso parece muito semelhante ao bug conhecido 1818049 chamado "módulos dbox virtualbox falham ao criar com o linux 4.4.0-143.169 [erro: muitos argumentos para funcionar 'get_user_pages']" .

A solução real seria a mesma que para o problema TTY - remova os kernels mais recentes e instale o anterior (o 4.4.0-138-genérico parece melhor para mim - a remoção com segurança do USB 3.0 funcionará, o problema getty estará ausente):

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

e reinicie depois. Portanto, precisamos aguardar o kernel normal e bem testado, estável .

Aviso: não atualize o kernel para 4.4.0-143-generic se você precisar do VirtualBox em convidados e hosts. Assine o bug 1818049 e após a confirmação da correção - instale novamente o kernel mais recente sudo apt-get install linux-image-generic linux-headers-generic.

N0rbert
fonte
3

A correção mais fácil para o Ubuntu 16.04 é atualizar o kernel para a mesma versão que o Ubuntu 18.04 usa executando o seguinte comando:

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

Reinicie após executar o comando acima.

Se você executar dkms, não precisará reinstalar as adições de convidados após a reinicialização da máquina. Caso contrário, reinstale as adições de convidados e agora deve funcionar bem no Ubuntu 16.04

Próprio
fonte
Obrigado, trabalhou para mim
Jason Morgan
2

Muito parecido com o de Alberto

  1. Instalação do sudo /usr/lib/virtualbox/vboxdrv.sh (eu recebo erros, mas para o VBox ...)
  2. sudo dpkg -l | grep virtualbox (obtenha a versão do VBox.)
  3. sudo apt-get purge virtualbox-5.XYZ virtualbox-qt (versão XYZ da etapa 2)
  4. Instalado a partir do Ubuntu Software: foi rebaixado para 5.1.38

Em funcionamento novamente!

Luis Capriles
fonte
2

Depois de tentar bastante resolvê-lo (nem o DKMS nem o Synaptics parecem ser úteis como solução alternativa para o problema), não consegui fazer isso, por isso, como solução TEMPORÁRIA para aqueles que poderiam estar na mesma situação e em ordem para poder continuar trabalhando com máquinas convidadas, sugiro fazer o downgrade do VirtualBox para a versão que a USC oferece.

  • Apenas desinstale a versão atual do VirtualBox (eu o fiz via Synaptics, mas o GDebi também funcionaria perfeitamente).

  • Instale a versão oferecida pelo VirtualBox USC (via USC ou Synaptics)

  • Faça o downgrade (desinstale-instale) o módulo VBoxGuestAdditions na máquina host.

  • Nas máquinas convidadas, lembre-se de fazer o downgrade do VBoxGuestAdditions (insira o CD antigo do VBoxGuestAdditions e execute-o).

O problema / erro ainda está lá, pois não permite usar a última versão do VirtualBox, espero que ajude, mas gostaria de ter uma solução definitiva para poder instalar e usar a versão .deb novamente.

ATUALIZAÇÃO: Até agora, parece que não há solução definitiva, portanto, no meu caso *, este continua sendo o mais simples. (* Pessoalmente, prefiro fazer o downgrade do VirtualBox em vez de voltar aos kernels anteriores do Ubuntu).

No entanto, se por algum motivo alguém precisar usar / instalar a última versão do VirtualBox, poderá fazê-lo seguindo estas instruções, também mencionadas por outros usuários: https://bugs.launchpad.net/ubuntu/+source/virtualbox/ + bug / 1818049 / comentários / 27

Alberto Martín
fonte
1

Eu também vi esse problema. Eu tenho o Ubuntu 16.04 LTS. Ele foi atualizado para o kernel 4.4.0-143. O Virtualbox (5.2.14) não criaria o vboxdrv.ko. A atualização para o kernel 4.4.0-142 (removendo -143) resolveu o problema.

Brian Armstrong
fonte