En el anterior post de la serie «Kernel Panic Lab» hablamos de como podemos levantarnos máquinas virtuales de laboratorio en nuestra máquina para trastear.
Vimos aquí como se podía crear una máquina virtual y disponer rápidamente de una copia limpia de esta para pruebas.
Por fin para este post ya vamos a presuponer que dispones de una Debian 11 limpia y pasamos a ver como podemos compilarnos el último kernel sobre esa máquina virtual.
En este post vamos a ver la forma de compilar el kernel a la «Debian way».
Paso 01: Obtener la url del último kernel
La web oficial de toda la vida es www.kernel.org/ y allí encontraremos el enlace al último kernel.
En este caso la última versión stable del kernel es la 5.15.1 en el día de escribir esto.
Paso 02: Bajamos el último kernel
Vamos a bajarnos el último kernel así:
$ uname -r
# apt install wget xz-utils
$ wget "https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.15.1.tar.xz"
* Nota: Puedes bajar si quieres un tar.gz en vez de un tar.xz pero tardará más en bajar porque pesa más. Recomendable en este caso tar.xz
Paso 03: Descomprimir el último Kernel
Vamos a descomprimir el empaquetado:
$ tar xfvJ linux-5.15.1.tar.xz
$ du -ha linux-5.15.1
Eso generará un directorio llamado linux-5.15.1 con el kernel descomprimido. Posiblemente puede andar ocupando más o menos 1.2 Gigas
Paso 04: Copiamos la configuración del kernel actual como base para el nuevo
Siguiendo estos pasos por ejemplo:
# cd linux-5.15.1
# apt install make gcc ncurses-dev flex bison devscripts bc rsync libelf-dev libssl-dev dwarves hwinfo
# apt clean
# apt autoclean
# make clean && make mrproper
# cp /boot/config-$(uname -r) ./.config
Eso copiará la configuración en un archivo oculto llamado .config
Paso 05: Cargamos la configuración
Este paso podemos saltarlo. No obstante es buena cosa conocerlo porque es la forma en la que abrimos el menú de la configuración del kernel. La forma en la que podemos cargar módulos, alterar la configuración, dar nuevo soporte a sistemas de archivos que no tenemos actualmente soportados, etc …
# make menuconfig
Y nos vamos abajo con los cursores a la derecha. A «Load«. Cargamos el archivo .config
Luego lo guardamos con save con el nombre .config .
Si te fijas es una tontería pero lo mismo tienes el archivo con otro nombre y por eso es bueno cargarlo y guardarlo.
Por defecto abrirá .config
Podemos hacer cambios si lo necesitamos. Pero de primeras simplemente vamos a compilar un kernel nuevo basándonos en nuestra configuración del actual.
Paso 06: Construimos el kernel (Debian way. Paquetes deb)
Vamos a construir el kernel no sin antes eliminar una línea en el archivo .config que puede darnos guerra (la opción relativa a llaves de confianza del sistema):
# grep -i "CONFIG_SYSTEM_TRUSTED_KEYS" .config
# sed -i '/CONFIG_SYSTEM_TRUSTED_KEYS/d' .config
# make -j$(nproc) deb-pkg clean LOCALVERSION="-fanta"
Una vez termina tendríamos que tener 4 o 5 paquetes debian (deb).
– linux-image-versión: contiene la imagen del núcleo y los módulos asociados.
– linux-headers-versión: contiene los archivos de cabecera necesarios para crear módulos externos
– linux-image-versión-dbg: contiene los símbolos de depuración para la imagen del núcleo y sus módulos
– linux-libc-dev: contiene las cabeceras relevantes a algunas bibliotecas de espacio de usuario como glibc de GNU.
Paso 07: Instalar el nuevo kernel
# dpkg -i ../*.deb
Si todo va bien al reiniciar entraremos al sistema ya con el nuevo kernel. Se puede comprobar con «uname -r».
Y eso es todo. Un saludo cordial.