Compilando el nuevo Kernel Linux 4.0 en Debian Wheezy

Como ya sabréis el pasado día 12 de abril se liberó el kernel 4.0 de Linux, así que a colación de esta última release quise compilarlo a modo de prueba en un sistema Debian Wheezy. Los pasos a dar son bastante sencillos y sirven como guía para futuras compilaciones de kernel en la distro Debian.

Compilando el kernel Linux 4.0

Antes de nada, instalamos las herramientas básicas para el proceso de compilación: compilador gcc, librería ncurses para la configuración de las opciones del kernel, conjunto de herramientas de empaquetado dpkg de desarrollo…

apt-get install gcc make libncurses5-dev dpkg-dev fakeroot kernel-package

Descargamos y desempaquetamos el código fuente del kernel:

wget https://www.kernel.org/pub/linux/kernel/v4.x/linux-4.0.tar.xz
tar Jxvf linux-4.0.tar.xz  

Configuramos las opciones del kernel que vamos a compilar. Para mantener la configuración del kernel actual (recomendado) hacemos:

cd linux-4.0/ 
cp /boot/config-`uname -r`* .config

Esta configuración se guardará en el fichero .config que posteriormente se utilizará en el proceso de compilación. Lanzamos la herramienta menuconfig para parametrizar el kernel. Se cargará el fichero .config que anteriormente hemos creado con la configuración de nuestro kernel actual. Nos aseguramos de que esté marcada la opción Enable Loadable Module Support para evitar problemas posteriores. Por ejemplo, si utilizamos el driver privativo de Nvidia éste se carga en el kernel como módulo dinámico (DKMS) por lo que no es buena idea dejar el kernel sin soporte.

make menuconfig
Parametrización del kernel con menuconfig

Parametrización del kernel con menuconfig

Procedemos a realizar un limpieza inicial del árbol de código:

make-kpkg clean

Para la parte que viene ahora, podemos optimizar el proceso de compilación podemos exportar la variable CONCURRENCY_LEVEL:

export CONCURRENCY_LEVEL=3

El nº variará en función de los cores que tengamos, cosa que podemos ver haciendo:

cat /proc/cpuinfo

Nos fijamos en cpu cores, y daremos a la variable CONCURRENCY_LEVEL el valor nº de cores + 1:

Nº de cores por CPU

Nº de cores por CPU

Procedemos a compilar y crear los paquetes .deb que después utilizaremos para instalar el kernel. En --append-to-version podéis poner el nombre de kernel personalizado que queráis.

fakeroot make-kpkg --append-to-version "-jotajotakernel" --revision "1" --initrd kernel_image kernel_headers

Nos vamos a dar un paseo, ya que el proceso tardará bastante en función de la capacidad de procesamiento de nuestro ordenador (en las compilaciones, tira bastante de CPU). Si volvemos y sigue compilando, repite el paso de irte a dar un paseo.

Cuando haya finalizado, instalamos el kernel de forma muy sencilla con dpkg a partir de los paquetes .deb que hemos creado gracias a make-kpkg. Estos paquetes están en un directorio anterior al actual en el que hemos estado trabajando. Primero instalamos el kernel y después las cabeceras. No es necesario modificar nada del GRUB ya que todo este proceso está bastante automatizado:

cd ..
dpkg -i linux-image-4.0.0-jotajotakernel_1_amd64.deb linux-headers-4.0.0-jotajotakernel_1_amd64.deb

Una vez haya terminado de instalar, reiniciamos:

reboot

En el próximo inicio, deberíamos ver en el GRUB nuestro Kernel 4.0 personalizado:

Selección del Kernel 4.0 en el menú de arranque GRUB

Selección del Kernel 4.0 en el menú de arranque GRUB

Y con esto y un bizcocho, a esperar a la versión 4.1