¡Esta es una revisión vieja del documento!


Un nuevo Kernel en Debian-12

Logo Debian 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

o tambien puede ejecutar:

# sd MODULES=most  MODULES=dep /etc/initramfs-tools/initramfs.conf
# sd COMPRESS=zstd COMPRESS=xz /etc/initramfs-tools/initramfs.conf

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.

Problemas de Compilacion con Driver NVidia

Cuando compilamos un kernel nuevo y tenemos en nuestro sistema una tarjeta NVidia, lo normal es que al momento de realizar un make install, es dar un error al tratar de instalar ese kernel, independiente del tipo de version que este instalan.

El error que da, es similar a este:

# make install
INSTALL /boot
run-parts: executing /etc/kernel/postinst.d/dkms 6.14.11 /boot/vmlinuz-6.14.11
dkms: running auto installation service for kernel 6.14.11.
Sign command: /lib/modules/6.14.11/build/scripts/sign-file
Signing key: /var/lib/dkms/mok.key
Public certificate (MOK): /var/lib/dkms/mok.pub

Building module:
Cleaning build area...
env NV_VERBOSE=1 make -j36 modules KERNEL_UNAME=6.14.11...(bad exit status: 2)
Error! Bad return status for module build on kernel: 6.14.11 (x86_64)
Consult /var/lib/dkms/nvidia-current/535.247.01/build/make.log for more information.
Error! One or more modules failed to install during autoinstall.
Refer to previous errors for more information.
dkms: autoinstall for kernel: 6.14.11 failed!
run-parts: /etc/kernel/postinst.d/dkms exited with return code 11
make[1]: *** [arch/x86/Makefile:321: install] Error 1
make: *** [Makefile:251: __sub-make] Error 2

Estas enfrentando un problema comun cuando DKMS intenta compilar automaticamente los modulos del controlador NVIDIA tras instalar un nuevo kernel personalizado (en este caso, 6.14.11 en Debian 12). El proceso de make install falla debido a que el modulo de NVIDIA no es compatible o no puede compilarse correctamente con ese nuevo kernel.

El mensaje clave es:

Error! Bad return status for module build on kernel: 6.14.11 (x86_64)
Consult /var/lib/dkms/nvidia-current/535.247.01/build/make.log for more information.

Puedes tratar de ver el error en los log's con el comando:

less /var/lib/dkms/nvidia-current/535.247.01/build/make.log

Y buscar un error como:

  • fatal error: xxxx.h: No such file or directory
  • unknown symbol o problemas de API del kernel

Este log te dira si el modulo necesita parches o si es una incompatibilidad directa.

Solucion que me funciono

Una de las posibilidades de solucion es deshabilitar la compilacion automatica de los modulos (NVidia en este caso) al instalar el kernel, para deshabilitar usamos el comando:

# mv /etc/kernel/postinst.d/dkms /etc/kernel/postinst.d/dkms.disabled

Una vez hecho esto, debemos volver a ejecutar:

# make install

Esto instalara el nuevo kernel sin tratar de compilar de nuevo el modulo de NVidia.

Una vez instalado el nuevo kernel, debemos reiniciar el computador, pero debemos tener en cuenta que el sistema no podra levantar el ambiente grafico porque no hemos instalado los modulos de NVidia.

Una vez que se ha reiniciado, nos presentara un terminal en texto, nos logearemos como root, nuevamente y ejecutaremos en el terminal:

# dkms autoinstall

Esto buscara los modulos de NVidia de la version del kernel-6.14.11 e instalara esos modulos en el nuevo kernel, hay que tener en cuenta que si usamos la ultima version del kernel de linux, es muy posible que los modulos de NVidia, aun no esten liberados para ser instalados en esa version del kernel, asi que hay que tener esto en cuenta.

Si este es tu caso, considera bajar a una version inmediatamente inferior del kernel y repetir el proceso. Es muy posible que ahi ya tengas los modulos liberados para ser instalados.

Ahora deberemos restaurar dkms al terminar este proceso, esto lo hacemos con:

# mv /etc/kernel/postinst.d/dkms.disabled /etc/kernel/postinst.d/dkms

Este dejara habilitada la opción de la compilcion automatica de los modulos para el kernel.

informatica/debian/debian_krn.1749936174.txt.gz · Última modificación: 2025/06/14 21:22 por 127.0.0.1
Recent changes RSS feed Creative Commons License Donate Minima Template by Wikidesign Driven by DokuWiki