3 Compilar un kernel de forma tradicional

Objetivo y variantes de búsqueda
Intento principal: compilar un kernel Linux desde las fuentes de forma tradicional. Variantes relacionadas: compilar kernel, construir kernel desde fuentes, parchear kernel, instalar kernel manualmente, menuconfig, solucionar arranque tras compilar kernel.
1. Introducción breve
Compilar un kernel desde cero aporta control total sobre las opciones del sistema, permite incluir controladores experimentales y optimizar para hardware concreto. Definición breve: “kernel” = núcleo del sistema operativo que gestiona hardware, procesos y memoria.
Importante: Este método es genérico y no produce paquetes RPM específicos de Fedora. Trabaja en cualquier distribución Linux si tienes privilegios root y las herramientas de compilación instaladas (gcc, make, bzip2, patch, wget, etc.).
3 Construir un kernel la manera tradicional
3.1 Descargar las fuentes del kernel
Descargamos el kernel deseado a /usr/src. Ve a www.kernel.org y elige la versión que quieras, por ejemplo linux-2.6.18.2.tar.bz2 (las series 2.6 están en http://www.kernel.org/pub/linux/kernel/v2.6/). Para descargarlo a /usr/src usa:
cd /usr/src
wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.18.2.tar.bz2
Descomprime las fuentes y crea un enlace simbólico “linux” apuntando al directorio de fuentes:
tar xjf linux-2.6.18.2.tar.bz2
ln -s linux-2.6.18.2 linux
cd /usr/src/linux
Nota: mantener un enlace simbólico facilita repetir el proceso cuando cambies de versión.
3.2 Aplicar parches a las fuentes (opcional)
A veces necesitas controladores o características que aún no están en la versión estable. Si existe un parche, aplícalo desde /usr/src/linux. Ejemplo, suponiendo que descargaste patch.bz2 a /usr/src:
bzip2 -dc /usr/src/patch.bz2 | patch -p1 --dry-run
bzip2 -dc /usr/src/patch.bz2 | patch -p1
La primera línea hace una prueba sin modificar las fuentes; si no hay errores puedes ejecutar la segunda para aplicar el parche. No continúes si la prueba muestra errores.
También hay prepatches (equivalente a versiones alfa). Por ejemplo, si quieres compilar 2.6.19-rc5 puede haber un patch-2.6.19-rc5.bz2 que debes aplicar sobre las fuentes de la última “full release” previa (p. ej. 2.6.18). Ejemplo:
cd /usr/src
wget http://www.kernel.org/pub/linux/kernel/v2.6/testing/patch-2.6.19-rc5.bz2
cd /usr/src/linux
bzip2 -dc /usr/src/patch-2.6.19-rc5.bz2 | patch -p1 --dry-run
bzip2 -dc /usr/src/patch-2.6.19-rc5.bz2 | patch -p1
Importante: los prepatches deben aplicarse sobre la versión base apropiada — lee el fichero README del parche o la página de kernel.org correspondiente.
3.3 Configurar el kernel
Es buena idea partir de la configuración del kernel en ejecución. Desde /usr/src/linux:
make mrproper
cp /boot/config-`uname -r` ./.config
Luego ejecuta el menú interactivo de configuración:
make menuconfig
En el menú selecciona “Load an Alternate Configuration File” y carga .config (que corresponde a la configuración actual). A continuación recorre las opciones y ajusta según tus necesidades. Guarda cuando salgas.
Consejo práctico: si has cambiado muchas opciones o usado una versión de kernel muy distinta, puedes ejecutar make oldconfig
para responder interactivamente a nuevas opciones basadas en tu .config actual.
3.4 Compilar e instalar el kernel
Para construir e instalar ejecuta las siguientes instrucciones:
make all
make modules_install
make install
Observaciones:
- make all compila el kernel y las imágenes necesarias (puede variar según versión: algunos flujos usan
make bzImage
ymake modules
por separado). - make modules_install instala los módulos en /lib/modules/
uname -r
o la ruta correspondiente a la nueva versión. - make install instala la imagen del kernel y crea o actualiza la ramdisk y las entradas de GRUB según el Makefile de instalación.
Paciencia: la compilación puede tardar horas según la configuración y la CPU.
Ahora edita /boot/grub/menu.lst y asegúrate de que la entrada del kernel nuevo esté en la parte superior (default=0) para arrancar con él por defecto:
vi /boot/grub/menu.lst
Ejemplo de un fragmento de menu.lst generado:
# grub.conf generated by anaconda
#
# Note that you do not have to rerun grub after making changes to this file
# NOTICE: You have a /boot partition. This means that
# all kernel and initrd paths are relative to /boot/, eg.
# root (hd0,0)
# kernel /vmlinuz-version ro root=/dev/VolGroup00/LogVol00
# initrd /initrd-version.img
#boot=/dev/sda
default=0
timeout=5
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
title Fedora Core (2.6.18.2)
root (hd0,0)
kernel /vmlinuz-2.6.18.2 ro root=/dev/VolGroup00/LogVol00
initrd /initrd-2.6.18.2.img
title Fedora Core (2.6.18-1.2798.fc6)
root (hd0,0)
kernel /vmlinuz-2.6.18-1.2798.fc6 ro root=/dev/VolGroup00/LogVol00
initrd /initrd-2.6.18-1.2798.fc6.img
Finalmente, reinicia:
shutdown -r now
Al arrancar, comprueba la versión del kernel en ejecución:
uname -r
Debería mostrar algo como:
2.6.18.2
3.5 Solución de problemas al arrancar
Si el sistema no arranca con el kernel nuevo, reinicia y, al ver el prompt de GRUB, pulsa cualquier tecla para mostrar el menú de GRUB:

Selecciona tu kernel anterior desde el menú y arranca con él:
Una vez en el sistema funcional, revisa:
- /var/log/messages o journalctl para errores del initramfs o módulos.
- Que la initrd para la nueva versión exista y contenga los módulos necesarios.
- Que la entrada de GRUB apunte al kernel e initrd correctos.
Si confirmas que el kernel no es funcional, elimina la entrada (stanza) defectuosa de /boot/grub/menu.lst antes de volver a establecerlo como default.
Buenas prácticas y listas de verificación rápidas
Lista de verificación antes de compilar
- Hacer copia de seguridad de datos críticos.
- Asegurarse de que hay espacio libre suficiente en /boot y /usr/src.
- Instalar paquetes de compilación: gcc, make, bzip2, patch, ncurses-devel (para menuconfig), etc.
- [ ] Guardar /boot/config-
uname -r
y documentar cambios. - Comprobar que /etc/fstab y UUIDs no se verán afectados por cambios en initramfs.
Lista de verificación tras instalar y antes de reiniciar
- Verificar que make install creó initrd y vmlinuz nuevos.
- Comprobar que /boot/grub/menu.lst contiene la nueva entrada.
- Revisar permisos y propietario de los archivos en /boot.
- [ ] Ejecutar
depmod -a
si es necesario.
Criterios de aceptación
- El sistema arranca con el kernel nuevo sin errores críticos.
- Módulos necesarios se cargan automáticamente y los dispositivos funcionan.
- Servicios esenciales (disco, red, inicio de sesión) operan como antes.
Estrategias alternativas y cuándo usarlas
- Usar paquetes proporcionados por la distribución (mejor para estabilidad y actualizaciones automáticas).
- Generar paquetes nativos (ej. RPM, DEB) en lugar de instalar desde fuentes si deseas administrar kernels con el gestor de paquetes.
- DKMS para módulos de terceros que deben recompilarse automáticamente al cambiar kernel.
- Usar herramientas de construcción de kernels como ‘make-kpkg’ (Debian) o scripts de build específicos de la distro.
Cuándo compilar a mano: cuando necesites opciones personalizadas, optimizaciones específicas de CPU, o módulos no disponibles en la distribución.
Reversión y procedimiento de incidentes
Pasos de rollback si el sistema no arranca con el kernel nuevo:
- Reinicia y entra al menú de GRUB.
- Arranca con el kernel anterior que funcionaba.
- Monta /boot y revisa las entradas en /boot/grub/menu.lst.
- Elimina la entrada defectuosa y los archivos /boot/vmlinuz- y /boot/initrd- asociados si lo deseas.
- Si el problema fue un módulo, vuelve a compilar o ajusta la configuración y prueba en una VM antes de aplicar al host.
Mini-runbook para incidentes:
- Nivel 1: Arranque con kernel anterior y recopilar logs.
- Nivel 2: Probar compilar con opciones mínimas (reutilizar .config antiguo y aplicar cambios uno a uno).
- Nivel 3: Restaurar desde backup si la configuración del sistema se corrompió.
Pruebas y casos de aceptación
Pruebas básicas tras instalar el kernel:
- uname -r muestra la versión esperada.
- lsmod muestra módulos cargados requeridos.
- dmesg no contiene errores fatales relacionados con inicialización de hardware.
- Los servicios críticos (red, disco) arrancan y están operativos.
Aceptación: Si todas las pruebas funcionan durante 24–48 horas en entorno de producción (o en la ventana de mantenimiento), considerar la nueva versión como estable.
Modelos mentales y heurísticas
- Heurística de minimalismo: compila con el menor conjunto de opciones necesarias y añade características gradualmente.
- Separación de riesgo: probar kernels experimentales en máquinas no críticas o en máquinas virtuales antes de servidores de producción.
- Inmutabilidad de arranque: nunca sobrescribas la entrada principal de GRUB hasta haber verificado el arranque exitoso.
Caja de datos (sin cifras inventadas)
- Tiempo de compilación: depende de CPU y opciones; puede ir desde minutos (con configuración mínima en CPU moderna) a varias horas.
- Espacio en /boot: asegúrate de varios cientos de megabytes libres si mantendrás varias imágenes e initrd.
Compatibilidad y notas regionales
- No hay diferencias funcionales por país; sin embargo, asegúrate de configurar la zona horaria y localización del sistema si el kernel cambia cómo se cargan algunos módulos específicos de hardware local.
Resumen final
- Descargar fuentes, aplicar parches si hace falta, usar la configuración actual como base, configurar con menuconfig, compilar e instalar.
- Mantén siempre una entrada de arranque funcional y un plan de reversión.
- Considera alternativas (RPM/DEB, DKMS, pruebas en VM) si buscas menos riesgo.
Extras útiles: mantén plantillas de checklist y registra los cambios en un archivo CHANGELOG local en /usr/src/kernel-builds.
4 Enlaces
- Fedora: http://fedora.redhat.com
- Fedora Wiki: http://fedoraproject.org/wiki
- The Linux Kernel Archives: http://www.kernel.org
Materiales similares

PWAs en Firefox: Agregar a la barra de tareas

Liberar espacio en iPhone sin borrar apps

WireGuard en CentOS 8: guía completa

Liberar 24 GB en Windows 10 tras Threshold 2

Mensajero autónomo: cómo asegurar ingresos regulares
