Compilar un Kernel al estilo Debian
Transcripción
Compilar un Kernel al estilo Debian
Compilar un Kernel al estilo Debian 1 de 6 http://mogaal.com/articulos/kernel-a-la-debian.html Compilar un Kernel al estilo Debian Un simple manual donde se enseña a compilar un kernel Linux a la manera Debian(Versión 1.1). Alejandro Garrido Mota <[email protected]> 1. 2. 3. 4. 5. 6. 7. 8. 9. Conceptos básicos ¿Porqué compilar un kernel a la manera Debian? Descargando y desempaquetando nuestro nuevo kernel Configurando el kernel Compilando Instalándolo ¿Dónde consigo más información? TIPS y consejos Copyrigth y licencia 1. Conceptos básicos Si ya tienes experiencia en GNU/Linux y sistemas operativos puedes directamente al capítulo número 2. Cuando hablamos de Linux es muy común que nos estemos refiriendo más que todo al Sistema Operativo con sus aplicaciones y no al núcleo del sistema, como debería ser lo correcto. Realmente el Sistema Operativo Linux es solamente el núcleo del sistema(también denominado kernel). El núcleo es el componente más importante y es quien hace funcionar todo el sistema. Sin este, en nuestro computador no podría funcionar ninguna aplicación. Entre las funciones más importantes del núcleo de linux tenemos son: Administrar la memoria del computador Establecer la comunicación entre las aplicaciones y los dispositivos de hadware Administrar los procesos El kernel recibe grandes cantidades de actualizaciones en muy poco tiempo, comúnmente estas contienen nuevos módulos, mejoras de seguridad, mejor administración de recursos, etc. ¿Cómo saber que incorpora cada nuevo Kernel que se libera? Observando el archivo llamado ChangLog que está dentro del paquete donde se encuentra el kernel, o sino en la página oficial del proyecto. Como mencionamos anteriormente, el kernel recibe muchas actualizaciones en muy poco tiempo, pero ¿Tengo que compilarlo cada vez que liberan una versión? No. Solamente se compila cuando tenemos dispositivos de hardware muy nuevos y nos veamos forzados a migrar a un kernel que incluya los módulos con soporte para estos. Otra razón para compilar una nueva versión es que poseemos uno muy viejo y optamos por la disyuntiva de actualizarlo para poseer mejoras con la administración de memoria, procesos y recursos para generalizar.[1] El kernel NO se actualiza, si quieres una nueva versión tienes que descargarla de la página oficial del proyecto y compilarla(en lo que consiste este tutorial). 25/09/2007 02:38 p.m. Compilar un Kernel al estilo Debian 2 de 6 http://mogaal.com/articulos/kernel-a-la-debian.html [1] Actualmente pasa esto con la rama 2.4 y 2.6 del kernel. Muchos servidores poseen la 2.4 y compilan un nuevo kernel(2.6.X) porque este maneja mucho mejor la memoria y los recursos. 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 Debian(a la debian way) y no hacerlo a la manera clásica. El hecho de compilarlo a la manera debian nos proporciona muchas ventajas, ya que este se empaqueta automáticamente en un archivo con extensión .deb, es decir, se crea un paquete. El hecho de que se genere un paquete con nuestro kernel compilado nos proporciona ventajas como: Cuando tengamos que eliminar el kernel(quizás porque ya hemos compilado una nueva versión), lo único que tenemos que utilizar es la herramienta dpkg de la siguiente manera: dpkg -r TU_KERNEL. Donde TU_KERNEL es el nombre que le diste al paquete(ya más adelante hablaremos sobre esto). Para eliminar el kernel también puedes utilizar herramientas como apt-get, aptitude, o mejor aún Synaptic para los novatos que están empezando(o los que se sientan cómodos usándolo). Al poseer un paquete con el kernel resulta muy trivial guardarlo en un Pendrive, CD, DVD, o mejor aún, si tenemos un servidor web podríamos distribuirlo para que otros se descarguen el paquete[2] y utilicen nuestro propio kernel. El principal objetivo de esto es tener la posibilidad de instalar ese mismo kernel en varias máquinas. Por ejemplo, si tienen 20 máquinas en su oficina y le van actualizar el kernel a todas, sería muy absurdo compilarlo en cada una de las computadoras, pero sería inteligente y astuto utilizar herramientas de Debian[3] para poder crear un kernel genérico, el cual nos proporcionará un paquete con el kernel, donde podremos distribuirlo en todas las máquinas mediante CDs, servidor Web, FTP, samba, pendrive, otros. De manera de poder instalar rápidamente (en pocos segundos si no surge error) el kernel para las 20 máquinas. [2] Debian nos facilita esto. Ofrece kernels pre-compilados para tu computador en sus repositorios de paquetes, de manera que si eres un novato o te da pereza compilar no estés en la necesidad de hacerlo. El usuario final lo único que tiene que hacer es elegir el paquete(kernel) entre la gran variedad que hay he instalarlo con el gestor de paquetes(aptitude, apt, dpkg). [3] Es una herramienta llamada kernel-package el que nos permite crear el paquete y hacer la compilación a la "debian way" 3. Descargando y desempaquetando nuestro nuevo kernel Para instalar un nuevo Kernel es necesario descargar el código fuente del mismo de la página oficial del proyecto que es donde se encuentran todos los kernel oficiales de Linux, desde la primera versión hasta la última. Cuando hacemos la descarga no los encontraremos empaquetado y comprimido en alguno de estos dos formatos: .tar.bz2 o .tar.gz . Es indiferente cual se descarguen, de igual manera explicaré como se hace para descomprimir y desempaquetar para esos dos tipos de formato. 25/09/2007 02:38 p.m. Compilar un Kernel al estilo Debian 3 de 6 http://mogaal.com/articulos/kernel-a-la-debian.html Lo común es que descomprimas el kernel en el directorio /usr/src, pero tienes la libertad de hacerlo en otro directorio. 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 kernel y los módulos para este. Para quienes se descargaron el .tar.gz : 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 extensión .tar.bz2 Luego de eso necesitamos ingresar al directorio donde se descomprimió y desempaquetó 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 limpiarlo de todo archivo de configuración que tenga el mismo. NOTA: Normalmente 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 compilación del mismo y por cualquier razón quieres volver a compilarlo, no es necesario que tengas que descomprimirlo y desempaquetarlo de nuevo, puedes reutilizar ese mismo código 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. Al hablar de configurar nos referimos a decidir que módulos queremos que tenga o que no tenga nuestro kernel una vez compilado. Como es común en el Software Libre, tenemos varias maneras de hacer las cosas y no estamos atados a una sola. Aquí les explico las 3 formas de configurar el kernel: 1era forma: make config <-- Para esta hay que tener algo de experiencia debido a que te hacen muchas preguntas de hadware, si tienes poca experiencia no te recomiendo hacerlo por este camino. 2da forma: make menuconfig <-- Es muy cómodo hacer la configuración ya que posees un menú muy sencillo he interativo. NOTA: Necesitas tener instalado las las librerías ncurses, en debian: aptitude install libncurses5-dev 3ra forma: make xconfig <-- Es requisito tener el servidor X instalado y en funcionamiento ya que toda la configuración se hace gráficamente, es decir, haciendo uso del sistema de ventanas. NOTA: Necesitas poseer instaladas las librerías QT, en debian 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 debido a que no necesitas estar en entornos de escritorio ni tener funcionando el servidor X, además que es muy interactiva y simple. 25/09/2007 02:38 p.m. Compilar un Kernel al estilo Debian 4 de 6 http://mogaal.com/articulos/kernel-a-la-debian.html 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 quieren tener y cuales no. Por ejemplo si tenemos dispositivos como FlashDrive(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 en Linux. 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ían. Si desactivas el soporte para CDROM, evidentemente la unidad de CDROM no funcionaría una vez que instalemos y usemos el kernel. De igual manera pasa si desactivamos el soporte USB, no funcionaría todo los que conectemos por el puerto USB. 5. Compilando Una vez que terminamos de configurar el kernel tenemos que compilarlo, debido a que lo estamos haciendo a la "Debian way" 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 kernel, para instalar la herramienta: aptitude install kernel-package. 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, 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 solo estamos compilándolo). 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 o source de nuestro 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 headers del kernel que se está usando para poder ser instalados, por ejemplo: el driver de nvidia, VMware, ndiswrapper, madwifi, otros. Si no necesitas los kernel headers borra 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. Instalándolo Una vez que termina la compilación y notamos la existencia de los dos paquetes en el directorio superior es el momento de instalarlo. La instalación es muy sencilla, debemos ejecutar lo siguiente (recuerda que tienes que estar en el directorio superior): 25/09/2007 02:38 p.m. Compilar un Kernel al estilo Debian 5 de 6 http://mogaal.com/articulos/kernel-a-la-debian.html 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 Una vez descargado el código fuente del kernel leer el archivo README que viene dentro del mismo. 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 configurado y no queremos repetir el tedioso paso de configurar nuevas versiones podemos hacemos lo siguiente: En /boot debe estar nuestra configuración anterior, 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 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 Una vez que hacemos eso ya tenemos lista la configuración, podemos verificar usando cualquiera de los 3 métodos explicados en el capítulo 4. 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 sobre nuestro 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 vayas 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 porque nos evita reiniciar la computadora una vez que incorporemos módulos al kernel. 25/09/2007 02:38 p.m. Compilar un Kernel al estilo Debian 6 de 6 http://mogaal.com/articulos/kernel-a-la-debian.html 9. 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". 1ra edición: 15 Junio del 2006 2da edición: Mejorado y actualizado el artículo. 28 de noviembre del 2006 25/09/2007 02:38 p.m.