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:
1- 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.
2- 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ímblolo # 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 direcciónes.
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 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
Noviembre 2005
Daniel Medianero García
- Visto: 2150