jueves, 8 de octubre de 2009

Actualizar kernel Linux

Por diversos motivos seguramente llegará el día que nos toque actualizar el kernel de nuestro sistema, y aquí voy a explicar cómo hacerlo en pocos pasos y sin complicaciones.

Este método rescata la configuración actual de nuestro kernel para ser aplicada al kernel al que actualicemos. Para las nuevas funcionalidades que aporte el kernel, durante la compilación se nos preguntará cómo aplicar, ya que no encontrará información al respecto en el archivo de configuración actual.

Lo primero que vamos a hacer es descargar los sources de la última versión estable del kernel, de www.kernel.org, actualmene la 2.6.31.3, en /usr/src:

$ cd /usr/src/
/usr/src$ sudo wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.31.3.tar.bz2


Vemos que el archivo descargado ocupa 59 MBytes:

/usr/src$ ls -lh linux-2.6.31.3.tar.bz2
-rw-r--r-- 1 root src 59M 2009-10-07 23:52 linux-2.6.31.3.tar.bz2


Descomprimimos el archivo y vemos cómo el directorio creado pasa a ocupar un poquito más:

/usr/src$ ls -lh linux-2.6.31.3.tar.bz2
-rw-r--r-- 1 root src 59M 2009-10-07 23:52 linux-2.6.31.3.tar.bz2


Ahora vamos a la parte interesante, entramos a la carpeta y vamos a copiar allí la configuración del kernel actual:

/usr/src/linux-2.6.31.3$ sudo cp /boot/config-`uname -r` .config

Ahora vamos a copiar el fichero de configuración para ser usado en nuestra nueva compilación. Esto renombrará el .config a .config.old y creará el nuevo .config, cambiando la versión del kernel, y la hora de compilación. Esta última información es la que nos aparece al ejecutar un uname -a.

/usr/src/linux-2.6.31.3$ sudo make oldconfig

Ahora pasamos a compilar el kernel, proceso que utilizará el fichero .config. y a instalar los módulos necesarios.

/usr/src/linux-2.6.31.3$ sudo make
sudo make modules_install
sudo make install


Este proceso puede durar más de 1 hora, siempre dependiendo del procesador de nuestra máquina y la cantidad de módulos a instalar.

Por último nos queda actualizar el gestor de arranque GRUB para permitir arrancar con el nuevo kernel:

/usr/src/linux-2.6.31.3$ sudo update-initramfs -c -k $VERSION_KERNEL_NUEVO
/usr/src/linux-2.6.31.3$ sudo update-grub

Dónde se sustituye por la versión del último archivo vmlinuz generado, en nuestro caso, para /boot/vmlinuz-2.6.31.3 $VERSION_KERNEL_NUEVO es 2.6.31.3

Estos 2 últimos pasos puede ser que no nos funcionen en según que distribuciones de Linux, ésta es otra forma de hacer lo mismo:

$ sudo rm vmlinuz; sudo rm initrd
sudo ln -s initrd initrd-2.6.31.3
sudo ln vmlinuz vmlinuz-2.6.31.3


Luego habrá que editar el fichero /boot/grub/menú.lst y añadir las líneas correspondientes a los archivos que hemos generado. Lo más práctico es copiar/pegar las líneas del kernel anterior, sustituyendo los ficheros vmlinuz y initrd por los nuevos.

Sólo queda reiniciar y cruzar los dedos (rezar no suele funcionar.....)

No hay comentarios: