Compilación de un kernel
Introducción
Para la realización de la practica voy a elegir el kernel 6.4.4 que me he descargado desde el repositorio backports :
Para descargarnos el código fuente usaremos apt source :
Nos creara un directorio con el código fuente
Si listamos el contenido del directorio con el código fuente veremos que la estructura es la misma que para compilar un paquete en C .
Primera compilación
Lo primero que vamos a hacer es usar el fichero .config que tiene cargado nuestro kernel , actualmente el mio tiene 10640 lineas.
A continuación vamos a lanzar la orden make oldconfig para que utilice el fichero actual del kernel que estemos usando .
Si vemos tenemos configurados 2413 módulos de forma estática y 3855 de forma dinámica:
Vamos a pasarle el parámetro localmodconfig , dejare el enter pulsado para que seleccione las distintos parámetros por defecto .
Vemos que con este parámetro hemos bajado significativamente el numero de módulos , ya que con el método usado en el paso anterior solo se utilizan los que tenemos actualmente cargados en el kernel :
Compilaremos el kernel y lo probaremos , en mi caso arranca :
Segunda compilación
Voy a quitar algunos componentes manualmente usando la herramienta make xconfig :
Después de eliminar varios puntos del .config se me ha quedado con :
Ahora vamos a usar un método para compilar el cual nos hará paquetes .deb y utilizaremos 15 núcleos para ello :
Nos generara 4 paquetes .deb en el directorio superior :
Vamos a instalárnoslos , para ello haremos uso de un comodín para instalar todos los .deb :
Por ultimo vamos a asegurarnos de que el kernel se ha instalado :
Firmar un kernel
Como tengo el arranque seguro activado en el portátil sera necesario que firme el kernel para poder arrancarlo .
Así que para ello vamos a seguir los pasos que nos indica debian para realizarlo .
Si deseas saber qué claves están en uso en tu sistema, varias otras llamadas de mokutil te ayudarán, por ejemplo, sudo mokutil –list-enrolled para mostrar la lista actual de claves MOK
Para generarnos unas nuevas keys para firmar el kernel nos crearemos el siguiente directorio :
Vamos a generarnos la clave privada y certificado en formato DER
Ahora vamos a convertir el certificado DER a formato PEM:
Ahora para inscribir una nueva clave MOK, primero emito la solicitud utilizando el comando mokutil. Ejecuto el siguiente comando:
Durante este proceso, se me solicitará ingresar un “one-time password” (contraseña de un solo uso) para confirmar la inscripción. Esta contraseña es crucial para validar y autorizar la operación.
Luego de emitir la solicitud y proporcionar la contraseña, la inscripción de la clave no se completa de inmediato. En lugar de eso, necesito reiniciar el sistema.
Cuando reiniciemos nos aparecerá una pantalla azul , nos dirigiremos a la segunda opción enroll MOK:
Nos dirá si queremos añadir las llaves :
Y nos pedirá que pongamos la contraseña que hemos indicado de un solo uso :
Una vez hecho esto reiniciamos el equipo :
Una vez añadida la llave podemos comprobarlo con el siguiente comando :
Para que DKMS (Dynamic Kernel Module Support) firme automáticamente los módulos del kernel, es necesario indicarle con qué clave debe firmar el módulo. Esto se realiza añadiendo dos valores de configuración al archivo “/etc/dkms/framework.conf”, ajustando las rutas según sea necesario.
Además añadiremos el siguiente script :
El script tendrá el siguiente contenido :
Ahora vamos a definir las variables necesarios para proceder a firmar el kernel , la de versión la hace con uname -r en la documentación de debian pero mis módulos tienen el prefijo 6.4.4 . Puedes comprobarlo en la ruta ls /lib/modules/ .
Ahora vamos a firmar el kernel :
Una vez firmado el kernel podemos reiniciarlo y comprobar que arranca . A mi me ha tardado mas de lo normal al arrancarme pero en 2 min aproximadamente finalmente arranca .