Error de VirtualBox después de la última actualización de software (Ubuntu)

19
  • Versión de Ubuntu: 16.04

  • Versión de VirtualBox: 5.2.26

  • Actualizaciones que han "roto" algo: las de la semana pasada y hoy (18/03/2018)

Ejecuté Ubuntu Software Updater esta mañana, después de encender la computadora. Luego intenté iniciar una máquina Virtual Box (versión instalada a través de .deb, no la Ubuntu Software Center) y obtuve ese famoso error:

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.

Después de leer sobre problemas similares y entender por qué debería hacerlo, lo ejecuté (los mismos resultados con 'sudo /usr/lib/virtualbox/vboxdrv.sh setup' y cualquier otra solución a problemas / publicaciones similares que he encontrado en este sitio ):

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

Al leer el .log, veo que el problema parece estar relacionado con la función "get_user_pages", y en este punto, sinceramente, no tengo idea de cómo resolverlo.

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

Ya he probado todas las soluciones para problemas similares con este mensaje de error, pero ninguna me funciona.

¿Alguien ha tenido problemas similares después de las últimas actualizaciones de Ubuntu?

ACTUALIZACIÓN: desinstalé completamente VirtualBox, reinicié el sistema, volví a instalar VirtualBox y sigo con el mismo error.

Alberto Martín
fuente
2
Absolutamente. Lo que no entiendo es que hay personas que afirman que la "versión" anterior del error se resolverá para Trusty y Xenial este mismo 10 de marzo y hoy tenemos una "nueva versión" del problema.
Alberto Martín
¿Has probado VB 6.0?
heynnema
1
Lo he visto hoy después de actualizar un par de máquinas host a 4.4.0-143. Uno tenía una versión bastante antigua de VirtualBox (5.0.x) y el otro tenía 5.2.x (no tan viejo). Después de la actualización, ninguno de ellos lanzaría mis VM mostrando el problema del módulo del núcleo no instalado. Actualicé / revertí a 5.1.38 en ambos, finalmente conseguí que ejecutaran las máquinas virtuales. Sin embargo, cuando intento instalar adiciones de invitados en uno de los invitados, aparece el error get_user_pages en el archivo vboxadd-install.log.
cosimo193
Recibí el mismo error recientemente cuando intenté instalar Virtualbox 5.2.18 y luego v6.0, mi computadora portátil que es un sistema UEFI con arranque seguro, por lo que hay una complicación adicional, es tuyo un sistema UEFI, si me lo permiten Sé que sé cómo solucionar este problema y puede proporcionar una solución. Puede confirmar que su sistema es UEFI o no ejecutando el comando: cd / sys / firmware / efi
Si puede ser útil para cualquiera: hay un informe de error en bugs.launchpad.net/ubuntu/+source/virtualbox/+bug/1821083
Ganton

Respuestas:

13

La respuesta fácil, por ahora: use el testbuild proporcionado por Vbox mientras esperamos un parche de kernel.

Puedes encontrar la construcción aquí . Deberá usar los enlaces actuales proporcionados en esa página porque los que se usan aquí en el ejemplo han cambiado.

Asegúrese de desinstalar su versión actual:

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

Instale la compilación de prueba (cambie la url para que coincida con la última compilación de prueba proporcionada por virtualbox usando el enlace anterior - 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

Si necesita el paquete de extensión (cambie la url para que coincida con la última versión de prueba proporcionada por virtualbox usando el enlace anterior - 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
fuente
1
Gracias Robco No he tenido tiempo de intentarlo; Bajé la versión de VirtualBox y, en principio, solo esperaré hasta que se solucione o hasta el próximo kernel (realmente no necesito la última versión de VirtualBox). Sin embargo, su solución me parece la mejor para aquellos que necesitan la última / anterior versión, en la medida en que sea estable. ¿Lo has intentado tú mismo? ¿Es estable?
Alberto Martín
Hola alberto Sí, prefiero no degradar el kernel e intenté degradar vbox (tal vez no retrocedí lo suficiente) pero el controlador aún no se pudo construir. He hecho esto para 4 usuarios y no he tenido problemas.
Robco
1
Gracias por los comentarios Robco. Suena muy bien. En ese caso, supongo que esta es la solución más elegante para el problema hasta ahora.
Alberto Martín
1
Puede encontrar las últimas versiones de prueba en esta página: virtualbox.org/wiki/Testbuilds .
Tom Saleeba
2
Esto tiene una advertencia: "Utilice también la versión 5.2 si aún necesita soporte para hosts de 32 bits, ya que se ha descontinuado en 6.0" virtualbox.org/wiki/Downloads . Los invitados de 32 bits todavía son compatibles.
Piskvor
4

Tengo los mismos problemas.

Regresé al kernel anterior. Vea esto: http://karlcode.owtelse.com/blog/2017/03/13/reverting-to-a-previous-kernel/

después de eso reinstale la caja virtual y está funcionando nuevamente.

Saludos Alex

Alex
fuente
Hola Alex. Por mucho que eso pueda hacer el truco, lo encuentro demasiado desordenado y a veces arriesgado que simplemente degradar el VirtualBox, que funcionará perfectamente.
Alberto Martín
4

Esto se parece mucho al error conocido 1818049 llamado "los módulos dkms de virtualbox no se pueden construir con Linux 4.4.0-143.169 [error: demasiados argumentos para funcionar 'get_user_pages']" .

La solución de trabajo real sería la misma que para el problema de TTY : elimine los núcleos más recientes e instale uno bueno anterior ( 4.4.0-138-genérico se ve mejor para mí: la eliminación segura de USB 3.0 funcionará, el problema de 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

y reiniciar después. Por lo tanto, debemos esperar al núcleo normal estable y bien probado .

Advertencia: no actualice el kernel a 4.4.0-143-generic si necesita VirtualBox en invitados y hosts. Suscríbase al error 1818049 y, después de la confirmación de la corrección, instale nuevamente el kernel más reciente sudo apt-get install linux-image-generic linux-headers-generic.

N0rbert
fuente
3

La solución más fácil para Ubuntu 16.04 es actualizar el kernel a la misma versión que usa Ubuntu 18.04 ejecutando el siguiente comando:

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

Reinicie después de ejecutar el comando anterior.

Si ejecuta dkms, no tendrá que reinstalar las adiciones de invitados después de que la máquina se reinicie. De lo contrario, reinstale las adiciones de invitados, y debería funcionar bien ahora en Ubuntu 16.04

Propio
fuente
Gracias, trabajó para mí
Jason Morgan
2

Muy parecido al de Alberto

  1. sudo /usr/lib/virtualbox/vboxdrv.sh setup (obtengo errores, pero detiene VBox ...)
  2. sudo dpkg -l | grep virtualbox (obtenga la versión VBox).
  3. sudo apt-get purge virtualbox-5.XYZ virtualbox-qt (versión XYZ del paso 2)
  4. Instalado desde el software de Ubuntu: degradado a 5.1.38

¡Arriba y corriendo de nuevo!

Luis Capriles
fuente
2

Después de esforzarme bastante por resolverlo (ni DKMS ni Synaptics parecen ser útiles como solución al problema), no he podido hacerlo, por lo tanto, como solución TEMPORAL para aquellos que podrían estar en la misma situación, y en orden para poder seguir trabajando con máquinas invitadas, sugiero degradar VirtualBox a la versión que ofrece USC.

  • Simplemente desinstale la versión actual de VirtualBox (lo hice a través de Synaptics, pero GDebi también funcionaría perfectamente).

  • Instale la versión ofrecida por VirtualBox USC (ya sea a través de USC o Synaptics)

  • Bajar de categoría (desinstalar-instalar) módulo VBoxGuestAdditions en la máquina host.

  • En las máquinas invitadas, recuerde degradar VBoxGuestAdditions (inserte el viejo CD VBoxGuestAdditions y ejecútelo).

El problema / error sigue ahí, ya que no permite usar la última versión de VirtualBox, espero que ayude, pero agradecería una solución definitiva para poder instalar y usar la versión .deb nuevamente.

ACTUALIZACIÓN: Hasta ahora parece que no hay una solución definitiva, por lo que en mi caso * esta sigue siendo la más simple. (* Personalmente, prefiero degradar VirtualBox en lugar de volver a los núcleos de Ubuntu anteriores).

Sin embargo, si por alguna razón alguien necesita usar / instalar la última versión de VirtualBox, podría hacerlo siguiendo estas instrucciones, también mencionadas por otros usuarios: https://bugs.launchpad.net/ubuntu/+source/virtualbox/ + error / 1818049 / comentarios / 27

Alberto Martín
fuente
1

También vi este problema. Tengo Ubuntu 16.04 LTS. Se actualizó al kernel 4.4.0-143. Virtualbox (5.2.14) no construiría vboxdrv.ko. La degradación al kernel 4.4.0-142 (luego la eliminación de -143) resolvió el problema.

Brian Armstrong
fuente