La idea de compilar sus propios núcleos genera miedo en los corazones de los nuevos usuarios de Linux. Suena aterrador, construir la parte más crucial de su sistema desde cero. Sin embargo, la verdad es que construir el kernel de Linux en Ubuntu es realmente fácil.
La construcción de kernels de Linux no requiere programación. Algunos de los mejores programadores del mundo ya han escrito todo el código. Solo tiene que elegir las características que desea y ponerlas todas juntas. Aquí le mostraremos cómo construir e instalar un kernel personalizado en Ubuntu.
Obtener las dependencias
Antes de siquiera tocar un kernel, necesita las herramientas adecuadas para construirlo. Use el siguiente comando para descargarlos 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 puede tomar la fuente que desea construir. Todos los núcleos están disponibles en el repositorios oficiales de Linux. Puedes echar un vistazo a los últimos lanzamientos en su repositorio cdn. En el momento de este artículo, la última versión 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
Tomará un tiempo descargar el kernel, así que tenga paciencia.
Configuración para su compilación
Comience su instalación descomprimiendo el archivo tar del núcleo. Luego, copie la configuración de su núcleo existente en él.
tar xavf linux-5.16.19.tar.xz && cd ./linux-5.16.19 cp /boot/config-`uname -r` .config
Ahora debe adaptar la configuración anterior al nuevo kernel.
Este script le preguntará qué hacer con cada función nueva. Si desea utilizar los valores predeterminados, utilice make olddefconfig
en cambio.
Configuración del núcleo de Ubuntu
Puede dejar su configuración como está, y probablemente estará bien. Sin embargo, no tiene sentido crear un kernel personalizado si no lo va a personalizar.
Para personalizar su configuración, ejecute
Se abrirá un menú azul con una lista de categorías. Esas categorías contienen funciones que puede seleccionar para integrarlas en su kernel.
Por ejemplo, si realmente desea crear soporte para el sistema de archivos BTRFS directamente en el kernel y habilitar otras funciones, vaya a «Sistemas de archivos ->». Luego, desplácese hacia abajo hasta donde vea «Compatibilidad con el sistema de archivos Btrfs». Seleccione la opción que desee y presione la barra espaciadora. La barra espaciadora alterna entre «M», «*» y vacío.
- “M” significa que la función se construirá como un módulo que se cargará si es necesario cuando se inicie Ubuntu.
- “*” significa que la función se integrará en el núcleo y siempre se cargará.
El guión no incluye opciones en blanco en el producto final. Cuando haya terminado de configurar las cosas, limpie el directorio.
Ahora su núcleo está listo para construir.
Creación de paquetes de kernel para Ubuntu
Hay un método en Ubuntu para construir sus núcleos, pero lo obliga a usar scripts escritos para versiones anteriores. A veces eso está bien; otros se rompe horriblemente. Por lo tanto, generalmente es mejor usar el método Linux más genérico 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 su sistema más uno. También agrega «personalizado» al final de la versión del paquete para diferenciar su kernel personalizado de otros.
Nota: Puede llevar horas compilar un núcleo. Se paciente.
Instalación del núcleo
Encontrará sus nuevos paquetes de núcleo un directorio hacia 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 finalice la instalación, reinicie su computadora. Ubuntu se iniciará automáticamente en su nuevo kernel. Puede verificar que lo hizo ejecutando uname -r
en una terminal cuando se inicia.
Instalación de núcleos binarios personalizados
Otra forma de usar kernels de Linux personalizados en Ubuntu es instalar una versión binaria precompilada. A diferencia de la versión basada en código fuente, estas son copias del kernel que ya se han compilado para el sistema y la arquitectura que está ejecutando.
Además, los núcleos binarios personalizados también pueden brindarle la flexibilidad de poder saltar entre versiones de núcleo para su instalación de Ubuntu. Esto puede ser especialmente útil si está ejecutando una máquina con problemas de compatibilidad de hardware y no quiere lidiar con la compilación de su propio kernel.
Sabiendo eso, la forma más popular de instalar núcleos binarios personalizados es a través de Línea principal. Este es un programa GUI desarrollado por bkw777 que tiene como objetivo agilizar el proceso de instalación de un kernel de Linux.
En eso, este programa combina todos los pasos que debe seguir para descargar y configurar correctamente el kernel. Por ejemplo, Mainline le permite elegir fácilmente un binario de kernel y un encabezado que desea instalar. Luego mantendrá esta versión en un caché desde donde puede cargar fácilmente cuando lo necesite.
Instalación de línea principal en Ubuntu
Con eso, instalar Mainline es relativamente fácil. Primero, debe decirle a apt que incluya el repositorio de paquetes de Mainline. Para hacer eso, puede ejecutar el siguiente comando desde su Terminal:
sudo add-apt-repository ppa:cappelikan/ppa
Desde aquí, debe actualizar el directorio de paquetes de Ubuntu. Esto permitirá que apt lea desde el repositorio que acaba de agregar y, a su vez, le permitirá descargar Mainline a través de él:
Con eso, lo único que queda por hacer es instalar Mainline:
sudo apt install mainline
Usando la línea principal
Una vez hecho esto, ahora puede cargar Mainline yendo a su Menú de aplicaciones y buscándolo. El programa Mainline cargará y mostrará todos los paquetes del núcleo que puede instalar para su sistema.
Desde allí, puede seleccionar e instalar la versión del kernel que desea usar para su 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.
Por otro lado, también puedo usar Mainline para eliminar los núcleos que ya no quiero 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.
Hacerlo de esta manera le permite agregar o eliminar limpiamente cualquier archivo y binario que esté vinculado con esa versión del kernel. Esto se debe a que un kernel binario también incluye las bibliotecas, los encabezados y el firmware que, a su vez, le permite funcionar correctamente.
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á eliminando una parte vital de su sistema de las actualizaciones periódicas. Esto significa que debe instalar manualmente todas las actualizaciones del kernel a partir de este momento. Estos incluyen funciones de hardware adicionales, así como actualizaciones de seguridad críticas.
Esto puede ser un problema si necesita un sistema que se ejecute y se mantenga solo con una intervención mínima del usuario. Como tal, ejecutar un kernel personalizado no solo requiere que sepa qué características del kernel desea, sino que también debe estar al tanto de las actualizaciones críticas.
¿Hay alguna desventaja en usar un kernel binario?
Sí. Una de las principales desventajas de usar un kernel binario es que no tiene ningún control con sus funciones integradas. Esto significa que, a diferencia de un kernel basado en código fuente, un kernel binario no contendrá ninguna optimización ni soporte específico del hardware.
Esto significa que si tiene la intención de usar piezas exóticas de hardware con Ubuntu. Necesitará compilar su kernel desde cero.
¿Es mejor compilar una característica del kernel como un módulo o como una función integrada?
Esto depende en gran medida de para qué quiera usar su núcleo. Por ejemplo, compilar una característica como integrada garantizará 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 función como módulo la eliminará del kernel base. En cambio, este módulo se carga una vez que el núcleo ya está en la memoria. Esto reduce el tamaño del archivo del núcleo final que, a su vez, lo hace rápido y seguro.
Sabiendo eso, es una buena práctica compilar las funciones del kernel como una función integrada, ya que reduce las posibilidades de que surjan problemas de compatibilidad en su sistema. Sin embargo, también debe tener cuidado al incluir demasiadas funciones, ya que al hacerlo aumentará significativamente el tamaño total de su kernel.