Sei sulla pagina 1di 10

Compilar un Kernel en Debian, Ubuntu y derivados.

http://mogaal.com/articulos/kernel-a-la-debian.html

Compilar un Kernel en Debian, Ubuntu y derivados.


Manual para compilar un kernel, aplicar parches y compilar mdulos para Debian, ubuntu y derivados Alejandro Garrido Mota <garridomota@gmail.com>
1. Conceptos bsicos 2. Porqu compilar un kernel a la manera Debian? 2.1. Ejemplo prctico 3. Descargando y desempaquetando el kernel 4. Configurando el kernel 5. Compilando 6. Instalndolo 7. Gestionando mdulos 7.1. Module Assistant - Compilando y agregando mdulos 7.2. Mdulos no preparados para Debian 8. Aplicar parches al kernel 8.1. A la manera Debian 8.2. A la manera tradicional 9. Dnde consigo ms informacin? 10. TIPS y consejos 10.1. Copyrigth y licencia

1. Conceptos bsicos
Si posees conocimientos de GNU/Linux y sistemas operativos puedes aventurarte a la prxima seccin; en la presente discutiremos conceptos bsicos. Cuando hablamos de "Linux" es frecuente referirnos al sistema operativo y sus aplicaciones y no al ncleo del sistema. La realidad es que Linux es solamente el ncleo del sistema (tambin denominado kernel): componente de gran envergadura que hace operar nuestra computadora. Entre las funciones ms importantes del kernel: Administracin de la memoria del computador. Establecimiento de la comunicacin entre aplicaciones y dispositivos de hardware. Administracin de procesos (o tareas). Aunque no son las nicas, si son las de ms relevancia. Vale recalcar que el ncleo Linux se caracteriza por ser muy voltil y tener cleres desarrolladores al momento
1 de 10 23/06/12 20:15

Compilar un Kernel en Debian, Ubuntu y derivados.

http://mogaal.com/articulos/kernel-a-la-debian.html

de corregir un problema o agregar una nueva caracterstica al ncleo; recibiendo as gran cantidad de actualizaciones en poco tiempo. Dichas actualizaciones comnmente contienen nuevos mdulos, mejoras de seguridad, administracin de recursos y muchas otras caractersticas. Cmo averiguar que innovaciones incorpora determinado ncleo? Observando un archivo incorporado en el mismo llamado ChangLog. Asimismo es factible descargar y observar el archivo de texto plano Changelog desde la pgina oficial del proyecto. Muchas veces surgen dudas acerca de la necesidad de compilar el kernel cuando liberan una nueva versin: no debemos dudar, solamente se compila una nueva versin de kernel cuando tenemos dispositivos de hardware muy recientes y nos vemos forzados a migrar hacia una versin que incluya mdulos para el soporte de este. Otra razn se basa en que poseemos una versin muy antigua y optamos por actualizarlo para tener mejoras en la administracin de memoria, procesos, recursos, etc. Actualmente ocurre esto con la rama 2.4 y 2.6 del kernel Linux; algunos servidores poseen la 2.4 y compilan la versin de la rama (2.6.X) con el objetivo de mejorar la administracin de recursos, ya que esta ltima es ms eficaz. El kernel NO se actualiza, si deseas una nueva versin debes descargarla de la pgina oficial del proyecto y compilarla. Tambin puedes buscar un paquete (por ejemplo en los repositorios de Debian) con una versin ya compilada para tu arquitectura de hardware; evitando la tarea de compilar y desaprovechando la optimizacin del sistema.

2. Porqu compilar un kernel a la manera Debian?


Dejar de compilar un kernel por la vertiente clsica para hacerlo a la manera Debian (debian way) proporciona muchas ventajas: motivo a que se empaqueta se crea un paquete con extensin .deb. Cualquier buen administrador de sistemas sabe las principales ventajas de que se genere un paquete, entre las principales: Cuando tengamos que eliminar el kernel (quizs porque ya hayamos compilado una nueva versin, por ejemplo), lo nico que debemos hacer es utilizar la herramienta dpkg de la siguiente manera: dpkg -r TU_KERNEL. Donde TU_KERNEL es el nombre que le diste al paquete (ya ms adelante detallaremos esto). Para eliminar el kernel tambin puedes utilizar herramientas como apt-get, aptitude, o mejor an Synaptic para los usuarios novel que estn comenzando con Linux. Tener un paquete con nuestro kernel facilita guardarlo en un Pendrive, CD, DVD, o mejor an: si tenemos un servidor web es factible distribuirlo. El principal objetivo de esto es tener la posibilidad de instalar ese mismo kernel en varias mquinas. Debian est implementando esta caracterstica desde hace mucho aos, ofrece kernel's pre-compilados para tu computador en sus repositorios de paquetes, de manera que si eres un usuario final, te da pereza compilar el kernel o no ests en la necesidad de hacerlo tengas la posibilidad de elegir el paquete (kernel) entre la gran variedad que hay e instalarlo con algn gestor de paquetes

2 de 10

23/06/12 20:15

Compilar un Kernel en Debian, Ubuntu y derivados.

http://mogaal.com/articulos/kernel-a-la-debian.html

como aptitude, apt, dpkg.

2.1. Ejemplo prctico


Imagina que en tu trabajo gestionas informacin de gran envergadura y no deseas que los usuarios puedan hacer uso de pendrives ni dispositivos extrables para trasladar dicha informacin. Asimismo tu organizacin decide migrar hacia tecnologa inalmbrica, ergo: debes configurar el kernel para adicionar el soporte del chipset de tu tarjeta inalmbrica; esto porque tuviste la mala suerte de que por defecto Linux no lo inclua. Bsicamente lo que debes hacer es crear un paquete (por ser paquete: fcil distribucin, instalacin y purgado) con el kernel de Debian optimizado: deshabilitando los puertos USB y agregando el mdulo que ofrece soporte a tu tarjeta inalmbrica. El problema radica en que tu organizacin posee 1200 usuarios (cada uno con su mquina), sera poco prctico y absurdo enviar el grupo de soporte a realizar el proceso de compilacin mquina por mquina. Pero como t eres buen administrador de red: tienes un mirror de Debian personalizado donde subes paquetes desarrollados o modificados por ti (o por tu grupo de administracin/soporte de sistemas). As te motivas a compilar dicho kernel optimizado y lo subes al mirror. Para garantizar la convergencia de dicho kernel en todas las mquinas utilizas herramientas como cfengine, puppet y pkgsync. Si tienes curiosidad de como hacer ese mirror personalizado: busca informacin sobre reprepro.

3. Descargando y desempaquetando el kernel


En principio, para compilar un kernel es evidente que debes descargar el cdigo fuente del mismo. Para eso ingresamos en la pgina oficial del proyecto donde se encuentran todos los kernel oficiales de Linux, desde la primera versin hasta la ltima. Cuando los descarguemos vendr empaquetado y comprimido en alguno de los siguientes formatos: .tar.bz2 o .tar.gz . Es indiferente cual se descarguen, explicar como descomprimir y desempaquetar ambos tipos de formato. Lo tradicional es descomprimir el kernel en el directorio /usr/src, sin embargo no olvides que tienes la libertad de hacerlo en donde caprichosamente desees. En el momento de escribir el artculo la versin del kernel es 2.6.15 y la desempaquete y descomprim en /usr/src, directorio donde se trabaja para todo lo referente con el kernel y los mdulos. Para quienes se descargaron el .tar.gz :

3 de 10

23/06/12 20:15

Compilar un Kernel en Debian, Ubuntu y derivados.

http://mogaal.com/articulos/kernel-a-la-debian.html

tar xvzf linux-2.6.15.tar.gz

Para quienes se descargaron el .tar.bz2:


tar xvjf linux-2.6.15.tar.bz2

Notar la j para el de extensin .tar.bz2 Luego necesitamos ingresar al directorio donde se descomprimi y desempaquet el kernel para poder configurarlo y compilarlo, ingresamos al directorio:
cd linux-2.6.15

4. Configurando el kernel
Una vez dentro del directorio, necesitamos limpiarlo de todo archivo de configuracin que tenga. NOTA: Podemos obviar este paso para la primera vez que nos lo descarguemos, ya que este viene completamente listo para compilar. Pero una vez que terminas la compilacin y por cualquier razn quieres volver a compilarlo, no es necesario que tengas que descomprimirlo y desempaquetarlo de nuevo, puedes reutilizar ese mismo cdigo y es all cuando tienes que eliminar (limpiar) todos los archivos que se generaron con la compilacin anterior. Para "limpiar" los fuentes del kernel:
make mrproper

Ahora debemos configurarlo, esto quiere decir decidir cuales mdulos deseamos que tenga (o que no tenga) una vez compilado. Como es caracterstico del Software Libre: tenemos varias maneras de hacer las cosas, hablemos sobre 3 formas de configurar el kernel: 1era alternativa: make config <-- Hay que tener algo de experiencia, si no la tienes no te recomiendo seguir este camino ya que hace muchas preguntas de hardware. 2da alternativa: make menuconfig <-- Es muy cmodo hacer la configuracin por este mtodo porque posees un men muy sencillo he interactivo. NOTA: Necesitas tener instalado las las libreras ncurses, en debian: aptitude install libncurses5-dev 3ra alternativa: make xconfig <-- Debes tener instalado y en funcionamiento el servidor X, ya que toda la configuracin se hace grficamente (haciendo uso del sistema de ventanas). NOTA: Necesitas tener instaladas las libreras QT, en debian
aptitude install libqt3-dev

Para la configuracin utilizar la segunda alternativa, es decir, make menuconfig, como lo hago siempre. Ests en la libertad de utilizar la que quieras. Sin embargo te

4 de 10

23/06/12 20:15

Compilar un Kernel en Debian, Ubuntu y derivados.

http://mogaal.com/articulos/kernel-a-la-debian.html

recomiendo el segundo mtodo debido a que no necesitas estar en entornos de escritorio ni tener funcionando el servidor X, adems que tiene una interfaz muy simple e interactiva. Para comenzar la configuracin:
make menuconfig

Cuando se dediquen a configurar el kernel recuerden ser muy precavidos seleccionando o habilitando los mdulos. Si tenemos dispositivos como FlashDrive (o Pendrive) es indefectible activar el soporte SCSI (especficamente soporte para discos SCSI), ya que estos son emulados como discos SCSI en Linux. Si desactivas el soporte para CDROM, evidentemente la unidad de CDROM no funcionara una vez instalado. De igual manera pasa si desactivamos el soporte USB, no funcionara todo los que conectemos por el puerto USB.

5. Compilando
Terminada la configuracin del kernel lo compilaremos. Debido a que lo estamos haciendo a la Debian way es necesario que tengamos instalado un paquete llamado kernel-package, el cual suministrar las herramientas necesarias para poder compilar y generar el paquete con nuestro kernel, para instalarla: aptitude install kernel-package. Antes de comenzar la compilacin debemos estar en el directorio donde se encuentra el cdigo fuente del kernel y luego ejecutar lo siguiente:
make-kpkg clean make-kpkg --initrd kernel_image kernel_headers

Los que hayan compilado un kernel de Linux este comando equivale a: make
clean, make bzImage y make modules

dep, make

La opcin --initrd crea una imagen initrd en el paquete que se guardar en /boot cuando instalemos el kernel (recordar que solo estamos compilando y empaquetando, no instalando). El comando anterior crear dos paquetes con extensin .deb en el directorio superior. Un paquete ser el kernel y el otro los kernel-headers. La opcin de kernel_headers es opcional, yo la utilizo debido a que muchos programas y mdulos (ver la seccin Gestin de mdulos) necesitan tener los headers del kernel que se est usando para poder ser instalados, ejemplo: el driver de nvidia, VMware, ndiswrapper, madwifi, otros. NOTA: El tiempo de compilacin es proporcional a la configuracin que hayas hecho y a tu poder de computo. Si incluiste muchjos mdulos se demorar ms. Hay que tener paciencia, es muy frecuente que se tarde bastante.

5 de 10

23/06/12 20:15

Compilar un Kernel en Debian, Ubuntu y derivados.

http://mogaal.com/articulos/kernel-a-la-debian.html

6. Instalndolo
Una vez que termina la compilacin y es corroborada la existencia de los dos paquetes en el directorio superior es el momento de instalarlo. La instalacin es muy trivial, debemos ejecutar en el directorio donde estn los paquetes:
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

Felicitaciones! Con esto terminas la instalacin del kernel, ya podras reiniciar la mquina e iniciar con tu nuevo kernel.

7. Gestionando mdulos
7.1. Module Assistant - Compilando y agregando mdulos
Module Assistant es una herramienta para la gestin de mdulos ya empaquetados (preparadas sus fuentes con un debian/rules) para Debian. Nos permite compilar, construir e instalar mdulos del kernel sin necesidad de reiniciar el computador ni recompilar el kernel. No olvidar que permite gestionar slo los mdulos que estn preparados para Debian (y derivados, p.e Ubuntu). Debes tener los headers de nuestro kernel Para entender su funcionamiento se elaborar un ejemplo con algn mdulo. Arbitrariamente escog uno que permite hacer uso de cualquier tarjeta inalmbrica que implemente chipset atheros (por ejemplo mi tarjeta inalmbrica LanPro :-). Los mdulos de madwifi nos habilitarn el soporte para estas tarjetas, por lo que debemos agregar los mdulos de madwifi. Ya dichos mdulos vienen preparados para debian y se encuentran en los repositorios oficiales (en la seccin de non-free). Debemos instalar (descargar) el cdigo fuente del mdulo madwifi, para eso instalaremos el paquete madwifi-source el cual trae empaquetado las fuentes de estos mdulos. Motivo que es condicin sine qua non que el mdulo deba estar preparado para debian, es frecuente que la mayora de los que queramos instalar estn en los repositorios oficiales de Debian.
aptitude install madwifi-source

Se descargar e instalar el paquete con las fuentes de los mdulos en /usr/src

6 de 10

23/06/12 20:15

Compilar un Kernel en Debian, Ubuntu y derivados.

http://mogaal.com/articulos/kernel-a-la-debian.html

/modules/madwifi. Si ingresan al directorio de las fuentes podrn notar una carpeta debian/, la cual contiene las reglas para la construccin del paquete. Por eso hice tanta referencia en que module-assistant debe ser usado para mdulos preparados nicamente para debian o derivados.
m-a prepare madwifi

El argumento prepare determinar si tenemos todo lo necesario para la compilacin del mdulo, si no, module-assistant se encarar de instalar lo que haga falta. Es muy tpico que nos falten los cabeceras del kernel (kernel-headers), ya estas se se necesitan para construir todos los mdulos (no slo de madwifi). Una vez corroborado por m-a que tenemos todo lo necesario para compilar el mdulo procedemos a compilarlo:
m-a build madwifi

La compilacin generar un paquete .deb (paquete de debian) el cual contiene el mdulo para nuestro kernel, lo que faltara es instalar el paquete y cargar el mdulo para usarlo (no hace falta reiniciar el computadora).
m-a install madwifi

Con esto ya tienes el mdulo instalado y listo para funcionar funcionar. El ltimo comando lo que hace es instalar el paquete .deb al que hicimos referencia anteriormente. Ya el mdulo est instalado, faltara cargarlo (en la mayora de los sistemas de carga al conectar la tarjeta).
modprobe ath_pci

Consulta la seccin de tips para encontrar una manera mas resumida de ejecutar todos estos pasos ;-)

7.2. Mdulos no preparados para Debian


Es muy probable que en la seccin anterior se hayan preguntado que hacer con los mdulos no preparados para debian: si hay solucin para ellos, slo que es un poco ms laboriosa y tedioso el proceso. De igual manera tomar un ejemplo para explicar los pasos a seguir. Hace unos meses publicaron un exploit que permita a cualquier usuario del sistema obtener privilegios de administracin (root). Como es caracterstico de la mayora de las aplicaciones de gran envergadura en el mbito de Software libre, el parche para corregir esta vulnerabilidad se desarroll prcticamente enseguida. El exploit se llama "vmsplice" y el parche (era un mdulo realmente) consista en un mdulo que cargabas que impeda el funcionamiento del exploit.

8. Aplicar parches al kernel


7 de 10 23/06/12 20:15

Compilar un Kernel en Debian, Ubuntu y derivados.

http://mogaal.com/articulos/kernel-a-la-debian.html

Para aplicar un parche hacemos uso del programa patch. Es probable que lo tengamos instalado, de no ser as:
aptitude install patch

Una vez instalado se puede aplicar el parche distintas formas:

8.1. A la manera Debian


Una vez descargado el parche (normalmente un archivo .patch) lo copiamos al directorio donde estn las fuentes del kernel (depende donde no los hayamos descargado, siguiendo el tutorial: /usr/src/linux-version) y al compilarlo agregar:
make-kpkg --initrd --added-patches=MI-PARCHE.patch kernel_image kernel_headers

make-kpkg se encargar de aplicar el parche y compilar nuevamente el kernel, notar que es le mismo comando (make-kpkg) que hemos venido usando a lo largo del tutorial. Adjunto al argumento --added-patches= debers colocar, separado por comas, los parches a aplicar al kernel.

8.2. A la manera tradicional


Lo descargamos y copiamos donde estn las fuentes del kernel y ejecutamos:
patch -p0 < nombre-del-parche.patch

Finalmente recompilamos el kernel siguiendo los pasos del tutorial.

9. Dnde consigo ms informacin?


Si deseas averiguar e indagar sobre otras opciones y argumentos que puedas utilizar con make-kpkg para compilar el kernel te recomiendo leer las pginas del manual (estn completamente en espaol). Para eso: man make-kpkg Una vez descargado el cdigo fuente del kernel leer el archivo README incluido en el mismo.

10. TIPS y consejos


Todos los kernels que han existido se encuentran en: http://kernel.org/pub/linux /kernel Para averiguar los cambios que sufre un determinado release del kernel tendrs que ver el archivo Changelog. Si ya tenemos un kernel configurado y no queremos reiterar el tedioso paso de configurar nuevas versiones podemos hacemos lo siguiente: En /boot debe estar
8 de 10 23/06/12 20:15

Compilar un Kernel en Debian, Ubuntu y derivados.

http://mogaal.com/articulos/kernel-a-la-debian.html

nuestra configuracin anterior, el archivo que contiene tu configuracin anterior se llama config-VERSION_KERNEL. Por ejemplo el mio se llama config2.6.14. Ese archivo lo tenemos que copiar en directorio donde estn las fuentes del kernel con el nombre .config (recuerden el "." que es importante, sin l no funcionar el proceso). En mi caso lo copi de esta manera:
cp /boot/config-2.6.14 /usr/src/linux-2.6.15/.config make oldconfig

Una vez que hacemos eso ya tenemos lista la configuracin, podemos verificar usando cualquiera de los 3 mtodos explicados en el captulo 4. Notaremos que tiene una configuracin diferente a la que viene por defecto. Recordar que para la configuracin del kernel con make config debemos conocer nuestro hardware, cuando digo conocer me refiero a que debemos de saber algunos dispositivos de hardware que posee nuestro ordenador. Por eso si eres medio novato te recomiendo que te vayas por el make menuconfig Si compilars ms de un kernel puedes colocarle un nombre a cada compilacin para identificar al paquete .deb en el directorio superior. Para hacer esto necesitas agregar --append-to-version=NOMBRE. Como ya se imaginan, donde dice nombre es donde colocan el nombre que caracterice a cada kernel. Quieres ejecutar con un solo comando todos los pasos para tener en funcionamiento un mdulo con Module Assistant? Pues el truco es ejecutar:
m-a a-i madwifi a-i

Significa "auto-install", equivale a prepare,build e install

Si tenas un kernel con mdulos ya instalados (por ejemplo, madwifi, nvidia, etc) e instalas un nuevo kernel perders el soporte de estos mdulos en tu nuevo kernel. Ergo: tienes que volver a compilarlos, no es tan trfico porque afortunadamente tienes la herramienta Module Assitant Recuerda que no ests vetado de google. Si se presenta algn problema: www.google.com

10.1. Copyrigth y licencia


Copyright (c) 2006 Alejandro Garrido Mota. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled "GNU Free Documentation License".

9 de 10

23/06/12 20:15

Compilar un Kernel en Debian, Ubuntu y derivados.

http://mogaal.com/articulos/kernel-a-la-debian.html

1ra edicin. Versin 1.0: 15 Junio del 2006 2da edicin. Versin 1.3: Mejorado y actualizado el artculo. 28 de noviembre del 2006 3ra edicin. Versin-1.4: Agregando informacin acerca de Gestin de mdulos y parches. 4 Febrero del 2008

10 de 10

23/06/12 20:15

Potrebbero piacerti anche