¿De qué manera podemos compilar un Kernel y cómo hacerlo sobre una Distro base Debian?

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.

Y cuando se trata de desarrollar y compilar cualquier clase de paquete, aplicación y programa, básico y nativo, como los Kerneles sobre Debian GNU/Linux, los siguientes paquetes son idóneos y necesarios para obtener una buena base de soporte de desarrollo, y estos son:

apt install autoconf automake autotools-dev build-essential dh-make debhelper debmake devscripts dpkg fakeroot file gfortran git gnupg fp-compiler lintian patch pbuilder perl python quilt xutils-dev

-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