Compilando el Kernel de Linux en Ubuntu

Compilando el Kernel de Linux en Ubuntu

Hola a todos,

En este post, veremos como compilar el kernel de Linux en Ubuntu.

Desafortunadamente, en las pasadas semanas no ha habido una compilación de las versiones más recientes del Kernel de Linux, que actualmente se encuentra en su versión 6.1.0-rc7. Si vas a la página de los kernels de Linux de Ubuntu, verás que la compilación más reciente exitosa fue del 18 de noviembre. Desde entonces, no ha habido compilaciones y las de estos pasados días también fallaron.

Por lo tanto, estaremos configurando nuestra máquina para poder compilar el kernel de Linux usando el código fuente.

Paso 1: Configurar nuestra máquina

Primero, tenemos que configurar nuestra máquina instalando algunos paquetes esenciales para permitir la compilación del kernel de Linux. Estos paquetes los instalaremos con apt-get:

  • bc
  • bison
  • build-essential
  • fakeroot
  • flex
  • git
  • libelf-dev
  • libssl-dev
  • ncurses-dev
  • xz-utils

Nuestra línea de comando será como la siguiente. El orden de los paquetes no importa:

sudo apt-get install git fakeroot build-essential ncurses-dev x2-utils libssl-dev bc flex libelf-dev bison
Compiling the Linux Kernel - 01

Aceptaremos la instalación de los paquetes presionando la tecla Y seguido por Enter:

Compiling the Linux Kernel - 02

La instalación de los paquetes procederá y deberá terminar sin ningún problema:

Compiling the Linux Kernel - 03

Ahora, tenemos que instalar también el paquete linux-source. Este es necesario porque en él se encuentra el certificado usado en el proceso de compilación para firmar los componentes del kernel. También instalaremos este paquete con apt-get o apt:

sudo apt install linux-source
Compiling the Linux Kernel - 04

Aceptaremos la instalación con la tecla Y, seguido por Enter:

Compiling the Linux Kernel - 05

El paquete se instalará exitosamente:

Compiling the Linux Kernel - 06

Paso 2: Clonando el repositorio Git del código fuente

Ahora, clonaremos el repositorio Git del código fuente del kernel de Linux usando la herramienta git. En este paso, decidí clonar el espejo de GitHub de la cuenta de Linux Torvalds:

git clone https://github.com/torvalds/linux
Compiling the Linux Kernel - 07

Este proceso podrá tomar algún tiempo dependiendo de la velocidad de tu conexión de internet y de la velocidad de tu disco duro. El proceso deberá terminar exitosamente:

Ahora, navegaremos al directorio del repositorio de Linux usando el comando cd linux:

Compiling the Linux Kernel - 11

Paso 3: Copiando la configuración actual del kernel de Linux y cambiando la dirección de los certificados de Canonical

Necesitamos copiar la configuración actual del kernel de Linux. Esto nos permitirá crear la nueva configuración usando los valores de la configuración actual. En caso de que hayan opciones nuevas, se nos preguntará si queremos quedarnos con los valores predeterminados de las mismas o cambiarlas.

Para copiar la configuración del kernel de Linux actual, usamos la siguiente línea de comando

cp -v /boot/config-$(uname -r) .config
Compiling the Linux Kernel - 12

El archivo se debe copiar, y deberías ver algo similar a lo siguiente en el terminal:

Compiling the Linux Kernel - 13

Antes de ejecutar el comando que nos creará la nueva configuración, tenemos que cambiar algunos valores de la configuración antigua. Estos valores deben apuntar a la localización de los certificados de Canonical. Abre tu archivo .config en tu editor de texto favorito y busca estas 2 líneas:

CONFIG_SYSTEM_TRUSTED_KEYS="debian/canonical-certs.pem"
CONFIG_SYSTEM_REVOCATION_KEYS="debian/canonical-revoked-certs.pem"
Compiling the Linux Kernel - 14

Cambiaremos estos valores para que apunten a la localización del paquete linux-source. Actualmente, al día en que este post fue publicado, el paquete linux-source de Ubuntu 23.04 se encuentra en /usr/src/linux-source-5.19.0. Estaremos incluyendo esa parte en la localización de los archivos de esas líneas.

Las líneas se deberán ver así:

CONFIG_SYSTEM_TRUSTED_KEYS=»/usr/src/linux-source-5.19.0/debian/canonical-certs.pem»
CONFIG_SYSTEM_REVOCATION_KEYS=»/usr/src/linux-source-5.19.0/debian/canonical-revoked-certs.pem»

Compiling the Linux Kernel - 15

Guarda el archivo, y ahora estamos listos para generar la nueva configuración.

Paso 4: Generando la nueva configuración

Antes de compilar el kernel, debemos correr el comando make oldconfig. Esto usará el archivo de configuración antiguo y sólo se nos preguntará si aceptar los valores predeterminados en las opciones nuevas o si queremos cambiarlas. Recomendaría dejar las opciones con su valor por defecto.

Primero, ejecutaremos make oldconfig:

Compiling the Linux Kernel - 16

Parece que hay algunos parámetros nuevos en el código fuente más reciente (Actualmente 6.1.0-rc7). Aceptaremos los valores por defecto presionando la tecla Enter:

La configuración nueva será generada:

Compiling the Linux Kernel - 19

Ahora estamos listos para compilar el kernel de Linux.

Paso 5: Compilando el Kernel de Linux

Nota: Este paso es muy intenso y es recomendado hacerlo en una máquina con varios nucleos e hilos. Esto reducirá considerablemente el tiempo de compilación.

Ahora que tenemos nuestro nuevo archivo de configuración, podemos ir hacia adelante y compilar el kernel de Linux usando el siguiente comando:

 make -j $(getconf _NPROCESSORS_ONLN) deb-pkg LOCALVERSION=-daily-20221129

Puedes cambiar el valor de LOCALVERSION a otra cosa que desees. Usé el valor -daily-20221129 porque fue la fecha cuando compilé el kernel. Recomiendo usar este formato de fecha si queremos compilar el kernel diariamente como lo hago. getconf _NPROCESSOS_ONLN nos retorna el número de CPUs disponible. De esta forma, la compilación podrá usar todos los CPUs de nuestro sistema y acelerar el proceso de compilación.

Compiling the Linux Kernel - 20

El Kernel de Linux comenzará a compilarse. Esto tomara entre varios minutos a algunas horas dependiendo de las capacidades y velocidad de tu máquina:

Compiling the Linux Kernel - 21

Una vez el kernel compile, comenzará a crearse unos paquetes .deb. Este proceso parece sólo usar un solo hilo, y por lo tanto, tomará varios minutos para terminar.

Compiling the Linux Kernel - 22

Una vez termine, verás que todo fue exitoso:

Compiling the Linux Kernel - 23

Los archivos .deb se encuentran en la carpeta anterior:

Compiling the Linux Kernel - 24

En este momento, hemos compilado el kernel de Linux de forma exitosa:

Paso 6: Instalar el nuevo kernel de Linux

Para instalar el nuevo kernel de Linux que acabamos de compilar, estaremos usando el comando dpkg para instalar los paquetes .deb:

sudo dpkg -i linux*.deb
Compiling the Linux Kernel - 25

Los paquetes .deb se instalarán exitosamente:

Compiling the Linux Kernel - 26

Ahora reinicia tu máquina, pero en el bootloader de GRUB, asegúrate de seleccionar el nuevo kernel. Este puede que no sea el kernel por defecto de tu sistema dependiendo de su configuración.

Una vez hayas seleccionado el nuevo kernel de Linux en el bootloader de GRUB y tu sistema haya cargado, puedes configurar que el nuevo kernel está en uso usando el comando uname -r:

Compiling the Linux Kernel - 27

¡Y eso es todo! Hemos compilado e instalado nuestro nuevo kernel de Linux

En el próximo post, veremos cómo actualizar el código fuente y compilarlo nuevamente.