Aunque no es imprescindible compilar el kernel de nuestra distribución Linux para poder usarla en forma normal, algunas veces puede ser necesario hacerlo para habilitar alguna opción en particular o deshabilitar el que se carguen ciertos módulos que vienen por defecto y que no necesitamos (y así ahorrar algo de tiempo de carga).
Esta pequeña guía la hice para un curso en la universidad, utilizando Kubuntu 6.06 y el kernel 2.6.15.23 de aquella época, aunque sirve para el Ubuntu actual (y Debian) y versiones recientes del kernel. Me basé en este how-to.
Primero, necesitamos instalar los paquetes build-essential y kernel-package que nos servirán para compilar el kernel:
$sudo apt-get install build-essential kernel-package
Luego, es necesario descargar las fuentes del kernel, es posible descargar las fuentes de Ubuntu (linux-source) o las fuentes con módulos de Debian (kernel-source). En este ejemplo descargamos las fuentes de Ubuntu:
$ sudo apt-get install linux-source
Este comando descarga comprimido las fuentes del kernel más reciente (en /usr/scr/). En este ejemplo, el archivo comprimido linux-source-2.6.15.23.tar.bz2. Para descomprimirlo hacemos:
$ sudo tar jxvf linux-source-2.6.15.tar.bz2
Esto descomprime las fuentes del kernel en /usr/src/linux-source-2.6.15/
Es posible usar una configuración pre existente (la configuración de la instalación de Kubuntu) para no tener que ir navegando por todas las opciones de módulos y sólo habilitar/deshabilitar lo necesario. Para esto copiamos el archivo /boot/config-2.6.8.1-3-386 como .config en la carpeta /usr/src/linux-source-2.6.15/ (el kernel 2.6.8.1-3-386 es el que traía Ubuntu 6.06
$cd /usr/src/linux-source-2.6.15/
$sudo cp /boot/config-2.6.8.1-3-386 .config
Para utilizar como base la configuración anterior, se invoca al programa menuconfig con el comando:
$ sudo make oldconfig menuconfig
Con este programa habilitaremos o deshabilitaremos los módulos que queremos en el kernel, acá hay bastantes opciones, lo mejor es buscar un poco en Google para saber para qué es cada una, aunque algunas son bastante intuitivas, por ejemplo, yo deshabilité el soporte para memoria RAM mayor a 1 GB (tengo escasos 512MB), el soporte para laptops Dell y Toshiba (porque es un desktop), el soporte para particiones Mac, Solaris, Atari, Amiga, etc. Es cuestión de probar y armarse de paciencia. Se puede deshabilitar una opción, integrarla al kernel o compilarla en forma modular (para por ejemplo dar la posibilidad de instalar luego cierto hardware nuevo). Una explicación de las distintas secciones puede ser encontrada acá.
Luego de habilitar/deshabilitar lo que queremos y guardar los cambios, construimos los paquetes del kernel con los comandos:
$ sudo make-kpkg clean
$ sudo make-kpkg –append-to-version=.050606 –initrd kernel_image
El parámetro de –append-to-version sirve para darle un nombre particular a la versión del kernel (en este caso la fecha) para identificarlo fácilmente.
Luego que termina la construcción, se crea un archivo kernel-image-2.6.15.7-ubuntu1.050606_10.00.Custom_i386.deb, este archivo debe instalarse con el comando:
$ sudo dpkg -i kernel-image-2.6.15.7-ubuntu1.060606_10.00.Custom_i386.deb
Este comando, además de instalar el kernel nuevo, actualiza el Grub. Finalmente, se debe reiniciar la PC y escoger el nuevo kernel.
Nota: Al momento de la compilación es necesario disponer de espacio suficiente en el disco duro (y bastante tiempo dependiendo del procesador que tengamos). La primera vez que lo hice, al cabo de unos 45 minutos me quedé sin espacio en la partición y fue necesario empezar (casi) todo otra vez…
Perublogs tags: Linux kernel geek