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.