Cómo construir e instalar un kernel personalizado en Ubuntu

Imagen destacada del kernel personalizado de Ubuntu

La idea de compilar tus propios kernels infunde miedo en los corazones de los nuevos usuarios de Linux. Suena aterrador, construir la parte más crucial de tu sistema desde cero. La verdad es que, sin embargo, construir el kernel de Linux en Ubuntu es realmente fácil.

Construir kernels de Linux no requiere programación. Algunos de los mejores programadores del mundo ya han escrito todo el código. Solo tienes que elegir las características que deseas y juntar todo. Aquí te mostraremos cómo construir e instalar un kernel personalizado en Ubuntu.

Tabla de Contenidos

  • Obtener las dependencias
  • Obtener la fuente del kernel para Ubuntu
  • Configurando tu construcción
  • Configurando el kernel de Ubuntu
  • Construyendo paquetes del kernel para Ubuntu
  • Instalando el kernel
  • Instalando kernels binarios personalizados
  • Instalando Mainline en Ubuntu
  • Usando Mainline

También lee: Cómo degradar el kernel en Linux

Obtener las dependencias

Antes de que toques un kernel, necesitas las herramientas adecuadas para construirlo. Usa el comando a continuación para descargarlas de los repositorios de Ubuntu.

sudo apt install wget build-essential bison flex libncurses-dev libssl-dev libelf-dev

Obtener la fuente del kernel para Ubuntu

Ahora puedes obtener la fuente que deseas construir. Todos los kernels están disponibles en los repositorios oficiales de Linux. Puedes echar un vistazo a las últimas versiones en su repositorio cdn. En el momento de este artículo, la última es 5.16. Puedes descargar usando los comandos:

cd /home/$USER/  
mkdir kernelbuild  
cd kernelbuild  
wget https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.16.19.tar.xz

Descargar kernel personalizado de Ubuntu

Tomará un tiempo descargar el kernel, así que ten paciencia.

Configurando tu construcción

Comienza tu configuración descomprimiendo el archivo tar del kernel. Luego, copia la configuración de tu kernel existente en él.

tar xavf linux-5.16.19.tar.xz && cd ./linux-5.16.19  
cp /boot/config-`uname -r` .config

Ahora tienes que adaptar la configuración antigua al nuevo kernel.

make oldconfig

Este script te preguntará qué hacer con cada nueva característica. Si deseas usar los valores predeterminados, usa make olddefconfig en su lugar.

También lee: Cómo construir una nueva PC para Linux

Configurando el kernel de Ubuntu

Puedes dejar tu configuración tal como está, y probablemente estarías bien. Sin embargo, no tiene sentido construir un kernel personalizado si no lo vas a personalizar.

Para personalizar tu configuración, ejecuta

make menuconfig

Ejemplo de Makeconfig del kernel personalizado de Ubuntu

Se abrirá un menú azul con una lista de categorías. Esas categorías contienen características que puedes seleccionar para construir en tu kernel.

Ejemplo de Btrfs del kernel personalizado de Ubuntu

Por ejemplo, si realmente deseas construir soporte para el sistema de archivos BTRFS directamente en el kernel y habilitar otras características, irías a “Sistemas de archivos ->”. Luego, desplázate hacia abajo hasta donde veas “Soporte para el sistema de archivos Btrfs.” Selecciona la opción que deseas y presiona la barra espaciadora. La barra espaciadora alterna entre “M”, “*” y vacío.

  • “M” significa que la característica se construirá como un módulo que se cargará si es necesario cuando Ubuntu arranque.
  • “*” significa que la característica se construirá en el kernel y siempre se cargará.

El script no incluye opciones en blanco en el producto final. Cuando termines de configurar las cosas, limpia el directorio.

make clean

Ahora tu kernel está listo para ser construido.

Construyendo paquetes del kernel para Ubuntu

Hay un método en Ubuntu para construir sus kernels, pero te obliga a usar scripts escritos para versiones anteriores. A veces eso está bien; otras veces se rompe horrible. Por lo tanto, generalmente es mejor usar el método más genérico de Linux con GNU make.

make -j `getconf _NPROCESSORS_ONLN`  
make deb-pkg LOCALVERSION=-custom

Todo lo que hace esa línea es compilar el kernel en paquetes .deb usando la cantidad de núcleos de CPU en tu sistema más uno. También agrega “custom” al final de la versión del paquete para diferenciar tu kernel personalizado de otros.

Nota: Puede tomar hora(s) compilar un kernel. Ten paciencia.

Instalando el kernel

Encontrarás tus nuevos paquetes del kernel un directorio arriba. Serán fácilmente identificables por su número de versión. Puedes usar dpkg para instalarlos.

cd ./../  
sudo dpkg -i linux-firmware-image-5.16.19-custom_5.16.19-custom-1_amd64.deb  
sudo dpkg -i linux-libc-dev_5.16.19-custom-1_amd64.deb  
sudo dpkg -i linux-headers-5.16.19-custom_5.16.19-custom-1_amd64.deb  
sudo dpkg -i linux-image-5.16.19-custom-dbg_5.16.19-custom-1_amd64.deb  
sudo dpkg -i linux-image-5.16.19-custom_5.16.19-custom-1_amd64.deb

Cuando la instalación termine, reinicia tu computadora. Ubuntu arrancará automáticamente en tu nuevo kernel. Puedes verificar que lo hizo ejecutando uname -r en una terminal cuando arranque.

Instalando kernels binarios personalizados

Otra forma de usar kernels de Linux personalizados en Ubuntu es instalando una versión binaria precompilada de él. A diferencia de la versión basada en fuente, estas son copias del kernel que ya han sido compiladas para el sistema y la arquitectura que estás ejecutando.

Lista de kernels personalizados de Ubuntu

Además, los kernels binarios personalizados también pueden proporcionarte la flexibilidad de poder saltar entre versiones de kernel para tu instalación de Ubuntu. Esto puede ser especialmente útil si estás ejecutando una máquina con problemas de compatibilidad de hardware y no deseas lidiar con compilar tu propio kernel.

Sabiendo eso, la forma más popular de instalar kernels binarios personalizados es a través de Mainline. Este es un programa GUI desarrollado por bkw777 que tiene como objetivo simplificar el proceso de instalación de un kernel de Linux.

Mainline del kernel personalizado de Ubuntu

En eso, este programa combina todos los pasos que necesitas seguir para descargar y configurar correctamente el kernel. Por ejemplo, Mainline te permite seleccionar fácilmente un binario de kernel y un encabezado que deseas instalar. Luego, mantendrá esta versión en una caché desde donde puedes cargar fácilmente siempre que la necesites.

También lee: 5 herramientas para crear fácilmente una distribución de Linux personalizada

Instalando Mainline en Ubuntu

Con eso, instalar Mainline es relativamente fácil. Primero, necesitas decirle a apt que incluya el repositorio de paquetes de Mainline. Para hacer eso, puedes ejecutar el siguiente comando desde tu Terminal:

sudo add-apt-repository ppa:cappelikan/ppa

Agregar nuevo repositorio de kernel personalizado de Ubuntu

Desde aquí, necesitas actualizar el directorio de paquetes de Ubuntu. Esto permitirá que apt lea desde el repositorio que acabas de agregar y, a su vez, te permitirá descargar Mainline a través de él:

sudo apt update

Con eso, lo único que queda por hacer es instalar Mainline en sí:

sudo apt install mainline

Instalando Mainline del kernel personalizado de Ubuntu

Usando Mainline

Una vez hecho esto, ahora puedes cargar Mainline yendo a tu menú de aplicaciones y buscándolo. El programa Mainline se cargará y mostrará todos los paquetes de kernel que puedes instalar para tu sistema.

Buscar Mainline del kernel personalizado de Ubuntu

Desde allí, puedes seleccionar e instalar la versión del kernel que deseas usar para tu sistema. Por ejemplo, puedo seleccionar “Linux 5.16.19” y hacer clic en Instalar en la barra lateral derecha para cargar completamente esta versión del kernel en mi máquina.

Instalar nuevo kernel personalizado de Ubuntu 1

Por otro lado, también puedo usar Mainline para eliminar los kernels que ya no deseo usar. Por ejemplo, puedo seleccionar “Linux 5.15” y hacer clic en Eliminar en la misma barra lateral derecha para eliminar este kernel de mi sistema.

Desinstalar kernel antiguo personalizado de Ubuntu

Hacerlo de esta manera te permite agregar o eliminar de manera limpia cualquier archivo y binarios que estén vinculados con esa versión del kernel. Esto se debe a que un binario de kernel también incluye las bibliotecas, encabezados y firmware que, a su vez, le permiten funcionar correctamente.

También lee: Cómo solucionar el error de verificación de seguridad del kernel en Windows 10

Preguntas Frecuentes

¿Cuáles son los problemas de ejecutar un kernel personalizado?

Uno de los mayores problemas de ejecutar un kernel personalizado es que estás sacando una pieza vital de tu sistema de las actualizaciones regulares. Esto significa que necesitas instalar manualmente todas las actualizaciones del kernel a partir de este momento. Estas incluyen características de hardware adicionales, así como actualizaciones de seguridad críticas.

Esto puede ser un problema si necesitas un sistema que funcione y se mantenga solo con una intervención mínima del usuario. Como tal, ejecutar un kernel personalizado no solo requiere que sepas qué características del kernel deseas, sino también estar al tanto de las actualizaciones críticas.

¿Hay desventajas en usar un binario de kernel?

Sí. Una de las principales desventajas de usar un binario de kernel es que no tienes control sobre sus características integradas. Esto significa que, a diferencia de un kernel basado en fuente, un binario de kernel no contendrá ninguna optimización y soporte específico de hardware.

Esto significa que si tienes la intención de usar piezas de hardware exóticas con Ubuntu. Necesitarás compilar tu kernel desde cero.

¿Es mejor compilar una característica del kernel como un módulo o como integrado?

Esto depende en gran medida de lo que deseas usar tu kernel. Por ejemplo, compilar una característica como integrada asegurará que se cargue inmediatamente una vez que el kernel se cargue en la memoria. Sin embargo, hacerlo de esta manera aumentará el tamaño total del kernel final.

Mientras tanto, compilar una característica como un módulo la eliminará del kernel base. En su lugar, este módulo se carga una vez que el kernel ya está en memoria. Esto reduce el tamaño del archivo del kernel final, lo que a su vez lo hace rápido y seguro.

Sabiendo eso, es una buena práctica compilar características del kernel como integradas, ya que reduce las posibilidades de cualquier problema de compatibilidad en tu sistema. Sin embargo, también debes tener cuidado de no incluir demasiadas características, ya que hacerlo aumentará significativamente el tamaño total de tu kernel.