Compilar un Kernel: ¿Cómo hacerlo sobre una Distro base Debian?
En nuestra entrada anterior, llamada “El Kernel de Linux: Lo básico sobre el núcleo” abordamos algunas bases teóricas esenciales sobre los Kerneles de los Sistemas Operativos, en general; y el Kernel de Linux, en específico.
Y como expresamos en la misma, en esta, estaremos completando dichas bases teóricas esenciales con otros conceptos e informaciones importantes, además de mostrar el procedimiento actual para lograr «compilar un Kernel» de Linux desde cero, sobre una Distribución Debian GNU/Linux 11 (Bullseye) o basada en ella.
Y, antes de iniciar la lectura de este post sobre «compilar un Kernel» de Linux en general, dejaremos unos enlaces a anteriores publicaciones relacionadas para su posterior lectura:
Compilar un Kernel: Tutorial de compilación
¿Qué significa compilar un programa?
Básicamente, este proceso técnico (también llamado empaquetamiento) consiste en lograr la conversión del código fuente de un programa o porción de un software, desde su origen (lenguaje de programación usado para escribirse) hasta un producto legible (lenguaje de programación de alto nivel interpretable) por un ordenador.
Es decir, lograr su transformación desde su código fuente hasta volverlo un programa ejecutable y funcional, mediante el uso de un procesador (software compilador) para la conversión del lenguaje de programación utilizado hacia un código de tipo binario y ensamblador.
Ventajas y desventajas de compilar desde cero un Kernel de Linux
Cuando compilamos y configuramos personalizadamente, desde cero, un Kernel específico para un determinado ordenador, podemos obtener las siguientes ventajas:
- Lograr un mejor rendimiento y un menor consumo de CPU.
- Obtener una mejor optimización y un menor consumo de Memoria RAM.
- Mejorar la capacidad de adaptación y de compatibilidad del sistema operativo.
- Aumentar la eficiencia y la productividad del sistema operativo.
Mientras que, por el contrario, pudiéramos generar las siguientes Desventajas:
- Fallas de operatividad y disponibilidad de los recursos y servicios deseados sobre el ordenador empleado, debido a malas configuraciones y problemas ocasionados durante la compilación.
- Un trabajo constante, largo y tedioso al principio para generarlo, y luego a posterior, para mantenerlo actualizado de forma manual. El cual puede ir, desde minutos a horas, dependiendo del hardware empleado.
- Largas horas de estudio y pruebas, ya que, se necesita un alto nivel de conocimiento tanto sobre las opciones de configuración disponibles en el Kernel como del ordenador (hardware final), donde se ejecutará.
Categorías de Kerneles disponibles
Para compilar un Kernel, lo primero que debemos saber es qué Kernel escoger. Para ello, debemos ir al sitio web oficial de los Kerneles, y escoger uno entre las categorías existentes. Las cuales son las siguientes:
- Línea principal de desarrollo (Mainline): Esta categoría incluye a aquellos Kerneles en etapa de desarrollo, por lo que, contienen nuevas características y funciones que deben probarse antes de que se puedan poner en una versión estable. Estos son mantenidos y liberados directamente por Linus Torvalds, y suelen publicarse cada 2 o 3 meses en promedio.
- Estable (Stable): Esta categoría incluye a aquellos Kerneles que, luego de pasar las pruebas del largo proceso de desarrollo, se convierten en estables, por lo que, solo están sujetos a correcciones a través de un mantenedor oficial designado. Además, solo tienen pocas versiones de corrección de errores hasta que el siguiente Mainline esté disponible.
- Largo plazo (Longterm): Esta categoría incluye a aquellos Kerneles que, luego de pasar las pruebas del largo proceso de desarrollo, se convierten en estables, pero cuentan con un soporte de correcciones de errores y mantenimiento por un tiempo sumamente largo (años). Razón por la cual, se le aplican correcciones de errores importantes, las cuales pueden llegar a ser muy frecuentes.
¿Cómo compilar un Kernel en una Distro GNU/Linux Debian Bullseye?
Habiendo elegido una versión específica de Kernel, en la web oficial, y ya conociendo (copiando) su ruta de descarga a través del botón Tarball de la misma, solo queda realizar el siguiente procedimiento, el cual mostraremos tomando como ejemplo, el Kernel de Linux estable versión 6.0.8:
Etapa 1
cd /usr/src
wget -c https://mirrors.edge.kernel.org/pub/linux/kernel/v6.x/linux-6.0.8.tar.xz
sudo unxz linux-6.0.8.tar.xz
sudo tar xvf linux-6.0.8.tar
sudo ln -s linux-6.0.8 linux
cd /usr/src/linux
sudo make clean && make mrproper
sudo cp /boot/config-`uname -r`* .config
make menuconfig
Al ejecutar este último comando, se inicia el «Menú de configuración del Kernel», donde se podrá configurar (personalizar) los parámetros de su preferencia o necesidad. Además, aquí es fundamental no olvidar que, es necesario marcar o desmarcar la opción de 64-bit kernel, dependiendo de lo que se desee o requiera. Y también, luego de haber realizado todos los cambios hechos, se debe presionar el Botón Salvar (Save) y luego el Botón Salir (Exit).
Etapa 2
Llegado a este punto quedan 2 caminos posibles a tomar:
Solo instalación del Kernel
sudo make
sudo make modules_install
sudo make install
sudo update-grub; sudo update-grub2; sudo update-initramfs -u
sudo apt clean; sudo apt autoclean; sudo apt autoremove; sudo apt remove; sudo apt purge
Instalación del Kernel y generación de archivos .deb
Para ejecutar este paso, es relevante contar con la instalación del paquete llamado Kernel-package. Por ello, el procedimiento es el siguiente e inicia de la siguiente forma:
sudo wget -c http://ftp.us.debian.org/debian/pool/main/k/kernel-package/kernel-package_13.018+nmu1~bpo9+1_all.deb
sudo apt install ./kernel-package_13.018+nmu1~bpo9+1_all.deb
fakeroot make-kpkg --initrd --append-to-version=-custom kernel_image kernel_headers
cd /usr/src
sudo dpkg -i *.deb
En caso de que, durante el proceso de compilación, se obtenga un error relacionado con los certificados del Kernel, queda como opción el poder ejecutar la siguiente orden de comando para solucionarlo automatizadamente:
sed -i '/CONFIG_SYSTEM_TRUSTED_KEYS/s/^/#/g' .config
Sí, todo ha terminado bien, solo queda reiniciar nuestro ordenador y probar como levanta nuestro sistema operativo con el nuevo Kernel. Tal como se muestra él antes y después, en los siguientes pantallazos:
Antes de la instalación del Kernel
Después de la instalación del Kernel
Resumen
En resumen, esperamos que este tutorial sea de mucha utilidad, tanto para usuarios avanzados como a Desarrolladores de Distros o Respines. Los cuales, suelen requerir «compilar un Kernel» especifico sobre un Sistema Operativo GNU/Linux actualmente instalado o uno que se esté generando desde cero, para lograr incorporar, un mejor rendimiento y optimización sobre un hardware específico. Mayormente, con el objetivo de lograr, un menor consumo de CPU y Memoria RAM.
Aunque, si alguno conoce alguna otra útil forma de realizar dicho procedimiento o conoce alguna sugerencia, recomendación o corrección a lo aquí aportado, bienvenido es a hacerlo a través de los comentarios. Y sí, simplemente te ha gustado esta publicación, no dejes de comentarla y de compartirla con otros. Además, recuerda visitar nuestra «página de inicio» para explorar más noticias, además de unirte a nuestro canal oficial de Telegram de DesdeLinux, o este grupo para más información sobre el tema de hoy.