Customizando a lenny: Parte 2b. El kernel

Bueno, le llego la hora al kernel, probablemente esto sea lo que mas impacta en la performance del sistema.

Mucha de la gente con la que hable de este tema sostienen que su sistema anda, que no sabrían como compilarlo, que para que, hay muchas escusas.

Los principales ventajas de compilar nuestro propio núcleo son que logramos optimizar el código de lo es el proceso mas demandante del sistema. Si nos ponemos a ver el kernel corre desde que arrancamos la maquina hasta que la apagamos, y entra en funcionamiento tanto en tiempo de usuario como en tiempo de sistema, administra todo.
Los núcleos precompilados que vienen con la distribución contienen muchas funciones que no necesitamos, drivers para hardware que no tenemos y difícilmente tendremos, soporte a filesystems que no usamos. Código no optimizado para nuestro micro en particular, y formas de administrar los recursos con las que no podemos llegar a estar de acuerdo.

Las contras:
Como no encuentro alguna contra real, como para poner alguna, vamos a decir que se toma un rato bastante largo en compilarse. Y en el caso de que llegara a fallar porque no pusimos algo que necesitábamos vamos a tener que compilar todo de vuelta.

Pero bueno, en cuanto nos decidamos pasamos al siguiente paso:
Podemos hacer 2 cosas, primero podemos bajar un kernel desde kernel.org para tener lo ultimo de lo ultimo.O podemos usar los fuentes del núcleo de nuestra distribución.

Desde mi punto de vista, en desktops pcs, creo que lo que conviene es complicarse la vida lo justo y necesario, así que mientras todo funcione, y no nos muestren las ventajas de un núcleo nuevo no creo que sea conveniente usarlo, principalmente porque como ya dije el tiempo de compilación es alto y entre versiones cercanas posiblemente no ganemos mucho.

Ya que vamos a compilar nuestro núcleo, para empezar lo mejor sera arrancar con el ultimo núcleo estable. Así que nos vamos a www.kernel.org y nos bajamos los fuentes del núcleo.

Movemos los fuentes a /usr/src/ y lo descomprimimos

linkeamos el directorio de los fuentes a /usr/src/linux. Por ejemplo en el caso del nucleo 2.6.24.4 (ultimo estable a la fecha) el comando seria
ln -s /usr/src/linux-2.6.24.4 /usr/src/linux
Y entramos en el directorio /usr/src/linux

Ahora toca configurar que vamos a compilar. Para lo cual lo mejor es partir de la configuración actual y modificarla según nuestras necesidades.
Copiamos nuestra configuración actual, el nombre del archivo de configuración dependerá del kernel que estemos usando.
Como ejemplo vamos a copiar la configuración del núcleo 2.4.24.1 que es el ultimo que viene con debian a la hora de escribir esto.

cp /boot/config-2.6.24-1-amd64 /usr/src/.config

Entramos al directorio de los fuentes y los vamos a configurar.
cd /usr/src/linux

Intentamos configurarlo usando xconfig
sudo make xconfig
Esta es sin dudas la forma mas practica de configurar el núcleo.

Si no disponemos de entorno gráfico
sudo make menuconfig

Y por ultimo si disponemos de un sistema mínimo y no tenemos instaladas ni las librerías ncurses.
sudo make config

En todos los casos las opciones a configurar son las mismas, pero por comodidad y tiempo siempre conviene xconfig o menuconfig antes que make config. Ya que esta ultima manera nos va a preguntar ítem por ítem que hacer sin posibilidad de volver a cambiar algo.

Para optimizarlo hacen falta solamente 2 cosas.

Primero.
Procesor type and features
En donde seleccionamos nuestra plataforma y acomodamos las características que posea el micro.

Y en segundo termino los módulos:

Lo que hace a linux mas estable es el soporte de módulos, lo que permite al sistema seguir funcionando hasta en muchas ocasiones con fallos en el hardware.
Que es esto, veamos, si tenemos por ejemplo una red inalámbrica, he incluimos el soporte de hardware para esta placa dentro del núcleo, ganaremos algo de latencia (prácticamente nada para las latencias propias de este tipo de dispositivos) pero, en el caso que por algún fallo, bug o xploit, esta sección de código falle, al estar incluida en el núcleo va a arrastrar el resto del núcleo con ella. Ahora, si lo ponemos como modulo, en el caso de fallar el modulo se descarga y puede cargarse nuevamente sin ningún problema.

Por otro lado, si compilamos algo que se necesite al momento de arrancar como modulo, el modulo debe estar incluido en initrd, de lo contrario el sistema no arrancara.

Por mi parte, lo óptimo me parece que es incluir el soporte al fs que usemos en nuestro disco (en la parte de linux solamente) dentro del núcleo, de hardware evitemos todo lo posible, para que una falla en un dispositivo no arrastre el resto del sistema, soporte de networking (lo configuramos según el hardware que tengamos) al núcleo Y el resto, como módulos.

Cuando tengamos todo configurado, compilamos

make-kpkg --initrd kernel_image kernel_headers kernel_manual

Los últimos 2 targets son opcionales, pero útiles.

kernel headers compilara las cabeceras del núcleo, estas sirven para compilar módulos adicionales como pueden ser controladores propietarios, módulos para maquinas virtuales (virtualbox, qemu, vmware),etc

kernel_manual compila las paginas del manual del núcleo.

Tras todo esto solamente queda instalarlo.

dpkg -i linux-headers-2.6.24.4_2.6.24.4-10.00.Custom_amd64.deb linux-image-2.6.24.4_2.6.24.4-10.00.Custom_amd64.deb

Tras esto solamente queda volver a configurar los parámetro de arranque del núcleo en /boot/grub/menu.lst

Y reiniciamos la maquina para comprobar que todo funcione.

~ por debink en Abril 22, 2008.

Escribe un comentario