miércoles, 29 de febrero de 2012
COMO COMPILAR EL KERNEL DE UBUNTU
Este documento se basa en el KernelHowto, publicado en inglés por steve en la wiki de Ubuntu: http://www.ubuntulinux.org/wiki/KernelHowto
Lo que yo he hecho ha sido traducirlo, resumiendo algunos puntos, ampliando otros y aclarando algunos otros. Y, por supuesto, comprobando que funciona. La compilación del kernel se hace a la manera Debian, es decir, con herramientas propias de esta distribución.
Así que vamos allá. Paso a paso.
1) OBTENER LAS HERRAMIENTAS NECESARIAS
Para compilar un kernel a medida vamos a necesitar los paquetes build-essential y kernel-package, por lo tanto:
bash:$ sudo apt-get install build-essential kernel-package
2) OBTENER LAS FUENTES DEL KERNEL
Las fuentes del kernel las podemos obtener de muchos sitios. El oficial, como todos sabeis es www.kernel.org
Pero también están en los repositorios de Ubuntu, y yo las he sacado de ahí, porque tiene algunas ventajas, como luego veremos.
En los repositorios de Ubuntu os vais a encontrar con paquetes llamados kernel-source y con paquetes llamados linux-source. Ambos son las fuentes del kernel. ¿Cuál es la diferencia?, pues que los kernel-source vienen de Debian, y los linux-source vienen de Ubuntu. Por lo tanto para obtener las fuentes del kernel que tenemos instalado y corriendo en nuestro sistema, sólo tendremos que hacer:
bash:$ sudo apt-get install linux-source
Con esto se descargará el archivo linux-source-nº_de_version.tar.bz2 en el directorio /usr/src (A partir de ahora asumiré que hemos descargado el linux-source-2.6.8.1, que es el que viene con Ubuntu warty)
Nos movemos a ese directorio:
bash:$ cd /usr/src
Si existe un enlace llamado linux a un kernel antiguo, lo borramos:
bash:/usr/src$ sudo rm linux
Ahora vamos a descomprimir el archivo de las fuentes:
bash:/usr/src$ sudo tar jxvf linux-source-2.6.8.1.tar.bz2
Esto creará un directorio llamado linux-source-2.6.8.1
Creamos un enlace simbólico (llamado linux) a ese directorio:
bash:/usr/src$ sudo ln -s linux-source-2.6.8.1 linux
3) CONFIGURAR EL KERNEL
Hay varias formas de configurar el kernel. Probablemente la mayoría de la gente utiliza una de estas dos: make menuconfig o make xconfig. La diferencia es que con make menuconfig no hace falta tener las Xwindow corriendo, y con make xconfig sí.
Nota: para utilizar make menuconfig necesitaremos el paquete libncurses5-dev (con todas sus dependencias) y para utilizar make xconfig necesitaremos el paquete libqt3-dev (con todas sus dependencias). Así que según lo que queramos utilizar, tendremos que hacer:
bash:/usr/src$ sudo apt-get install libncurses5-dev
o bien:
bash:/usr/src$ sudo apt-get install libqt3-dev
Una duda que siempre surge: para configurar el kernel, ¿puedo partir de una configuración conocida?. Pues la respuesta es que sí. Si tenemos, por ejemplo, instalado el kernel que trae Ubuntu por defecto (2-6-8-1-3-386 en mi caso), en el directorio /boot nos encontraremos con un archivo llamado config-2.6.8.1-3-386, y, ¿qué es ese archivo?, pues no es más que un archivo de texto con la configuración actual del kernel, por lo tanto, para partir de esa base y comenzar la configuración del nuevo kernel desde la actual, lo que tenemos que hacer es copiar dicho archivo al directorio /usr/src/linux-source-2.6.8.1, pero llamándolo .config, es decir:
bash:$ cd /usr/src/linux bash:/usr/src/linux$ sudo cp /boot/config-2.6.8.1-3-386 .config
(lógicamente tendreis que cambiar los números de versión del kernel por los que se ajusten a vuestro caso particular).
Pues ahora ya podemos hacer (situados en el directorio /usr/src/linux) un sudo make oldconfig menuconfig o un sudo make oldconfig xconfig y modificar las opciones que queramos del kernel, es decir, configurarlo a nuestro gusto. Con mucho cuidado, eso sí, porque este es el paso crítico. Aquí es donde lo podemos arruinar todo si, por ejemplo, no incluimos algún módulo necesario para nuestro sistema.
4) CONSTRUIR EL PAQUETE DEL KERNEL
Para construir el paquete con el que instalaremos el nuevo kernel vamos a usar la orden make-kpkg. Esta orden lo que hace básicamente es sustituir a las clásicas make dep, make clean, make bzImage y make modules. Admite numerosas opciones y modificadores (ya sabeis: man make-kpkg), pero para lo que nos ocupa ahora sólo necesitaremos hacer lo siguiente:
bash:/usr/src/linux$ sudo make-kpkg clean bash:/usr/src/linux$ sudo make-kpkg --append-to-version=.XXXX --initrd kernel_image
Lo único que teneis que modificar de la orden anterior es XXXX, que representa una secuencia alfanumérica que tendréis que decidir vosotros, y que se añadirá al número de versión del kernel para diferenciar el kernel que estais compilando de cualquier otro que ya esté instalado en vuestro sistema. Por lo tanto XXXX lo debereis sustituir por lo que querais, intentando no utilizar el guión de subrayado bajo (_) ni expresiones como "-386", "-606", "-K7", "-sparc", etc., porque expresiones similares son las usadas por los kernel precompilados de Debian y podrían inducir a error. Personalmente yo uso la fecha en la que compilo el kernel, de forma que si lo compilase hoy (19 de noviembre de 2004), mi orden querdaría así:
bash:/usr/src/linux$ sudo make-kpkg --append-to-version=.191104 --initrd kernel_image
Ahora hay que hablar un poco sobre la opción --initrd
Esta opción lo que hace es crear una imagen initrd en el directorio /boot.
Realmente no es imprescindible utilizarla siempre que a la hora de configurar el kernel hayamos incluido de forma estática (y no como módulos) los controladores para al menos nuestro bus, disco y sistema de archivos de nuestro directorio raiz. Pero (y esto es sólo una experiencia personal) siempre que he intentado compilar un kernel sin esa opción, me he encontrado con un sistema que no arrancaba, así que yo la uso siempre. ¿Qué problema tiene?, pues que para que funcione correctamente la opción --initrd, hay que aplicar a las fuentes del kernel el parche cramfs. Tranquilos, porque todos los kernel de Debian (y por supuesto también los de Ubuntu) tienen ese parche ya aplicado. Pero es algo que tendréis que tener en cuenta si habeis obtenido las fuentes del kernel en algún otro sitio (por ejemplo en www.kernel.org).
Bien, como he dicho antes, las órdenes que tenemos que ejecutar son:
bash:/usr/src/linux$ sudo make-kpkg clean bash:/usr/src/linux$ sudo make-kpkg --append-to-version=.XXXX --initrd kernel_image
Tras ejecutar la segunda de ellas nos saldrá un mensaje de aviso diciéndonos que la opción --initrd puede no funcionar como nosotros esperamos, y preguntándonos si queremos abortar el proceso. Como ya sabemos que a nosotros nos va a funcionar correctamente, contestamos que no.
Y ahora a esperar, porque el proceso de compilación puede durar mucho.
5) INSTALAR EL KERNEL
Si todo lo anterior ha ido bien, en el directorio /usr/src se debe haber creado un archivo de nombre kernel-image-2.6.8.1.XXXX_10.00.Custom_i386.deb
Este es el archivo que contiene nuestro kernel compilado listo para instalar, lo que haremos con:
bash:/usr/src$ sudo dpkg -i kernel-image-2.6.8.1.XXXX_10.00.Custom_i386.deb
Esta orden es equivalente a las clásicas make modules_install y make install, además de colocar en su sitio la imagen initrd generada y actualizar el grub o el lilo.
Ahora, y por seguridad, borramos el enlace que habíamos creado:
bash:/usr/src$ sudo rm linuxY ya está. Sólo nos queda arrancar con nuestro nuevo kernel.
Crear, modificar y compilar el Kernel en ubuntu
Crear, modificar y compilar el Kernel en ubuntu
Buenas! esta vez intentare explicar a los amantes del software libre como se crea, modifica, y se compila un kernel de ubuntu.
Primero de todo, quiero decirles que si quieren crear un kernel adaptado tendran que tener mucha paciendia, y no desesperarse rapidamente.
Para compilar un kernel a medida vamos a necesitar 2 paquetes, los paquetes build-essential y kernel-package, asi que vamos a descargarlo (Por consola)
Primero Pulsamos Alt+F2 y se nos abrira la ventana de ejecucion, y escribimos
Gnome-Terminal
Se nos abrira la consola.
Y escribimos:
sudo apt-get install build-essential kernel-package
Voy a explicarles un poco de que se comopone el Kernel.
El kernel se compone de los paquetes antes instalados:
"build-essential" y de los "kernel-package"
Cual es la diferencia entre ellos?
Los archivos del kernel-package (Que son "kernel-source", provienen de Debian,
Y los linux-source, vienen de Ubuntu.(La empesa de distribución)
Para obtener la otra parte del kernel, en la consola deberemos escribir:
sudo apt-get install linux-source
El archivo que se baja tendra un nombre asi:
linux-source-nº_de_version.tar.bz2
En el directorio /usr/src/
-Ahora nos vamos a ese directorio, a través de la consola, escribimos:
cd /usr/src
una vez dentro, observamos lo que hay tecleando:
ls ("Ele y ese"
y se nos mostrara una lista con las carpetas y archivos del directorio.
Si vemos que hay un enlace (Acceso directo) llamado linux y esta enlazado a un kernel, lo eliminamos. poniendo:
sudo rm -R linux
Ahora vamos a descomprimir el Archivo de las fuentes, para ello escribimos:
sudo tar jxvf linux-source-nº_de_version.tar.bz2
Esto creara un directorio llamado linux-source-nº_de_version
Ahora en dentro del directorio /usr/src , haremos un enlaze al kernel llamado linux
sudo ln -s linux-source-nº_de_version linux
Listo, ahora paso a explciar las 2 maneras de editar un kernel con apariencia grafica.
Una puede ser a traves del comando "sudo make menuconfig" y la otra pueder ser a traves del comando "sudo make xconfig"
Para mi el mas comodo es el xconfig, y este tutorial lo he realizado con xconfig.
Para poder editarlo con el menuconfig, necesitaremos unas librerias, de tal manera que si lo van a editar utilizando "menuconfig" tendran que bajarse estas librerias:
sudo apt-get install libncurses5-dev
Y si por el contrario van a utilizar el "xconfig" deberan bajarse estas otras:
sudo apt-get install libqt3-dev
Una duda que siempre se nos pasa por la cabeza:
Para configurar el kernel, ¿puedo partir de una configuración conocida?.
Sí.
Si tenemos, por ejemplo, instalado el kernel que trae Ubuntu por defecto, en el directorio /boot nos encontraremos con un archivo llamado
config-nº-version,
y,¿qué es ese archivo?,
No es más que un archivo de texto con la configuración actual del kernel,
Por lo tanto, para partir de esa base y comenzar la configuración del nuevo kernel desde la actual,
Lo que tenemos que hacer es copiar dicho archivo al directorio
/usr/src/linux-source-nº-version, pero llamándolo .config, es decir:
Entramos al directorio /usr/src/linux:
cd /usr/src/linux
y copiamos el archivo de tal manera:
sudo cp /boot/config-nº-de-version.config
Y ahora ya podemos pasar a editar nuestro kernel,+
Para ello desde el directorio /usr/src/linux, tecleamos:
sudo make xconfig
Ahora atención que aqui si no sabemos lo que tocamos nos cagamos el kernel.
(basicamente el sistema operativo, no arrancaria)
Aqui se puede modificar lo que quieran ( o lo que pueden)
*Si no saben lo que es, o su función dejarla tal cual esta. El dicho es :
"No se, No toco"
Bueno para los que se animan, simplemente les explicare las 3 posibilidades de opcion que tienen.
En las casillas que tienen para marcar, habran observado que si le pulsamos encima, la casilla se puede marcar como:
Blanca: Eso significa "desahilitado"
Con una V: Aqui la tendriamos habilitada, y el sistema nos la cargaria por defecto.
Y si no esta marcada con un Punto: esta opcion es que la que se suele activar para optimizar el sistema, esta opcion es la modular, quiere decir que si por ejemplo tenemos soporte para dispositicos de memoria externa, tales como un PEN DRIVE, o un disco duro externo.
Si seleccionamos la opcion como modular, este se cargaria cuando sea necesitara.
Es decir que los modulos estan precargados para su uso, cuando el sistema necesite unos de estos modulos, los tendra preparados, (Pero no estaran cargados)
Asi no consumen memoria del sistema.
Es como una pequeña optimización.
Bueno, una vez que tengan el kernel listo, le dan al icono de arriba con forma de disquete, para guardarlo.
Una vez guardado cerramos la ventana de edición del kernel y en la consola escribimos:
sudo make-kpkg clean
Este proceso tarda un poco, el sistema se depura.
y luego escribimos:
sudo make-kpkg --append-to-version=.XXXX --initrd kernel_image
OJO AL DATO!
aqui en este ultimo comando deberemos modificar las 4 "X"
Escribiendo 4 caracteres alfanumericos. Osea de "A-Z" y de "1 al 9"
En mi caso es puesto:
sudo make-kpkg --append-to-version=.kede --initrd kernel_image
Ke= Kernel
De= Deeluxe XD
Un dia ya explicare la opción " --initrd" para que entiendan todo.
bueno pues una vez escrito esto, no se asusten, la consola empezara a sacar lineas por todas partes, si nos fijamos en las lineas que van saliendo, podremos ver como se esta compilando todo el kernel.
Intentar de adivinar todos los modulos que esta compilando, asi siempre se aprende algo mas.
Y tenienen para rato, por que el proceso de compilación puede ser lento....
Si se ha compilado bien, en el directorio /usr/src, deberia haber un archivo llamado:
kernel-image-nº-version.XXXX_10.00.Custom_i386.deb
Este es el archivo que contiene nuestro kernel, preparado para instalarlo.
Asi que teclearemos:
sudo dpkg -i kernel-image-nº-version.XXXX_10.00.Custom_i386.deb
Una vez instalado, lo que haremos sera borrar el enlaze que hicimos al principio, llamado linux, de tal manera:
sudo rm -R linux
Y ya esta!!!!
Ya tenemos nuestro kernel listo para usarlo, Para usarlo simplemente deberemos escojerlo en la pantalla del GRUB.
(NOTA: es posible que es si es la primera vez que hacen un kernel y tocaron mas de lo normal no les arranque el sistema, luego simplemente tendran que entrar con el kernel de ubuntu, y volver a modificar el suyo)
Espero que les haya gustado, que hayan disfrutado, y que hayan aprendido, nos veremos en el próximo post…
Comenten que no cueste nada….