Una de las cosas a las que todo usuario de Linux termina enfrentándose antes o después es a la compilación de un núcleo. Esto es así por diversos motivos:
- Búsqueda de una mejora del rendimiento. Un núcleo preparado específicamente para nuestra arquitectura nos proporciona una mejora de las prestaciones de nuestro software.
- Querer tener la última versión del núcleo. Con esto corregiremos los agujeros de seguridad que se vayan conociendo e incluiremos nuevas funcionalidades. Es frecuente que las distribuciones no se centren en ofrecer los últimos núcleos, ya que se centran más en tener actualizados los paquetes y solo incorporen nuevos núcleos cada vez que sacan versiones estables de las distribuciones.
En este documento vamos a compilar un núcleo de la serie 2.6 en mi distribución de Linux, la Slackware 10.2. Esto no quiere decir que estos pasos no tengan validez para otra distribución, solo que en esta distribución está comprobado que el funcionamiento es el correcto.
Asimismo decir que el gestor de arranque que utilizo es el LILO, con lo cual si usas GRUB los últimos pasos serán ligeramente distintos.
1- Convenciones.
Seguiré la siguiente notación en el documento:
# mv linux-2.6.14.2.tar.gz /usr/src
Esto significa que lo que estamos ejecutando es un comando, que se introduce tal cual en la linea de comandos. El símbolo # sirve para representar que estos comandos han de ejecutarse con permisos de root.
map = /boot/System-2.6.14.2.map
Esto significa que son lineas que hay que copiar tal cual pero que van dentro de un fichero, con lo cual se edita dicho fichero y se copia la linea en su interior.
2- Primeros pasos.
Lo primero que debemos hacer es bajar el núcleo, escogemos un servidor, por ejemplo la página Web oficial (http://www.kernel.org) y bajamos el núcleo más moderno, en este caso el 2.6.14.2.
Podemos descargarlo en diversos formatos de compresión, en mi caso elijo el tar.gz, con lo cual el archivo descargado es el linux-2.6.14.2.tar.gz.
Una vez descargado lo colocamos en el directorio /usr/src:
# mv linux-2.6.14.2.tar.gz /usr/src
Y lo descomprimimos y desempaquetamos:
# tar zxvf linux-2.6.14.2.tar.gz
Entramos al directorio donde hemos descomprimido las fuentes del núcleo:
# cd linux-2.6.14.2
3- Configuración y compilación.
Ahora procedemos a uno de los pasos más importantes, la generación del archivo de configuración en base al cual se compilará el núcleo:
# make xconfig
Hay que destacar que tenemos varias opciones, xconfig es para realizar la configuración en modo gráfico, menuconfig es para realizarlo en ncurses o incluso config para modo texto.
Es muy recomendable guardar la configuración en un archivo para utilizarlo por ejemplo en la compilación de núcleos posteriores, por defecto se guardará en el fichero /usr/src/linux-2.6.14.2/.config.
La configuración del núcleo determina para qué va a tener soporte nuestro núcleo, los módulos que serán creados y las opciones de sistema de archivos, red, etc.
Es importante saber muy bien lo que se está haciendo, si no hacemos este paso correctamente el núcleo probablemente no arrancará bien o incluso funcionará pero fallarán ciertas cosas.
Acto seguido procedemos a la compilación:
# make
Después compilamos los módulos:
# make modules
Una vez realizada la compilación de los módulos los instalamos:
# make modules_install
Esto nos colocará los módulos en el directorio /lib/modules/2.6.14.2
4- Colocar cada cosa en su sitio.
Primero copiaremos el mapa del sistema al directorio de arranque:
# cp System.map /boot/System-2.6.14.2.map
El System-2.6.14.2.map es un fichero de texto plano que contiene dos columnas, en una están situadas las direcciones de memoria y en la contigua las funciones y llamadas al sistema que están alojadas en dichas direcciones.
Ahora entramos al directorio en el cual se ha creado el núcleo:
# cd arch/i386/boot
Copiamos el núcleo al directorio de arranque:
# cp bzImage /boot/vmlinuz-2.6.14.2
Este fichero vmlinuz-2.6.14.2 es el núcleo propiamente dicho.
5- Editando el gestor de arranque (lilo).
Ahora debemos hacer que el núcleo pueda arrancar al iniciar el sistema, para ello tendremos en cuenta una consideración muy importante: No borrar la entrada ni el núcleo que utilizamos en este momento. Esto es así porque la carga de nuestro núcleo puede fallar por lo tanto debemos guardar tanto el núcleo como su entrada en el gestor de arranque para poder entrar a nuestro Slackware.
Editamos el fichero lilo.conf:
# vi /etc/lilo.conf
Ahora debemos meter por debajo de la opción boot la siguiente linea:
map = /boot/System-2.6.14.2.map
Y debajo de nuestra entrada actual de Linux meter la nueva entrada para nuestro núcleo:
image = /boot/vmlinuz-2.6.14.2
root = /dev/hda5
label = Slackware
La etiqueta image sirve para indicarle a LILO la ubicación del núcleo, la etiqueta root le indica en qué partición tenemos nuestro Linux (probablemente la vuestra difiera de la mía), la etiqueta label es simplemente el nombre que LILO mostrará en el arranque, es importante que no haya varias etiquetas label con el mismo identificador.
Una vez echo esto guardamos el fichero y actualizamos LILO:
# lilo
Si no ejecutamos esta orden los datos del fichero /etc/lilo.conf no serán transferidos al MBR (Sector de Arranque Maestro) del disco duro con lo cual al iniciar el ordenador no se nos ofrecerá la opción de entrar a Slackware con nuestro nuevo núcleo.
Una vez realizado esto ya solo debemos reiniciar el ordenador y ver si nuestro nuevo núcleo funciona.
Recomiendo no borrar la entrada en /etc/lilo.conf del antiguo núcleo hasta no haber comprobado que el nuevo funciona perfectamente. Hasta entonces no debemos borrar el antiguo núcleo. No es infrecuente que tengamos ciertos fallos del tipo de que no funcione Internet, que no se escuche el sonido, etc.
6- Borrado del antiguo kernel.
Vamos a suponer que nuestro núcleo anterior era el 2.6.10 y que el que acabamos de compilar funciona correctamente, pues bien para borrar el antiguo tendremos que borrar los siguientes ficheros:
# rm /boot/vmlinuz-2.6.10
# rm /boot/System-2.6.10.map
# rm -r /lib/modules/2.6.10
También debemos borrar o comentar la entrada en /etc/lilo.conf, y si tenemos instaladas las fuentes del núcleo anterior borrarlas también:
# rm -r /usr/src/linux-2.6.10
# rm /usr/src/linux-2.6.10.tar.gz
Licencia del documento
Derechos de Autor © 2005 por Daniel Medianero García.
Este documento esta liberado bajo la licencia creative commons.
Si queréis contactar conmigo podéis encontrarme en los foros de Espacio Espacio Linux ( http://www.espaciolinux.com/ ) con el nick de Meleagro, en el IRC servidor Freenode en los canales slackware-es y bsd-es como Meleagro, en mi Blog ( http://www.meleagro.esp.cc ) o en mi correo electrónico ( meleslack@gmail.com ).