21.6.09

Compilar un kernel a la manera Debian. (Debian Way)

Si tienes conocimientos básicos de GNU/Linux, deberías probar hacer esto alguna vez. Si bien muchos se refieren al Sistema Operativo como "Linux", la verdad es que este nombre es el del nucleo del sistema, mejor conocido como "Kernel".
Este, es el componente esencial de todo sistema operativo. Su función principal es la de permitir la comunicación entre el hardware y las apliaciones que corren sobre este. Ademas administra la memoria y es donde se cargan los "drivers" o "controladores" de dispositivos.
En el caso de Windows, los Kernel son muy pequeños (de allí la necesidad de instalar tanto driver para todo), con, muchas veces, mucho menos controladores de los necesarios (La desventaja es que si retiras el periférico al cual cargaste es driver, windows lo seguirá cargando; es por eso que debes usar aplicaciones para limpiar el registro y el nucleo.
El Nucleo Linux, en cambio, es modular. Es decir, puedes compilar y agregar todos los módulos al sistema, pero el nucleo solo cargará los necesarios (Claro que irá detectando mientras arranca).
Uno tiene la posibilidad de crear un kernel linux a la medida de su hardware, y compilado para tal. Si bien la ganancia en performance no es mucha. El sistema se notará mucho mas agil al arranque.

Ventajas de la Manera Debian.


1.- El paquete final queda en .deb, facilmente instalable por aplicaciones como Gdeb.
2.- Puede ser facilmente eliminado con dpkg -r
3.- Puedes guardar el paquete en cualquier dispositivo extraible.

Ventajas de compilar un Kernel


1.- El sistema se notará mucho mas agil al arranque
2.- En caso de sistemas debian, puedes actualizar el kernel para obtener nuevas funcionalidades o soporte a nuevas tecnologías que su kernel actual no tenga.

Descargar un kernel:


En primer lugar, debe dirigirte a la página www.kernel.org


Junto a cada entrada del kernel notaras unas letras.



F: Full Source: Descargar la fuente completa del kernel.
V: View Patch: Para ver, de forma detallada los cambios realizados a los modulos del kernel.
VI: View Incremental: Un log con los detalles de cambios, de forma incremental.
C: Current: Una página con el sumario. Hay comentarios de Torvals en esta.

Para descargar, haz click en la F.
Y te saldrá esta pantalla.



A la cual, debes darle en "Guardar Archivo", en este caso "Save File", y luego esperas a que termine la descarga.

Compilar el Kernel



Por si ven algo raro en los Screenshots, es que cambie Gnome por KDE 4.2.4 sobre Debian Sid.

Cuando ya este listo, abres una consola, en mi caso usaré yakuake.

Ya con esta, debes instalar los siguientes paquetes:

apt-get install kernel-package libncurses5-dev fakeroot wget bzip2 build-essential


En mi caso, ese problema de paquetes sin resolver el por el cambio a kde 4, a ustedes probablemente les salga que está todo instalado. Luego, se dirigen a la carpeta (a travez de la consola, con el comando cd), en donde descargaron la fuente del kernel.

ls : Comando que cumple la funcion de listar las carpetas desnto del directorio (como dir en DOS)
cd : Ingresar a una carpeta. (es "cd nombrecarpeta" o "cd nombre*", recuerden que el "*" reemplaza una cadena de cadena de caracteres)



La ubicacion del kernel está resaltada. Luego deben descomprimirlo.

En caso de .tar.gz
tar xvzf linux-x.x.x.tar.gz (Ovbiamente las "x" debes reemplazarlas por los números que traiga)

Para tar.bz2
tar xvjf linux-x.x.x.tar.bz2.


Dale al enter y espera a que termine.


Cuando ya este listo, debes ingresar a la carpeta. Sencillamente coloca:

cd linux*

En esa parte, tienes 3 opciones.

make config (No te la recomiendo, hace muchas preguntas de hardware)

make menuconfig (la mas utilizada, acá debes tener instaladas las librerias ncurses. Debian: apt-get install ncurses-base)


make config (necesitas las librerias QT, apt-get install libqt3-dev)


Puedes elegir la forma que desees, en mi caso, uso menuconfig.

Acá estaba configurando el tipo de procesador del sistema.

Por lo general, la primera vez puedes dejar el kernel tal como está, y compilarlo tal cual. Ya si lo deseas, a medida que tomes experiecia, puedes ir quitando o agregando módulos.
Ovbiamente debes ser muy cuidadoso al seleccionar módulos. Si no activas el soporte SCSI, los pendrives y dispositivos extraibles no funcionarán bajo tu kernel. Lo mismo si desactivas el USB, nada que conectes por ese sistema lo hará. Lo mismo pasará si le quitas soporte de controlador a tu tarjeta de sonido, está no funcionará.

Bueno, ya habiendo terminado de configurar el kernel, debes compilarlo, la ventana te dirá que ejecutes "make" para compilar el kernel, pero como lo haremos a la manera Debian, debes ejecutar lo siguiente:

make-kpkg clean


make-kpkg --initrd kernel_image kernel_headers


La opcion --initrd crea una imagen initrd en el paquete que se guardará en /boot cuando instalemos el kernel.

La opcion "kernel_headers" es para crear las cabezeras del kernel, que si bien no son indispensables, hay muchos programas y módulos que los necesitan para instalarse, como por ejemplo el driver de Nvidia, o Ndiswrapper

Por lo general el tiempo que tu kernel demore en compilar, dependerá de la configuracion que hayas hecho sobre el mismo, y el tipo de procesador. Si agregaste muchos módulos, ovbiamente demorará mas. Suele tardar bastante. (en mi caso, casi 2 horas)


Puedes ir a tomerte un café si asi lo deseas.

Instalar el kernel.

Ya cuando termine la compilación. aparecerán 2 .deb en el directorio superior.
Para instalar es algo super sencillo. Ovbiamente debes estar en el directorio donde estan los paquetes.




dpkg -i linux-image-x.x.x.x.x_x.x.x.x.x.Custom_i386.deb
(mas rápido dpkg -i linux-image-*.deb)


dpkg -i linux-headers-x.x.x.x.x_x.x.x.x.x.Custom_i386.deb
(mas rápido dpkg -i linux-headers-*.deb)



Consejos:


Cuando descarges un kernel, debes hacerlo hacia una carpeta que no tenga espacios en su nombre, o no podras iniciar la compilacion.

Puedes darle un nombre al kernel agregando la opcion -append-to-version=TUNOMBRE.

Para incorporar módulos que no venian en el kernel, puedes utilizar el comando m-a. Ademas evitarás tener que reinicar cada vez que agregues un módulo.

Copyright (c) 2006 Alejandro Garrido Moya

Permission is granted to copy, distribute and/or modify this document under the terms od te GNU Free Documentation License, Ver 1.2 or any later published by the Free Sofware Foundation.

3ra Edicion: Actualizado y mejorado. 5 Julio 2009