Continuando y complementando nuestra anterior publicación llamada: Todo sobre el Kernel de Linux: ¡Feliz cumpleaños número 28!, en esta segunda parte nos centraremos mayoritariamente sobre el «proceso de compilación» de un «Kernel de Linux» sobre una «Distribución DEBIAN» o una basada en está.

Y resumiendo parte de la idea central del anterior artículo, es bueno dejar en claro que, mientras el Kernel es solo una pieza más, un elemento central y unificador (núcleo) dentro de un «Sistema Operativo», este último puede definirse, en términos generales como, la totalidad empaquetada y distribuida de cierta cantidad de «Software de Sistemas (Kernel+Controladores+Utilitarios)» y de «Software de Aplicaciones (Programas de Usuario)». Lo que muchas veces se conoce en el mundo del «Software Libre» como «GNU/Linux», pero que se suele abreviar simplemente como «Linux», ya sea por comodidad, desconocimiento o falta de valoración positiva al aporte de la «Comunidad GNU» al éxito de «Linux».

Kernel de Linux: Compilar

¿Qué significa compilar?

Es el proceso de traducción del «Código fuente» (Líneas de código) de un programa o elemento de software, desde el lenguaje de programación usado para escribirse hasta un lenguaje de programación de alto nivel interpretable por el CPU y/o Equipo de Computación. En otras palabras, es el proceso de transformar el «Código Fuente» de un software en un «Programa ejecutable» funcional, mediante el uso de un procesador para la conversión del lenguaje de programación usado hacia un código de tipo binario y ensamblador.

Kernel de Linux: Proceso de Compilación

A este proceso, también se le suele conocer con el nombre de empaquetamiento. Y a los programas destinados a realizar dicha tarea de traducir código de programación a código ejecutable por las máquinas como «Compilador», de los cuales hay muchos para cada tipo de lenguaje de programación usado.

Ventajas y desventajas de compilar un Kernel de Linux

Si compilamos un «Kernel de Linux», preferiblemente sobre el Hardware final donde será usado, se pueden conseguir estas «Ventajas»:

  • Mejor rendimiento sobre el Hardware final que puede producir un menor consumo de CPU.
  • Mejor optimización sobre el Hardware final que puede producir un menor consumo de Memoria RAM.
  • Mejor adaptación y compatibilidad sobre el Hardware final que puede aumentar la eficiencia y la productividad.

Si compilamos un «Kernel de Linux», preferiblemente sobre el Hardware final donde será usado, se pueden conseguir estas «Desventajas»:

  • El trabajo constante, largo y tedioso que requerirá a posterior, el mantenerlo actualizado de forma manual.
  • El tiempo invertido, presencial o no, que suele estar entre 15 minutos y 1 hora, y que depende del Hardware utilizado.
  • El nivel de conocimiento requerido sobre el Hardware final, ya que de eso dependerá, el éxito del buen desempeño del nuevo Kernel.
  • El nivel de conocimiento requerido sobre el proceso de compilación, que suele estar entre medio y alto, ya que es un proceso critico que puede causar fallas de operatividad y disponibilidad de los recursos y servicios prestados por el Hardware final.
Kernel de Linux: Ventajas y Desventajas de Compilar un Kernel

Si usamos un «Kernel de Linux» pre-compilado desde los repositorios, se pueden conseguir estas «Ventajas»:

Content PC
  • Una tarea que no requiere mayores niveles de conocimientos técnicos sobre la materia.
  • Un proceso de instalación rápido y automatizado, programado por la comunidad experta de la Distro.
  • Un proceso de instalación fácil y seguro de realizar, al igual que al actualizarlo y/o desinstalarlo.

Si usamos un «Kernel de Linux» pre-compilado desde los repositorios, se pueden conseguir estas «Desventajas»:

  • Un Kernel final genérico que no está optimizado para nuestro Hardware final ha usar.
  • El Kernel final genérico que tendrá un leve consumo superior al compilado, en la mayoría de los casos.
  • El Kernel final genérico que tendrá un leve rendimiento inferior al compilado, en la mayoría de los casos.
Kernel de Linux: Novedades del Kernel 5.2.10

Novedades de la rama estable 5.2

Al momento de desarrollar este artículo, la serie actual del «Kernel de Linux» es la «número 5.2», siendo la «versión 5.2.10», la que se encontraba oficialmente disponible en el sitio web oficial de «Kernel.org». Por lo que, está será la que utilizaremos para ejecutar el «proceso de compilación» a explicar.

Aunque, para el día de publicación del mismo, ya estará oficialmente disponible, la versión «número 5.2.13». Siendo destacable para esta rama del «Kernel de Linux», el que fue lanzada con la promesa de proporcionar «100% de libertad», es decir, un «Kernel de Linux» que no incluya ningún controlador propietario o cualquier otro código que no sea totalmente de «código abierto».

Esta serie 5.2 al ser lanzada contó con las siguientes novedades destacables:

  • Innumerables correcciones de errores y seguridad.
  • Mejoras de rendimiento del programador de E/S BFQ.
  • Nueva API relacionada con el montaje de Sistemas de Archivos.
  • Nuevos controladores de GPU de código abierto para dispositivos ARM Mali.
  • Inclusión de Sound Open Firmware para el soporte de dispositivos de audio DSP.
  • Nueva infraestructura de errores de CPU contra las vulnerabilidades de hardware de Intel MDS.
  • Soporte para nombres que no distinguen entre mayúsculas y minúsculas en el sistema de Archivos EXT4.
  • Inclusión de docenas de controladores nuevos y actualizados para una mejor compatibilidad con el hardware.
  • Nueva opción de arranque independiente de la arquitectura llamada "mitigations" ​para facilitar la gestión de presentes o futuras fallas en las CPUs.

En caso, de querer saber más al detalle sobre los cambios implementados sobre cualquier número de versión, pasada o futura de esta serie o rama, recuerde que puede hacerlo directamente sobre la sección de cambios registrados del sitio web oficial de «Kernel.org».

Kernel de Linux: Categorías del Kernel de Linux

Categorías del Kernel de Linux

Hay varias categorías oficiales en las que el «Kernel de Linux» proveído por «Linux Torvalds» y su Equipo de trabajo, conocido como «Vainilla» es dividido, y estás son:

Pre-lanzamiento (Prepatch)

Los «Kerneles de Linux» de «Pre-lanzamiento (Prepatch o Release Candidate (RC)» son aquellos dirigidos principalmente a otros desarrolladores de núcleos y entusiastas de Linux. Deben compilarse a partir del código fuente, y por lo general, contienen nuevas características que deben probarse antes de que se puedan poner en una versión estable. Estos son mantenidos y liberados directamente por Linus Torvalds.

Línea principal (Mainline)

Los «Kerneles de Linux» de «Línea principal (Mainline)» también son mantenidos directamente por Linus Torvalds. Y estos son aquellos en los que se introducen todas las nuevas funciones y en el que se producen todos los nuevos y excitantes desarrollos. Estos se publican frecuentemente, cada 2 ó 3 meses en promedio.

Estable (Stable)

Los «Kerneles de Linux» «Estables (Stable)» son aquellos que luego de ser del tipo «Mainline» son liberados de su largo proceso de desarrollo, volviéndose estables, es decir, solo sujetos a correcciones. Correcciones que se aplican primero sobre el actual «Mainline» y luego es aplicada sobre el actual «Stable» a través de un mantenedor oficial designado. Por lo general, los «Stable» sólo tienen pocas versiones de corrección de errores hasta que el siguiente «Mainline» esté disponible, a menos que se designe como un «Kernel de Linux» de categoría de «Largo plazo (Longterm)». Las actualizaciones estables del núcleo se publican según sea necesario, normalmente una vez a la semana.

Largo plazo (Longterm)

Los «Kerneles de Linux» de «Largo plazo (Longterm)» son aquellos que proporcionan un soporte de correcciones de errores y mantenimiento por un tiempo sumamente largo (años) y así beneficiar también a los «Kerneles de Linux» más antiguos. Ha estos sólo se le aplican correcciones de errores importantes, por lo que no suelen tener versiones muy frecuentes.

En cuanto, a los «Kerneles de Linux» de la «serie 5.2», no olvide que esta serie (o rama) pertenece a la categoría de «Stable» que significa que pueden ser implementados con seguridad y confianza, y no a la de «LongTerm», que implicaría que sus cambios no se agregarían al núcleo LTS actual, cuya última versión actualizada al día de hoy es la «número 4.19.71». Mientras que, al día de hoy, la «serie 5.3» pertenece a la categoría de «Mainline», que significa que no está lista para implementaciones masivas.

Kernel de Linux: Los números de versión del Kernel de Linux

¿Qué significan los números de las versiones del Kernel de Linux?

Antes de la serie 2.6, los números (AA.BB.CC) de las versiones indicaban:

  • AA: La serie/rama principal del mismo y solo cambiaba cuando la manera de funcionamiento sufría un cambio muy importante.
  • BB: La versión era de desarrollo o de producción. Un número impar, significaba que era de desarrollo, uno par, que era de producción.
  • CC: Las nuevas revisiones dentro de una versión, en las que lo único que se había modificado eran fallos de programación.

Antes de la serie 2.6, los números (AA.BB.CC.DD) de las versiones indicaban:

  • AA: La serie/rama principal del mismo.
  • BB: La revisión principal del núcleo. Números pares e impares no tienen ningún significado hoy en día.
  • CC: Las nuevas revisiones menores del núcleo. Solo cambia cuando hay nuevas características y nuevos controladores o firmware soportados.
  • DD: Las correcciones específicas de fallos de programación o fallos de seguridad dentro de una revisión. Por ende, a veces, una versión podía incluir o no este número.
Kernel de Linux: Proceso de Compilación

¿Cómo compilar la última versión del Kernel de Linux?

«Compilar» un «Kernel de Linux» suele verse cómo un proceso complejo y avanzado que soló puede ser realizado por expertos en el área, pero la verdad es que es un proceso sencillo, aunque delicado, pesado y lento, ya que consume muchos recursos de hardware y tomo un tiempo considerable, que depende mucho del hardware usado para dicha tarea, y que en caso de falla o resultado erróneo o no satisfactorio del nuevo Kernel elaborado, esté puede afectar al equipo durante su implementación.

Pasos de pre-compilación

Independientemente de la «Distro Linux» que use para dicho proceso, necesitará que la misma previamente tenga una serie de paquetes necesarios y otros recomendados instalados para que todo el proceso se ejecute satisfactoriamente. En nuestro caso de ejemplo, usaremos una «Distro Linux» llamada «MilagrOS GNU/Linux», que no es más que una versión remasterizada y recargada, personalizada y optimizada al extremo, de otra conocida como «MX-Linux 18», que a su vez, está basada en la «Meta-distribución (Distribución Madre)» conocida como «DEBIAN GNU/Linux».

Nota: Recuerde que usted puede ejecutar las ordenes de comando mediante el comando «sudo» desde un usuario «sudoers» o sin este, si realiza el proceso con el súper-usuario «root».

Kernel de Linux: Compilación - Paso 1

Paso 1

Instalación de paquetes necesarios y recomendados

apt install build-essential kernel-package libncurses5-dev fakeroot

apt install arj bzip2 gzip lhasa liblhasa0 lzip lzma p7zip p7zip-full p7zip-rar sharutils rar unace unrar unrar-free tar unzip xz-utils zip

apt install autoconf automake bison dkms fastjar g++ gawk gcc gcc-multilib gettext gettext-base intltool intltool-debian jarwrapper gtk-recordmydesktop linux-headers-$(uname -r) mawk mesa-common-dev minizip nasm perl perl-base pkg-config python-apt python-glade2 python-gtk2 python-libxml2 subversion wx-common wx3.0-headers x11proto-record-dev xmlto zlib1g zlib1g-dev

Nota: En algunas distribuciones o versiones de distribuciones el paquete «kernel-package» puede llegar a no existir por lo que se recomienda su descarga manual en un número de versión compatible a su «Distro Linux». En nuestro caso, se descargó el paquete «kernel-package_13.014+nmu1_all.deb» y se instaló manualmente mediante el comando «dpkg» para solventar su ausencia, aunque seguramente no hacía falta su instalación.

Kernel de Linux: Compilación - Paso 2

Paso 2

Posicionarnos en la carpeta de trabajo correcta

Para compilar un «Kernel de Linux» debemos realizar el proceso sobre la carpeta «/usr/src», ya que está es la carpeta que corresponde por «Buenas Prácticas» para este tipo de tareas de compilación u otros trabajos con el «Kernel de Linux». Para esto, ejecutamos la siguiente orden de comando:

cd /usr/src
Kernel de Linux: Compilación - Paso 3.1

Paso 3

Descarga del código fuente del Kernel Linux

El mismo puede descargarse vía «http» mediante un Navegador web o vía «wget» mediante una «consola (terminal)» mediante cualquiera de las siguientes ordenes de comando:

Kernel de Linux: Compilación - Paso 3.2
wget -c https://www.kernel.org/pub/linux/kernel/v5.x/linux-5.2.10.tar.xz
wget -c https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.2.10.tar.xz
Kernel de Linux: Compilación - Paso 3.3

Paso 4

Descomprimir y desempaquetar el archivo descargado

Para dicho proceso se debe ejecutar las siguientes ordenes de comando:

Kernel de Linux: Compilación - Paso 4.1
unxz linux-5.2.10.tar.xz
Kernel de Linux: Compilación - Paso 4.2
tar xvf linux-5.2.10.tar

Paso 5

Crear enlace simbólico de la nueva carpeta con el código fuente

Para dicho proceso se debe ejecutar las siguientes ordenes de comando:

Kernel de Linux: Compilación - Paso 5
ln -s linux-5.2.10 linux

Paso 6

Posicionarnos dentro de la nueva carpeta

Para dicho proceso se debe ejecutar la siguiente orden de comando:

Kernel de Linux: Compilación - Paso 6
cd /usr/src/linux

Paso 7

Eliminar (Limpiar) los archivos de configuración y los archivos fuentes del Kernel anterior

Nota: Este paso ayuda a eliminar (limpiar) todos los archivos que se haya generado de una compilación anterior.

Para dicho proceso se debe ejecutar la siguiente orden de comando:

Kernel de Linux: Compilación - Paso 7
make clean && make mrproper

Paso 8

Respaldar la configuración del Kernel actual

Para dicho proceso se debe ejecutar la siguiente orden de comando:

Kernel de Linux: Compilación - Paso 8
cp /boot/config-`uname -r`* .config

Paso 9

Iniciar la configuración del futuro Kernel

Para dicho proceso se debe iniciar el comando «make» con la variante «menuconfig» de la siguiente manera:

Kernel de Linux: Compilación - Paso 9.1
make menuconfig

Nota: Los archivos fuentes descomprimidos dentro del directorio «/usr/src/linux/», pueden personalizarse de 3 formas diferentes:

  • make config: Forma avanzada por su nivel de detalle.
  • make menuconfig: Forma amigable por su sencillo menú interactivo.
  • make xconfig: Forma gráfica, ya que hace uso del Servidor X instalado para hacer uso del sistema de ventanas. Por ello, suelen necesitarse tener instaladas las librerías QT de desarrollo necesarias (libqt4-dev).
Kernel de Linux: Compilación - Paso 9.2

Luego, al abrirse el «Menú de configuración del Kernel», configure los parámetros de su elección. Solo no olvide, en caso de ser necesario, marcar o desmarcar la opción de «64-bit kernel», dependiendo de si quiere generar un «Kernel de Linux» para esa arquitectura o no.

Kernel de Linux: Compilación - Paso 9.3

Por último, luego de haber realizado todos los cambios de su preferencia, salve la misma presionando el «Botón de Salvar (Save)» y luego el «Botón de Salir (Exit)».

Paso 10

A partir de este punto hay 2 posibles procedimientos a seguir. Los cuales mencionaremos a continuación:

Procedimiento 1

Uso del comando make

make
make modules_install
make install

Nota: Al finalizar la ejecución de la última orden de comando, ya el «Kernel de Linux» se encuentra instalado, y solo hace falta reiniciar y probar.

Por último, se aconseja actualizar el «GRUB» y el «Init» del «Sistema Operativo», para asegurarse que el mismo ya se encuentra actualizado con las nuevas entradas de arranque. Para ello, ejecute las siguientes ordenes de comando:

update-grub; update-grub2; update-initramfs -u

Y está otra para realizar una limpieza posterior del «Sistema Operativo»:

localepurge; aptitude clean; aptitude autoclean; apt-get autoremove; apt autoremove; apt purge; apt remove

En caso de desear generar «paquetes .deb» del nuevo «Kernel de Linux» compilado e instalado, ejecute la siguiente orden de comando:

make deb

Nota: Tenga presente que los «paquetes .deb» generados suelen crearse en el directorio superior, es decir, en: /usr/src

Procedimiento 2

Uso del comando make-kpkg

Para dicho proceso se deben ejecutar las siguientes acciones:

a) Iniciar la Compilación del futuro Kernel

Kernel de Linux: Compilación - Paso 10.1
make-kpkg clean

b) Iniciar la Generación de los paquetes .deb del futuro Kernel y su instalación

Kernel de Linux: Compilación - Paso 10.2
fakeroot make-kpkg --initrd --append-to-version=-custom kernel_image kernel_headers

Los que hayan compilado un «Kernel de Linux» con anterioridad, saben que la orden de comando «fakeroot make-kpkg» equivale a ejecutar la siguiente secuencia de: «make dep, make clean, make bzImage, make modules». Y que las demás opciones siguientes de la orden de comando significan lo siguiente:

  • «--initrd»: Para crear una imagen initrd en el paquete que se guardará en «/boot» cuando se instale el kernel (recordar que en este punto solo se está compilando y empaquetando, no instalando).
  • «--append-to-version=-custom»: Para personalizar el nombre de los paquetes creados con el sufijo que se encuentre luego del signo « = », ejemplo: «-custom».
  • «kernel_image kernel_headers»: Para especificar la creación de dos paquetes con extensión .deb en el directorio superior. Uno que será para el «Kernel de Linux» y el otro para las «Cabeceras del Kernel de Linux».

Nota: Tenga presente que la opción de «kernel_headers» es opcional, y la misma suele utilizarse para generar dichas cabeceras, que son requeridas por ciertos programas y módulos para poder ser instalados, por ejemplo, ciertos controladores, firmware o programas relacionados con algún hardware como una tarjeta de red inalámbrica u otro dispositivo.

Kernel de Linux: Compilación - Paso 10.3

Sí en el «proceso de compilación», se le muestra un «error» relacionado con los «Certificados del Kernel», realice los siguientes pasos:

  • Edite el archivo .config
  • Busque la línea que comience por:
  • Comentela con un signo de numeral (#) al inicio
  • Guarde y cierre el archivo
  • Ejecute nuevamente la orden de comando anterior

O ejecute la siguiente orden de comando:

sed -i '/CONFIG_SYSTEM_TRUSTED_KEYS/s/^/#/g' .config

Nota: El tiempo de compilación es proporcional a la configuración y personalización que hayas hecho y al poder de computo del equipo donde se realice el proceso de compilación. Si se incluyen muchos módulos se demorará más. Hay que tener mucha paciencia, ya que este proceso suele tomar una buena cantidad de tiempo.

c) Instalación de los paquetes .deb del Kernel generado

Para dicho proceso se deben ejecutar las siguientes ordenes de comando:

cd /usr/src
dpkg -i *.deb
rm -f linux-5.2.10.tar # Orden de comando opcional.

Nota: Al finalizar la instalación de los «paquetes .deb», el «GRUB» se actualizará automáticamente. Luego de esto, se pueden copiar y utilizar dichos «paquetes .deb» posteriormente en otras instalaciones o en otras «Distros Linux» (Iguales o similares basadas en DEBIAN), teniendo en cuenta que, si lo compilo los mismos de forma estándar o predeterminada o con muy pocas configuraciones avanzadas o específicas, los mismos pueden llegar a servir en casi cualquier Equipo. En caso contrario, si le realizo muchas personalizaciones basada en el equipo generador, puede ser que solo funcione en él.

Kernel de Linux: Conclusión del proceso de compilación

Conclusión

De forma breve, podemos concluir fácilmente que a pesar de ser un proceso técnico detallado y largo, no es algo realmente difícil de realizar, pero suele ser un proceso critico que involucra un esfuerzo considerable que muchas veces implica pocos beneficios reales importantes en general. Además, de que poner un «Kernel de Linux» personalizado algunas veces puede hacer que nuestra «Distro Linux» pierda compatibilidad con ciertos paquetes de sus repositorios originales.

Por lo que, se suele recomendar solo ejecutar este procedimiento en caso de necesidad real y específica para un caso determinado y justificado. Ya que, por lo general, el «Kernel de Linux» proveído por cada «Distro Linux» suele:

  • Ajustarse bastante bien en la gran mayoría de los casos donde es instalado.
  • Seguir obteniendo las actualizaciones fiables y seguras programadas.
  • Seguir obteniendo los parches personalizados de los mantenedores de la Distro.
  • Ahorrarnos tiempos innecesarios en arriesgados procesos de compilaciones.

Pero, si aun así desea realizar un proceso de compilación de una versión específica del «Kernel de Linux», tome en cuenta entre muchas otras cosas, que para que el mismo permita un arranque más rápido o no le consuma innecesarios recursos (RAM/CPU), los siguientes consejos:

  • Compilar sólo los módulos que se necesiten,
  • Marcar lo necesario como módulos (M) y no como built in (*)
  • Usar compresión lz4 (Sobre todo si tienes buena CPU).

En definitiva, esperamos que está publicación les sea de mucha utilidad técnica para que realicen su primera o próxima compilación de un «Kernel de Linux». Y en caso, de querer leer información oficial de «DEBIAN GNU/Linux» sobre dicho proceso, pueden hacer clic en el siguiente enlace .

Content laptop

Gracias por visitar el blog oficial de la tienda ReDIGIT Informática Circular. Si estás buscando ordenadores, monitores o portátiles baratos, en nuestra tienda online podrás encontrar PC de sobremesa a partir de 99 euros IVA incluido y portátiles económicos con 2 años de garantía. Todos los equipos en venta en ReDIGIT son de ocasión (segunda mano, renovados, refurbished y outlet), funcionan perfectamente y son ideales para cualquier tarea de tipo doméstico y profesional. ReDIGIT es la primera tienda en España que ofrece hasta 3 años de garantía en productos de informática de ocasión. Ponte en contacto con nosotros llamando/escribiendo directamente al Tel. y WhatsApp: 974 353 720.

  1. Windows
  2. GNU/Linux
  3. Windows 10
  4. Debian
  5. Clonación de Discos
  6. Anual
Ofertas ordenadores usados