No se puede ejecutar una VM en VMWare por que los módulos vmmon y vmmet no se pueden cargar.

Otro título sugerido: SecureBoot, la puta que te parió SecureBoot.

Hola, vengo de sobrevivir a esto y me lo voy a agendar por que tengo la sospecha de que si el kernel de Linux se actualiza me va a volver a pasar:

Al ejecutar VMware workstation Player o cualquiera de sus variantes en una computadora que tiene habilitado secureboot (y por consiguiente, todos los módulos y componentes del kernel firmados con una clave privada) via UEFI / Secureboot, la ejecución falla diciendo que el módulo vmmon no está cargado.

Mas específicamente, el mensaje de error reza:

Could not open /dev/vmmon: No such file or directory.
Please make sure that the kernel module `vmmon’ is loaded.

Para uno, que ya está versado en estos menesteres y va la consola a cargar el puto módulo como corresponde, convencido de que todo irá sobre rudas siempre es un ingrato despropósito encontrarse con que no, que no se va a poder:

modprobe vmnet

modprobe: ERROR: could not insert 'vmnet': Required key not available

Y ahí, justo ahí, empiezan tus problemas. Puteás mentalmente a todos los santos y acudís a Google a que te salve las papas. Con un poco de suerte, llegás hasta acá y te explico como seguir.

Foto real de una persona intentando utilizar VMware en Linux. Luego se preguntan por qué la gente odia Linux y prefiere Windows.

Foto real de una persona intentando utilizar VMware en Linux. Luego se preguntan por qué la gente odia Linux y prefiere Windows.

Lo que sigue es eso, como arreglar este problema, como cargar el módulo vmmon (y vmnet, que también vas a necesitar, sólo que todavía no lo sabés) si tu computadora y tu sistema operativo están usando secureboot en Linux y la cosa resulta relativamente sencilla una vez que entendés de que va todo:

El problema es que el kernel no puede cargar el módulo por que no está firmado con la private key del Kernel que no tenés, pero resulta que tampoco la necesitás en realidad, por que podés hacer que secureboot incorpore una segunda private key generada por vos mismo, firmar los módulos que rompan los huevos y listo, ejecutar por fin VMware player.

Como se hace:

Lo primero es usar OpenSSL para generar tu par de claves privada y pública:

openssl req -new -x509 -newkey rsa:2048 -keyout MOK.priv -outform DER -out MOK.der -nodes -days 36500 -subj "/CN=<putoelque.lee>/"

Seguramente quieras cambiar todo lo que está entre brackets: <  > por algo que te resulte mas descriptivo.

Para luego importar tu clave pública y que pueda ser utilizada para leer en el futuro los módulos que vas a firmar con la privada:

mokutil --import MOK.der

Este paso te va a solicitar un password. Este password se lo tenés que proporcionar luego al BIOS de tu computadora para poder importar también la clave pública por lo que es importante que utilices uno fácil de tipear. Acá los paranoicos te dirán además que hay que hacer una copia en un lugar seguro de ambos archivos generados con OpenSSL, MOK.der y MOK.priv por que sino cualquiera podrá cargar módulos en tu computadora y bla bla bla. A nadie le importa.

Luego rebootear, ir a tu bios o boot loader, sección secure boot / MOK enrollment o cualquiera sea la nomenclatura que corresponda  a tu caso e ingresar este password que acabás de generar en el paso anterior.

Y ahora sí, volvés a tu Linux y antes de ejecutar VMWare, ejecutás estos cuatro comandos para primero firmar los dos módulos y luego cargarlos:

/usr/src/linux-headers-4.15.0-36-generic/scripts/sign-file sha256 ./MOK.priv ./MOK.der $(modinfo -n vmmon)

/usr/src/linux-headers-4.15.0-36-generic/scripts/sign-file sha256 ./MOK.priv ./MOK.der $(modinfo -n vmnet)

modprobe vvmon

modprove vmnet

PROFIT

Te sirvió? De nada!

6 comentarios

  1. ejecuto los pasos pero con el comando $mokutil –import MOK.der
    Me genera error: Failed to enroll new keys

    ayuda por favor, gracias

  2. Igual que Jorge:
    Ejecuto los pasos pero con el comando $mokutil –import MOK.der
    Me genera error: Failed to enroll new keys

    ayuda por favor, gracias

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *