Cómo compilar el núcleo de Vanilla Linux de la fuente en Fedora

Cómo compilar el núcleo de Vanilla Linux de la fuente en Fedora

El kernel es el componente más importante de un sistema operativo: entre las otras cosas, proporciona soporte para diferentes tipos de hardware y administra las asignaciones de recursos.

Linux es un núcleo monolítico: aunque sus funcionalidades se pueden incluir estáticamente o construirse y cargarse como separados módulos, siempre se ejecuta como una "pieza única" en el mismo espacio de dirección. En este tutorial veremos cómo descargar, compilar e instalar un kernel de vainilla Linux. Las instrucciones proporcionadas deben funcionar en todas las distribuciones de Linux, sin embargo, esta guía se centra en compilar el núcleo en un sistema Fedora.

En este tutorial aprenderás:

  • Cómo configurar, compilar e instalar un kernel de vainilla Linux
  • Cómo empaquetar el núcleo compilado y sus módulos


El menú de configuración basado en NCurses para el kernel de Linux

Requisitos y convenciones de software utilizados

Requisitos de software y convenciones de línea de comandos de Linux
Categoría Requisitos, convenciones o versión de software utilizada
Sistema Fedora
Software
  • GCC
  • doblar
  • hacer
  • bisonte
  • de-devel de OpenSSL
  • elfutils-libelf-devel
  • nCurses-Devel (necesario para usar el menú basado en NCurses para configurar el núcleo)
  • QT-Devel (necesario para usar la interfaz gráfica QT para configurar el núcleo)
  • RPM-Build (necesario para empaquetar el núcleo en formato RPM)
Otro Los permisos de raíz para instalar las dependencias necesarias y el kernel compilado
Convenciones # - requiere que los comandos de Linux dados se ejecuten con privilegios raíz directamente como un usuario raíz o mediante el uso de sudo dominio
ps - Requiere que los comandos de Linux dados se ejecuten como un usuario regular no privilegiado

Instalación de las dependencias

Para poder compilar el kernel de Linux de la fuente, necesitamos instalar algunos paquetes en nuestro sistema:

$ sudo dnf instalación gcc flex make bison openssl-devel elfutils-libelf-devel


Los anteriores son solo los paquetes 'centrales' que necesitamos. Para invocar objetivos de configuración específicos se deben instalar algunos paquetes adicionales: el ncurses-devel y QT-devel Los paquetes, por ejemplo, son necesarios para configurar el uso del núcleo, respectivamente, de la interfaz gráfica basada en NCurses y QT, mientras que la construcción de rpm Se necesita un paquete para construir una RPM que contenga el núcleo compilado.

Descargar el Tarball de origen

Como lo primero, necesitamos obtener el tarball que contiene las últimas fuentes estables de núcleos Linux. Podemos descargar y extraer el tarball con solo un comando:

$ curl https: // cdn.núcleo.org/pub/linux/kernel/v5.X/Linux-5.1.5.alquitrán.xz | tar -xj

Al final del proceso de descarga, dentro de nuestro directorio de trabajo actual, debemos encontrar una nueva carpeta que contenga el código fuente del núcleo. Necesitamos ingresarlo, en este caso:

$ CD Linux-5.1.5

En este punto podemos configurar el núcleo. En el próximo párrafo, echaremos un vistazo a los objetivos de configuración más comunes utilizados para realizar la tarea.

Configuración del núcleo

Hay varias formas en que podemos configurar el núcleo, y corresponden a diferentes objetivos de configuración. Cuando se invoca un objetivo de configuración, si se llama un archivo .configuración Contiene una configuración de núcleo válida en el directorio de fuentes, se utiliza como punto de partida para la configuración. Esto hace que sea posible actualizar o modificar una configuración ya existente, tal vez la que viene con el núcleo instalado de forma predeterminada en nuestra distribución (se puede encontrar dentro del /bota directorio, llamado así por el núcleo en uso).

Si no se encuentra el archivo, la configuración comenzará desde cero y el .configuración El archivo se generará una vez que guardemos nuestra configuración. Veamos algunos de los objetivos de configuración nosotros podemos usar:

configuración

Si se invoca este objetivo, se le solicita al usuario que configure el núcleo respondiendo una serie de preguntas, de la siguiente manera:

* * Linux/x86 5.1.5 Configuración del núcleo * * * Compilador: GCC (GCC) 9.1.1 20190503 (Red Hat 9.1.1-1) * * * * Configuración general * Compilar también controladores que no se cargarán (compile_test) [n/y/?] 

menuconfig

Este objetivo utiliza un agradable y fácil de usar ncurses interfaz para permitirnos generar o actualizar la configuración del kernel. Como se dijo antes, para poder usar esta interfaz de la ncurses-devel El paquete debe instalarse en el sistema.



La configuración basada en NCurses Inteface

Usando esta interfaz, podemos presionar el H Clave Al resaltar una opción específica para obtener información y sugerencias al respecto:



Obtener información sobre una opción es solo una cuestión de seleccionarla y presione la tecla H presionando Y en una opción lo incluirá en el kernel estáticamente (la opción se marcará con un *), presionando norte lo excluirá y presionará el METRO La clave lo incluirá como un módulo (la opción se marcará con un METRO). Para buscar una opción específica, podemos usar el / clave y proporcionar la cadena o regex para buscar:

La interfaz NCurses para buscar una opción específica

xconfig

Al invocar este objetivo, es posible configurar el núcleo a través de una interfaz gráfica basada en el QT kit de herramientas si el QT-devel El paquete está instalado en el sistema.



La interfaz de configuración basada en QT

OldConfig

Este objetivo es útil cuando queremos usar una configuración de kernel ya existente como punto de partida. Cuando invocamos este objetivo, se nos solicita que configuremos solo las características disponibles en el kernel que estamos configurando pero no incluidas en el archivo de configuración original.

localmodconfig

Invocar este objetivo generará o actualizará un nuevo archivo de configuración del kernel en la base de los módulos que actualmente se cargan en el sistema. Solo ellos se incluirán en la configuración, los otros estarán deshabilitados. Esto se puede usar como una forma rápida de obtener un núcleo a medida basado en el estado actual de una máquina.

localyesconfig

Este objetivo funciona de manera similar a localmodconfig Con una gran diferencia: las funcionalidades proporcionadas por los módulos cargados actualmente en el sistema se incluirán estáticamente en el núcleo.

Compilación e instalación del núcleo

Una vez que terminamos de configurar el kernel, podemos compilar el código fuente. Todo lo que tenemos que hacer es ejecutar:

$ make


La operación puede tomar un tiempo, dependiendo de las características que decidimos incluir en el núcleo. Para acelerar el proceso que podemos ejecutar hacer con el -j opción y especifique el número de trabajos para ejecutarse simultáneamente: un valor que se usa a menudo para esta opción es el número de núcleos de CPU lógicos + 1. En una máquina con 4 núcleos lógicos, por lo tanto, ejecutaríamos:

$ make -j5

Una vez compilado, para instalar el núcleo simplemente podemos ejecutar:

$ sudo make install

Los archivos de núcleo de kernel se copiarán dentro del /bota directorio. Para compilar e instalar los módulos del núcleo, en su lugar, podemos ejecutar:

$ sudo hacer módulos_install

Los módulos del núcleo se instalarán en un directorio en /lib/módulos llamado así por la versión del núcleo. Finalmente, para que el nuevo kernel esté disponible y seleccionable en el arranque, debemos regenerar la configuración de grub:

$ sudo grub2 -mkconfig -o/boot/grub2/grub.CFG

Embaquear el núcleo

En lugar de instalar el núcleo compilado directamente como lo hicimos anteriormente, para poder administrar su instalación y eliminación a través del administrador del paquete del sistema, podemos crear un paquete de rpm. Para realizar la tarea debemos usar una entre el rpm-pkg y binrpm-pkg objetivos. El primero construirá los paquetes de rpm de origen y binario, el segundo solo el binario. Para que este objetivo se ejecute correctamente, el construcción de rpm Se debe instalar el paquete. Para construir solo el paquete Binario RPM, ejecutaríamos:

$ make binrpm-pkg

Si las operaciones se realizan sin errores, el rpmbuild Directory Tree se creará en nuestro directorio de inicio. El paquete RPM construido estará disponible en un subdirectorio de ~/rpmbuild/rpms llamado por la arquitectura del sistema.

Otra opción es empaquetar el núcleo y sus módulos dentro de un tarball comprimido, utilizando uno entre el Targz-PKG, tarbz2-pkg y tarxz-pkg objetivos, dependiendo de la compresión que queramos usar. El tarball se creará dentro del directorio fuente del kernel.



Conclusiones

En este tutorial aprendimos a saber por qué Linux se llama núcleo monolítico, y cómo sus componentes se pueden configurar estáticamente o como módulos. Vimos cómo descargar un núcleo de vainilla y los diversos métodos que podemos usar para configurarlo. Finalmente, vimos cómo compilarlo, empaquetarlo e instalarlo en nuestro sistema. Un último consejo: si decides volver a compilar el núcleo, siempre es una buena idea invocar a uno de los objetivos de limpieza antes de continuar:

  • limpio: Elimina la mayoría de los archivos generados, pero mantenga la configuración y suficiente soporte de compilación para crear módulos externos
  • mrproper: Elimina todos los archivos generados + config + varios archivos de copia de seguridad
  • rico: Ejecuta MRProper y también elimina los archivos de copia de seguridad y parche del editor

Tutoriales de Linux relacionados:

  • Cosas para instalar en Ubuntu 20.04
  • Cosas que hacer después de instalar Ubuntu 20.04 fossa focal Linux
  • Una introducción a la automatización, herramientas y técnicas de Linux
  • Descarga de Linux
  • Archivos de configuración de Linux: los 30 principales más importantes
  • Cosas que hacer después de instalar Ubuntu 22.04 Jellyfish de Jammy ..
  • Mint 20: Mejor que Ubuntu y Microsoft Windows?
  • ¿Puede Linux obtener virus?? Explorando la vulnerabilidad de Linux ..
  • Cosas para instalar en Ubuntu 22.04
  • Cómo arrancar dual Kali Linux y Windows 10