Hace algún tiempo que tengo una Latitude 7490 como mi equipo principal de oficina, la utilizo principalmente para gestionar equipos de storage DELL EMC y varias coas a las cuales ahora estoy enfocado, pero sigo trabajando en Linux Mint 19 como mi distro princial de producción (siempre confiable, siempre funcional, todo listo desde la instalación) pero esta ocasión tuve un problema algo extraño. VirtualBox no arranca y no podría configurar los módulos del Kernel Linux para poder crear/construir los módulos que permiten ejecutar las máquinas virtuales y después de investigar un rato encontré esta solución.
Problemas con VirtualBox 5.2 y Linux Mint 19 con Secure Boot
El síntoma más raro que se presentó fue que al instalar virtualbox mostraba un error parecido a este:
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
Algo similar pasaba entes cuando no se tenían los headers de VirtualBox o que no se habían instalados los paquetes de desarrollo o el build-essential, pero este no fue el caso.
Cuando se intentaba iniciar una máquina virtual se mostraba un error como este:
Seguido de una pantalla que indica que el driver del Kernel no se ha instalado y donde recomienda que ejecutes el comando sudo /sbin/vboxconfig pero que igual genera el error anteriormente descrito.
El problema es que tu instalación de Linux utiliza Secure Boot, al menos en mi caso fue la instalación de Linux Mint 19 usando UEFI y secure boot (esto es una molestia enorme, «its a pain in de ass» dicen los gringos) pero bueno hay que resolverlo.
El post en el que me basé está aquí:
El autor da crédito a otos enlaces y sitios donde existe información que ayudó a crear esta solución, la fuente de información que se usó aplica específicamente para Fedora/Redhat:
http://gorka.eguileor.com/vbox-vmware-in-secureboot-linux-2016-update/
También se utilizó una pregunta muy relevante de Ask Ubuntu:
http://askubuntu.com/questions/760671/could-not-load-vboxdrv-after-upgrade-to-ubuntu-16-04-and-i-want-to-keep-secur
El autor original utilizó Ubuntu 16.04 en una Dell Latitude E7440 con BIOS A18, y con dual boot de Windows 10. Yo utilicé Linux Mint 19 en una Dell Latitude 7490 con BIOS A15 y de igual forma un dual boot con Windows 10 pro y secure boot activado.
Pasos para hacer que VirtualBox funcione en Linux Mint 19 / Ubuntu / Debian
- Instala el paquete virtualbox. Si la instalación detecta que el Secure Boot está activado se mostrará una opción para des habilitar «Secure Boot». Selecciona “No”.
- Crea un key-par público/privado RSA personal, el cual se usará para firmar los módulos del Kernel. Yo seleccioné la cuenta de root para hacer el directorio /root/module-signing/ en el cual se va a almacenar todos lo relacionado al firmado 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=TU_NOMBRE/" [...] # chmod 600 MOK.priv
- Usa la utilería MOK (“Machine Owner Key”) para importar la llave pública y que pueda el sistema tener confianza en esta llave. Este proceso tiene dos pasos, el primero donde la llave es importada y el segundo donde la llave debe ser cargada al momento de que la máquina inicie. Se debe asigna un password simple ya que es para uso temporal.
# mokutil --import /root/module-signing/MOK.der input password: input password again:
- Se debe reiniciar la máquina. Cuando el cargador de arranque inicia, el gestor MOK del gestor EFI debe arrancar de forma automática y deberás indicar que se desea cargar un llave, selecciona la key que has creado y te pedirá el password que has proporcionado en el paso 3. Luego selecciona “Enroll MOK”, y veras la llave que has importado en el paso 3. Completa los pasos del registro de la llave y continua con el arranque de la máquina. El Kernel Linux tendrá registro de la llave que haz cargado y podrás ver tu propia llave con el comando:
dmesg|grep 'UEFI:MokListRT cert'
- Usando una la utilería que se incluye en los archivos de los builts del kernel, firma todos los módulos de VirtualBox usando la llave privada MOK que se generó en el paso 2. Debes crear un pequeño script en
/root/module-signing/sign-vbox-modules
, y puedes ejecutarlo fácilmente cuando se instalen nuevos kernels como parte de las actualizaciones. Agrega este código al script:#!/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
Luego cambia los permisos para hacerlo ejecutable solo por el usuario root
chmod 700 /root/module-signing/sign-vbox-modules
- Ejecuta el script del paso 5 como root. Vas a necesitar ejecutar este script cada vez que haya una actualización del kernel, ya que será necesario reconstruir los módulos de VirtualBox. Usa este script solo después de que haya arrancado la máquina con el nuevo kernel ya que el script se basa en los comandos modinfo -n y uname -r para saber cual kernel firmar.
/root/module-signing/sign-vbox-modules
- Carga el módulo vboxdrv y arranca VirtualBox:
modprobe vboxdrv
Una vez que hayas realizado estos pasos podrás arrancar una máquina virtual de VirtualBox en un Linux mint 19 o Ubuntu 18.04 usando el secure boot.
By jomasonu 06/07/2019 - 11:36 am
Gracias por la info! He instalado virtualbox sobre un linuxmint y el dichoso SecureBoot no me dejaba lanzar los módulos. Directamente lo que hice fue deshabilitar SecureBoot desde BIOS.
Un saludo y gracias!
By Luis Armando Medina 06/13/2019 - 7:36 am
Jomasonu te entiendo es frustrante no saber por que no funciona una VM con Virtualbox, Saludos