vboxdrv.sh: falló: modprobe vboxdrv falló. Utilice 'dmesg' para descubrir por qué

53

Tengo problemas para ejecutar VirtualBox en mi computadora portátil Ubuntu. Mi computadora portátil tiene doble arranque y funciona (Windows 10, creo que no la he usado en años), así como Ubuntu 16.0.4 LTS.

Tengo habilitado el arranque seguro en la configuración del BIOS de mi computadora portátil.

Soy consciente de que hay preguntas similares publicadas aquí, específicamente estas dos:

He seguido todas las instrucciones dadas en las secciones de respuestas para esas dos preguntas; sin embargo, el problema sigue sin resolverse.

Aquí está la salida de la consola, cuando intento ejecutar 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.

Aquí está la salida de la consola cuando ejecuto /sbin/vboxconfigcomo se sugiere:

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.

Aquí está el final de la salida de 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

Ahora, no voy a mentir, no tengo ni idea de lo que dmesg acaba de vomitar, y por lo que puedo decir, no hay mensajes de error en la salida del registro, lo que hace que la situación sea aún más irritante.

¿Alguien ha instalado VirtualBox 5.x en una computadora portátil con Ubuntu 16.0.4 LTS, pero con arranque seguro habilitado en BIOS ? - En caso afirmativo, ¿cuál es la solución? ???!

Mucha gente tiene este problema, incluso hace unos años. Es muy extraño que nadie parezca tener una solución para eso.

Homunculus Reticulli
fuente
2
"Tengo habilitado el arranque seguro en la configuración del BIOS de mi computadora portátil". - Eso puede ser parte de tu problema. Recuerdo hace un tiempo escuchar que el arranque seguro rompió VBox.
Android Dev
Otra pregunta similar: askubuntu.com/questions/760671/…
Dan Dascalescu

Respuestas:

64

VirtualBox + Arranque seguro + Ubuntu = falla

El problema es el requisito de que todos los módulos del kernel deben estar firmados por una clave de confianza del sistema UEFI; de lo contrario, la carga fallará. Ubuntu no firma los módulos del kernel vbox * de terceros, sino que le da al usuario la opción de deshabilitar el Arranque seguro al instalar el paquete virtualbox. Podría hacerlo, pero luego vería un molesto mensaje de "Arranque en modo inseguro" cada vez que se inicia la máquina, y también la instalación de Windows 10 de arranque dual que tengo no funcionaría.

Ubuntu 16.04 en un Dell Latitude E7440 con BIOS A18, y con una instalación de Windows 10 de arranque dual.

El crédito va a la fuente principal de información que utilicé para resolver este problema, que se aplica específicamente a Fedora / Redhat: http://gorka.eguileor.com/vbox-vmware-in-secureboot-linux-2016-update/

Y una pregunta relevante de Ubuntu: no se pudo cargar 'vboxdrv' después de actualizar a Ubuntu 16.04 (y quiero mantener el arranque seguro)

Pasos para que funcione, específicamente para Ubuntu / Debian

  1. Instala el paquete virtualbox. Si la instalación detecta que el Arranque seguro está habilitado, se le presentará el problema en cuestión y se le dará la opción de deshabilitar el Arranque seguro. Elija "No".

  2. Cree un par de claves RSA público / privado personal que se utilizará para firmar los módulos del núcleo. Elegí usar la cuenta raíz y el directorio / root / module-signature / para almacenar todo lo relacionado con la firma de los módulos del 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. Use la utilidad MOK ("Clave del propietario de la máquina") para importar la clave pública para que el sistema pueda confiar en ella. Este es un proceso de dos pasos en el que primero se importa la clave y luego se debe registrar cuando la máquina se inicia la próxima vez. Una contraseña simple es lo suficientemente buena, ya que es solo para uso temporal.

    # mokutil --import /root/module-signing/MOK.der
    input password:
    input password again:
    
  4. Reinicia la máquina. Cuando se inicia el gestor de arranque, la utilidad EFI del administrador MOK debería iniciarse automáticamente. Solicitará partes de la contraseña suministrada en el paso 3. Elija “Inscribir MOK”, luego debería ver la clave importada en el paso 3. Complete los pasos de inscripción, luego continúe con el arranque. El kernel de Linux registrará las claves que están cargadas, y debería poder ver su propia clave con el comando: dmesg|grep 'EFI: Loaded cert'

  5. Usando una utilidad de firma incluida con los archivos de compilación del núcleo, firme todos los módulos de VirtualBox usando la clave MOK privada generada en el paso 2. Lo pongo en un pequeño script /root/module-signing/sign-vbox-modules, para que pueda ejecutarse fácilmente cuando se instalan nuevos núcleos como parte de las actualizaciones regulares :

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

    Y entonces:

    # chmod 700 /root/module-signing/sign-vbox-modules
    
  6. Ejecute el script desde el paso 5 como root. Deberá ejecutar el script de firma cada vez que se instale una nueva actualización del núcleo, ya que esto provocará una reconstrucción de los módulos de VirtualBox de terceros. Use la secuencia de comandos solo después de que se haya iniciado el nuevo kernel, ya que depende modinfo -ny uname -rpara indicar qué versión del kernel debe firmar.

  7. Cargue el módulo vboxdrv y encienda VirtualBox:

    # modprobe vboxdrv
    

El procedimiento también se puede utilizar para firmar otros módulos de kernel de terceros, como los controladores de gráficos nvidia, si es necesario. (No lo he probado yo mismo).

Nota: La respuesta anterior se obtuvo completamente de la publicación del blog de Øyvind Stegard, VirtualBox + Secure Boot + Ubuntu = fail .

Android Dev
fuente
1
Me sale un error: 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
55
Nota sobre 18.04+: el grep sugerido debería leer: dmesg|grep 'EFI:'en lugar dedmesg|grep 'EFI: Loaded cert'
gkephorus
3
Absolutamente no sé y entiendo lo que hace, pero funcionó.
naneri
1
En caso de que sea necesario: tuve este problema sin UEFI o Modo seguro. En mi caso, la instalación de virtualbox-dkms en 18.04.x ​​estaba rota. Mi solución fue: apt purge virtualbox-dkms && apt install virtualbox-dkms && modprobe vboxdrv
gorlok
1
si actualiza virtualbox de 5.2 a 6.0, no olvide completar los pasos 6 y 7 nuevamente.
voleger
12

La respuesta anterior probablemente funciona bien, pero si desea un momento más fácil para ello:

Pude resolverlo

iniciando en el BIOS y yendo> avanzado (f7)> inicio> desplácese hacia abajo para "inicio seguro"> cambie "modo EUFI de Windows" a "otro sistema operativo"

Mi virtualbox funciona perfectamente ahora.

Lee Gildemeester
fuente
2
¿Hay alguna razón por la que no quieras hacer esto?
Taegost
Debido a alguna sobrecarga de energía o algo, mi BIOS se reinició, así que necesitaba hacer esto. Ahora no obtengo el error anterior.
Jamadagni