Está en la página 1de 5

http://www.esdebian.

org/articulos/23843/compilar-kernel-estilo-debian

Compilar un kernel al estilo Debian

Un breve manual donde se enseña a compilar un kernel Linux a la manera Debian.

Alejandro Garrido Mota

1. Conceptos básicos
2. ¿Porqué compilar un kernel a la manera Debian?
3. Descargando y desempaquetando nuestro nuevo kernel
4. Configurando el kernel
5. Compilando
6. Instalando el kernel
7. ¿Dónde consigo más información?
8. TIPS y consejos
9. Copyrigth y licencia

1. Conceptos básicos

Si ya tienes experiencia en GNU/Linux y sistemas operativos puedes saltar esta sección y comenzar
desde la sección 1.2.
Cuando comentamos acerca de Linux es muy común que nos estemos
refiriendo mas que todo al Sistema Operativo con sus aplicaciones y no al núcleo del sistema como tal.
La realidad es que el Sistema Operativo(SO para acortar) Linux es _solamente_ el núcleo del sistema,
que también es llamado kernel. Elkernel es el componente más importante y es quien hace
funcionar todo el sistema, sin el kernel no podría funcionar ninguna otra aplicación. Algunas de las
funciones del kernel son:

• Administrar la memoria del computador


• Establecer la comunicación entre las aplicaciones y los dispositivos de hadware
• Administrar los procesos
• Otros (No me acuerdo de otro más :-P)

Es importante recordar que el kernel recibe grandes cantidades de actualizaciones en muy poco tiempo,
esas actualizaciones contienen en la mayoría de los casos módulos nuevos, mejoras de seguridad,
mejoras en la administración de recursos, etc. ¿Cómo saber que incorpora cada nuevo Kernel que se
libera? Mirando un archivo llamado ChangLog que está tanto en la misma página de donde se
descargar el kernel como dentro del kernel una vez descargado.

2. ¿Porqué compilar un kernel a la manera Debian?

Lo mas seguro es que usted se esté preguntado porqué compilar un kernel a la manera de Debian y no
hacerlo a la manera clásica o la tradicional. El hecho de compilarlo a la manera debian nos proporciona
ciertas ventajas que compilarlo a la tradicional. Cuando a la 'debian way' este se empaqueta
automáticamente en un archivo que tiene extensión .deb, es decir, se crea un paquete. El simple hecho
de que se genere un paquete con nuestro kernel compilado nos proporciona las siguientes ventajas:

• Cuando tengamos que eliminar el kernel debido a que probablemente ya tengamos uno nuevo,
lo único que tenemos que utilizar es la herramienta dpkg de la siguiente forma: dpkg -r
TU_KERNEL. Donde tu kernel es el nombre que le diste al paquete(ya más adelante veremos
como). Para eliminar el kerneltambién puedes utilizar herramientas como apt-get, aptitude, o
mejor aún Synaptic para los novatos que están empezando o las personas que se sientan
cómodas usándolo.
• Al poder tener el kernel en un paquete se no hace muy fácil guardarlo en un Pendrive, CD,
DVD, o mejor aún, si tenemos un servidor web podríamos subirlo para que otros se descarguen
el paquete con el kernel y utilicen nuestro propio kernel. Comúnmente el objetivo de esto es
poder instalar ese mismo kernel en varias máquinas.
Por ejemplo, si tienen 20 máquinas en su oficina y van a actualizar el kernel a todas,
sería muy absurdo compilar el kernel en para cada una se las máquinas, pero sería inteligente y
astuto utilizar herramientas de Debian para poder crear un kernel genérico, el cual nos
proporcionará un paquete con elkernel, el cual vamos a poder distribuirlo en todas las máquinas
mediante CDs, servidor Web, FTP, samba, pendrive, otros. Y así poder instalar rápidamente (en
pocos minutos si no surge error) el kernel para las 20 máquinas.

3. Descargando y desempaquetando nuestro nuevo kernel

Para instalar un nuevo Kernel es necesario descargar el código fuente del mismo en la página
oficial que es donde se encuentran todos los kernel de Linux, desde la primera versión hasta la última.
Cuando hacemos la descarga de un kernel siempre no lo encontraremos empaquetado y comprimido en
alguno de estos formatos: .tar.bz2 o .tar.gz . Es indiferente cual se descarguen, de todas formas voy a
explicar como se hace para descomprimir y desempaquetar para los dos tipos de formato. Lo común es
que descomprimas el kernel en /usr/src pero si deseas hacerlo en otra parte posees la libertad ;-). Por
ejemplo actualmente yo me bajé la versión 2.6.15 y la descomprimí en /usr/src , que es el directorio
donde normalmente se trabaja para todo lo que tiene que ver con kernls y módulos.

• Para los que descargaron el .tar.gz :

tar xvzf linux-2.6.15.tar.gz

• Para los que descargaron el .tar.bz2:

tar xvjf linux-2.6.15.tar.bz2

Notar la ``j'' para el de extensión .tar.bz2

• Luego de eso necesitamos ingresar al directorio donde se descomprimió y desempaqueto


el kernel para poder configurarlo y compilarlo, para ingresar al directorio:

cd linux-2.6.15

4. Configurando el kernel

Una vez dentro del directorio donde hemos descomprimido y desempaquetado el kernel, necesitamos
limpiar el kernel de todo archivo de configuración que tenga el mismo. NOTA: Normalmente podemos
obviar este paso para la primera vez que nos descarguemos el kernel, ya que este viene completamente
listo para compilar. Pero una vez que terminas la compilación del mismo y por cualquier razón quieres
volver a compilar dicho kernel, no es necesario que tengas que descomprir y desempaquetarlo
de nuevo, puedes reutilizar ese código para volver a compilar y es allí cuando tienes que
eliminar(limpiar) todos los archivos que se generaron con la compilación anterior.

Para "limpiar" los fuentes del kernel:

make mrproper

Ahora tenemos que configurarlo. Cuando hablamos de configurar nos referimos a decidir que módulos
queremos posea el kernel una vez compilado, que módulos no. Como siempre pasa en los referente al
Software Libre, siempre hay varias maneras de hacer las cosas, lo que quiero decir es que tenemos
muchas maneras de configurar el kernel. Aquí les presento 3 formas:

1era forma: make config

2da forma: make menuconfig NOTA: Necesitas tener instalado las las librerías ncurses, en debian:
aptitude install ncurses-base

3ra forma: make xconfig NOTA: Las librerías QT las puedes instalar con apt de esta manera.
aptitude install libqt3-dev

Para la configuración utilizaré la segunda forma, que es como lo he hecho siempre, por supuesto estás
en la libertad de utilizar la que quieras, sin embargo te recomiendo la segunda forma, debido a que no
necesitas estar en entornos de escritorio ni tener levantado el servidor X, además que es muy interactiva
y simple.

Para empezar la configuración:

make menuconfig

Es importante recordar que cuando se dediquen a configurar el kernel sean muy cuidadosos
seleccionando cuales módulos tendrá y cuales no. Por ejemplo si tenemos dispositivos como FlashDrive
o también llamados Pendrive es indispensable que activemos el soporte SCSI en
el kernel(específicamente soporte para discos SCSI) debido a que estos dispositivos son emulados
como discos SCSI tanto Linux como en otros sistemas operativos. También debemos tener en cuenta
que si tenemos discos duros SCSI y no le activamos el soporte en el kernel, estaría demás decir que
evidentemente no funcionarán. Si desactivas el soporte para CDROM, evidentemente la unidad de
CDROM no funcionará una vez que instalemos y usemos el kernel. De igual manera pasa si
desactivamos el soporte USB en el kernel, no funcionaría todo los que conectemos por el puerto USB.

5. Compilando

Una vez que terminamos de configurar el kernel tenemos que compilarlo, como lo vamos a hacer de la
forma Debian es necesario que tengamos instalado un paquete llamado "kernel-package" el cual nos va
a suministrar las herramientas necesarias para poder compilar y generar el paquete con nuestro
debido kernel, para instalar la herramienta: aptitude install kernel-package. Bien para
empezar la compilación debemos estar en el directorio donde se encuentra el código fuente del kernel y
luego ejecutar lo siguiente:

make-kpkg clean

make-kpkg --initrd kernel_image kernel_headers

A manera de información para los que han compilado un kernel anteriormente de Linux mas no a la
manera Debian les informo que este comando equivale en la manera clásica a teclear make dep,
make clean, make bzImage y make modules
La opción "--initrd" crea una imagen initrd en el paquete que se guardará en /boot cuando instalemos
el kernel(recordar que estamos compilandolo nada mas).

El resultado del comando anterior va a ser crear dos paquetes con extensión .deb en el directorio
superior de donde está el código fuente del kernel. Un paquete va a ser el kernel completo y el otro va a
ser los kernel-headers.

La opción de "kernel_headers" que colocamos para la compilación es opcional, yo personalmente la


coloco debido a que muchos programas y módulos necesitan tener los kernel headers para ser
instalados, por ejemplo: el driver de nvidia, VMware, ndiswrapper, madwifi, otros. Si no necesitas los
kernel headers borra la palabra "kernel_headers" del comando anterior.

NOTA: El tiempo que dura compilar el kernel es dependiente de la configuración que hayas hecho en el
mismo y de la velocidad y tipo de procesador que tengas. Si agregaste muchos módulos el kernel
tardará más, pero si son pocos la compilación será rápida. Hay que tener paciencia, es muy común que
se tarde bastante.

6. Instalando el kernel

Una vez que termina la compilación y notamos la existencia de los dos paquetes en el directorio superior
es hora de instalar el kernel. La instalación es súper sencilla, debemos ejecutar lo siguiente (recuerda
que tienes que estar en el directorio superior):

dpkg -i TU_KERNEL.deb
dpkg -i TU_KERNEL-HEADERS.deb

Por ejemplo, en mi caso fue así:

dpkg -i kernel-image-2.6.15_10.00.Custom_i386.deb

dpkg -i kernel-headers-2.6.15_10.00.Custom_i386.deb

7. ¿Dónde consigo más información?

• Si quieres saber que otros parámetros le puedes pasar al make-kpkg para compilar el kernel
puedes leerte el manual que está completamente en español y fácil de entender. Para leer el
manual:
man make-kpkg

8. TIPS y consejos

• Todos los kernels que han existido en Linux se encuentran en: http://kernel.org/pub/linux/kernel
• Consultar el manual de make-kpkg que tiene documentación sencilla y en español. man make-
kpkg
• Si ya tenemos un kernel anterior configurado y no queremos repetir el paso de la configuración
debido a que perdemos mucho tiempo o nos da flojera podemos hacemos lo siguiente: En /boot
debe estar nuestra configuración anterior, normalmente el archivo que contiene tu configuración
anterior se llama config-VERSION_KERNEL. Por ejemplo el mio se llama config-2.6.14 . Ese
archivo lo tenemos que copiar en directorio donde están las fuentes del kernel con el nombre
".config"(recuerden el "." que es súper importante, sin el no nos va a funcionar. En mi caso lo
copié de esta manera:
cp /boot/config-2.6.14 /usr/src/linux-2.6.15/.config

Una vez que hacemos eso ya esta configurado el kernel, podemos verificar entrando a la
configuración del mismo usando cualquiera de las 3 maneras nombradas en el capítulo 4 y
notaremos que tiene una configuración diferente a la que viene por defecto.

• Es importante recordar que si vamos a configurar el kernel con "make config" tenemos que
conocer algo de hadware, cuando digo conocer me refiero a que tenemos que saber algunos
dispositivos de hadware que posee nuestro ordenador. Por eso si eres medio novato te
recomiendo que te vallas por el "make menuconfig"
• Si vas a compilar varios kernel puedes colocarle su nombre a cada compilación para poder
identificar el paquete .deb en el directorio superior. Para hacer esto necesitas agregar una
opción

-append-to-version=NOMBRE y como ya saben donde dice nombre es donde colocan el


nombre que caracterice a cada kernel.

• Si quieren incorporar módulos que no vinieron con el kernel pueden utilizar module-assistant,
que posee bastante documentación. Además que es muy útil por que nos evitar reiniciar la
computadora una vez que incorporemos módulos al kernel.