Tabla de Contenidos
Un nuevo Kernel en Debian-12
Actualmente podemos bajar desde Kernel.org que se encuentra disponible la versión estable, en nuestro caso la versión Kernel-linux-6.15 que procedemos a descargar.
Para poder descargar el código fuente, debemos abrir un terminal logearnos como root, y debemos ejecutar los siguientes comandos:
# cd # mkdir kernel # cd kernel # wget https://cdn.kernel.org/pub/linux/kernel/v6.x/linux-6.15.tar.xz # tar -Jxvf linux-6.15.tar.xz # cd linux-6.15
Una vez que hayamos creado el directorio y tengamos descomprimido la versión del kernel, instalaremos todos los paquetes necesarios para compilar nuestro kernel, con los comandos siguientes:
# apt install build-essential libncurses5-dev fakeroot \ libssl-dev gcc bc bison flex libelf-dev kmod cpio \ rsync python3 -y
Esto nos instalará en nuestro sistema los paquetes y dependencias necesarias para compilar nuestro kernel, por lo que estaremos con nuestras herramientas disponible para lograrlo e instalarlo.
Preparando nuestro sistema
Ahora deberemos de copiar las configuraciones del kernel que tiene nuestro Debian 12, en su kernel por defecto que es la versión linux-6.1.0-37 a la fecha de escritura de esta documentación. Para proceder a copiar la configuración, debemos ejecutar lo sgte:
# cp /boot/config-6.1.0-37-amd64 .config
Una vez con la configuración copiada, lo que recomiendo es sacar la configuración de DEBUG que se encuentra activada por defecto en nuestra configuración del kernel, para ello editamos el archivo que acabamos de copiar y cambiamos las siguientes lineas a:
// Estas variables deben quedar así: CONFIG_DEBUG_INFO=n CONFIG_DEBUG_INFO_BTF=n CONFIG_DEBUG_INFO_BTF_MODULES=n // Haciendo las modificaciones # sd CONFIG_DEBUG_INFO=y CONFIG_DEBUG_INFO=n .config # sd CONFIG_DEBUG_INFO_BTF=y CONFIG_DEBUG_INFO_BTF=n .config # sd CONFIG_DEBUG_INFO_BTF_MODULES=y CONFIG_DEBUG_INFO_BTF_MODULES=n .config
Guardamos y dejamos ambas variables en n⇒no
, de tal forma que en la compilación no generamos información de depuración que nos permite disponer de información en caso de tener una falla.
Ahora podemos agregar soporte de escritura y lectura para los sistemas de archivos de DOS, NTFS, ExFAT para mantener compatibilidad con pendrive que fueron formateados desde MS. Para ello lo que haremos el editar el menú de configuración del kernel:
# make menuconfig File systems --> DOS/FAT/EXFAT/NT Filesystems <*> NTFS Read-Write file system support --> Marcamos todas las opciones
Después solo guardamos y salimos de la configuración del kernel.
Compilando el kernel
Una vez listo el paso anterior, tenemos todo listo para iniciar la compilación del kernel, para ello lo que haremos es detectar la cantidad de núcleos que tenemos disponibles para asignarle al compilador el total de núcleos de nuestra maquina:
nproc // Nos proporciona el numero de procesadores 36 time make -j36 // Compilamos con medición del tiempo de compilación
Esto nos permite iniciar la compilación pero con la captura del tiempo que nos tomará con los recursos que tenemos, por eso hemos puesto el comando time
antes del ṃakẹ -j36
, esto sin duda toma un tiempo y nos debería entregar algo como esto:
real 15m58,730s user 530m22,037s sys 28m51,032s root@athos:~/linux-6.15#
Como podemos observar la compilación nos ha tomado 15 minutos con 58,73 segundos, es decir poco tiempo de compilación, considerando que en otras máquinas mas antiguas y versiones distintas del kernel, tomaba horas.
Integrando los Módulos al nuevo kernel
Ahora lo que procede es integrar al nuevo kernel, los módulos que han sido compilados en el proceso anterior, pero deben ser firmados e integrados a esta nueva versión del kernel, esto lo hacemos con los comandos siguientes:
root@athos:~/linux-6.15# time make modules -j36 mkdir -p /root/linux-6.15/tools/objtool && make O=/root/linux-6.15 subdir=tools/objtool --no-print-directory -C objtool INSTALL libsubcmd_headers CALL scripts/checksyscalls.sh real 0m15,784s user 1m28,815s sys 0m25,654s root@athos:~/linux-6.15#
Ahora lo que procede es firmarlos e instalarlos, esto lo haremos con el comando:
root@athos:~/linux-6.15# time make modules_install -j36 real 0m7,777s user 2m25,998s sys 0m26,824s root@athos:~/linux-6.15#
Instalando el nuevo kernel
Para instalar nuestro kernel debemos ejecutar lo siguiente:
# make install
Con esto debemos tener el nuevo kernel instalado en nuestro sistema, pero antes de reiniciar la maquina, necesitamos realizar un par de cambios importantes
IMPORTANTE: No reinicie su maquina, sin antes realizar los cambios indicados a continuación, ya que si no los hace, su máquina quedará con un mensaje Error: sin memoria al momento de cargar el nuevo kernel.
Modificando el initramfs
Para proceder con estos cambios debemos editar el archivo initramfs.conf
que lo encontramos en /etc/initramfs-tools/initramfs.conf
, debemos cambiar dos variables a:
# nvim /etc/initramfs-tools/initramfs.conf // Valores por defecto: MODULES=most COMPRESS=zstd //Y los debe modificar a: MODULES=dep COMPRESS=xz
Con esto queda resuelto el problema del Error: sin memoria, pero además necesitamos que los cambios sean aplicados:
# update-initramfs -c -k all # update-grub2
Una vez que haya ejecutado como root los comandos precedentes, podrá reiniciar su maquina y esta se iniciará sin problemas, con su nuevo kernel y adaptado a las características de su propia máquina, lo cuan siempre es una ventaja.
Eliminar los kernels antiguos
A medida que vamos actualizando nuestro sistema operativo van quedando instaladas las versiones antiguas del kernel Linux. Aquí veremos como eliminarlos
Para saber cuál es nuestro kernel actual escribimos:
# uname -r
Esto nos muestra la versión del kernel que estamos ejecutando. Para ver el listado de todos los kernels que tenemos instalado en nuestra máquina, ejecutamos como root
en una terminal lo siguiente:
# dpkg --list | grep linux-image # dpkg --get-selections |grep "linux-image\|linux-headers"
Esto nos proporcionará una lista de los kernels que tenemos instalado en nuestro sistema, y deberemos eliminar obviamente los más antiguos que tengamos instalados, en nuestro ejemplo:
# apt remove --purge linux-image-6.1.0-18-amd64 linux-image-6.1.0-21-amd64
Esto eliminará esas versiones específicas de los kernels que teníamos instalado en nuestra maquina. También debemos actualizar el grub2 con el siguiente comando ejecutado con root
# update-grub2
Y finalmente debemos reiniciar nuestra maquina, para que parte con el nuevo kernel que hemos compilado.