10.16.2009

Compilando un kernel a lo debian en 10 pasos.

Muchas veces nos encontramos en la situación que el kernel de nuestra distribución GNU/Linux no es el que deseamos, ya sea por funciones nuevas (como el soporte para USB 3.0 en el último kernel) o porque simplemente queremos tener un kernel más a medida de nuestra máquina sin tener que cargar un sin número de módulos y drivers de dispositivos que no tenemos.

En Debian tenemos la posibilidad de compilar el kernel y generar las cabeceras y la imagen como paquetes DEB, lo cual nos ahorra cierto trabajo manual además de ser más seguro :) Así que manos al teclado:

0) Instalamos los paquetes nescesarios para la tarea:

apt-get install build-essential libncurses-dev libncurses5 kernel-package fakeroot
1) Creamos una carpeta donde trabajar:

mkdir /tmp/mikernel
cd /tmp/mikernel
2) Descargando las fuentes nescesarias:

wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-source-2.6.30.tar.bz2
wget http://www.kernel.org/pub/linux/kernel/v2.6/patch-2.6.30.9.bz2
3) Descomprimimos las fuentes, el parche, e ingresamos a la ubicación de las fuentes:

tar xjf linux-source-2.6.30.tar.bz2
bunzip2 -d -k patch-2.6.30.9.bz2
cd linux-source-2.6.30
4) Aplicamos el parche:
patch -Np1 -i ../patch-2.6.30.9
5) Copiamos el archivo de configuraci{on del kernel actual para partir de una base que sabemos funciona bien:
cp /boot/config-'uname -r' ./.config

  • donde 'uname -r' es la versión del kernel actual, si el comando no funciona debemos escribir el nombre de archivo completo, por ejemplo config-2.6.26.6
6) Ejecutamos el programa de configuración del kernel:
make menuconfig
Al tener menuconfig cargado, seleccionamos la penúltima opción para cargar el archivo config que copiamos anteriormente.
Luego realizamos todos los cambios que queramos y por último guardamos la configuración en el mismo archivo .config

7) Compilamos el kernel:
make-kpkg --initrd --append-to-version=.10 --revision=host.custom kernel_image kernel_headers
  • donde --append-to-version y --revision son opcionales, la primera añade al número de versión del kernel el número que elijamos si mantenemos diferentes versiones; y el segundo añade el nombre que elijamos también para motivos de administración.
Al terminar luego de un buen rato, dependiendo de la cantidad de cosas que deban compilarse y de las características de la máquina, obtendremos dos paquetes .deb en el directorio superior.

8) Subimos un nivel y procedemos a instalar el nuevo kernel:
cd ..
dpkg -i *.deb

  • ojo! el * significa que instalará TODOS los archivos .deb que se encunentren en la ubicación, así que debemos estar seguros que solo están los dos pertenecientes al kernel: linux-image-2.6.30.10_host.custom_i386.deb y linux-headers-2.6.30.10_host.custom_i386.deb
9) Una vez completada la instalación, tendremos una nueva entrada en nuestro GRUB perteneciente a nuestro nuevo kernel, para confirmar que todo haya ido de maravilla, reiniciamos con este kernel:

init 6
10) Si todo ha salido bien, debemos estar en nuestro escritorio de siempre, pero con el nuevo kernel. Para comprobar que estemos usándolo:


uname -r
lo que nos debe dar como resultado la versión que hemos compilado, como 2.6.30.9.10


Y eso es todo :D El verdadero trabajo de todo esto es la dedicación que le pongamos al decidir que va y que no en el kernel, la ayuda dentro de menuconfig suele ser bastante concisa, sobretodo al momento de si se trata de algo nescesario o algo realmente opcional.

Conforme vaya aprendiendo más detalles hacerca de este largo pero fructífero proceso, seguiré publicando sobre esto :)

Espero que les sea de ayuda.

Saludos!