Aprovechando que ya se ha lanzado la versión del nuevo kernel 2.6.20 pondré aquí los pasos para poder compilarlo en ubuntu, dado que puede resultar un poco extenso, haz click en leer más
Bien, hemos pasado un escalón más del querer conocer más nuestro sistema operativo, que ventajas tiene el usar un kernel precompilado (o el que te viene de serie) con un kernel que tu mismo puedas compilar? Mucha, un kernel precompilado te viene con mil chorradas que en realidad no usarás nunca dado que es un kernel genérico para que funcione con la mayoría de ordenadores, lo que queremos es un kernel para nuestro ordenador y no para la mayoría por lo que tomas el hardware y sistema que realmente estás usando con la consecuente velocidad que se gana y agilidad. ¿Pero si tengo un 2.6.6 para que quiero actualizar al 2.6.20? Los tiempos cambian, junto con el hardware y nuevas funciones y el kernel no puede ser menos por lo que con una nueva versión del mismo tendrás más compatibilidad con muchos más componentes o mejores en los ya existentes.
Vamos manos a la obra:
Para no tener que instalar uno por uno los componentes necesarios para proceder a compilar el kernel ahorraremos trabajo instalando los paquetes build-essential y kernel-package.
bash:$ sudo apt-get install build-essential kernel-package
Las fuentes más actuales las podremos conseguir en www.kernel.org que son las que nos interesan dado que si usamos los linux-image tendremos un kernel precompilado, o lo que es lo mismo, estaremos en las mismas pero también podremos conseguir las sources en los repositorios de Ubuntu aunque no suelen estar muy actualizadas (en el momento de este post van por la 2.6.17-50)
Si nos decidimos por las que hay en los repositorios de ubuntu por bagería de descargarlo de kernel.org solo bastará con poner:
bash:$ sudo apt-get install linux-source
Una vez descargado tendras las fuentes en /usr/src Si lo que queremos es que, dado que ya que nos hemos puesto a aprender y compilar el kernel, usamos el último kernel estable disponible y para ello lo descargamos de kernel.org y lo movemos a /usr/src
bash:$ sudo mv linux-2.6.20-default /usr/src
Lo que está en rojo lo editamos por la versión del kernel que hayamos decidido instalar.
Una vez hecho esto, nos vamos al /usr/src:
bash:$ cd /usr/src
En caso de existir ya un enlace simbólico enlazado a un kernel antiguo deberemos borrarlo (si no tienes ni idea de que hablo, pon el mismo comando por si acaso).
bash:/usr/src$ sudo rm -R linux
Bueno, una vez hecho esto descomprimiremos las sources para proceder a la compilación del kernel:
bash:/usr/src$ sudo tar jxvf linux-2.6.20.tar.bz2
Cuando lo hayamos descomprimido ya tendremos el directorio donde tenemos nuestras sources y a dicho directorio le crearemos un enlace simbólico (acceso directo si fuera windows para haceros una idea) para que a la hora de acceder a dicho directorio sea más facil entrar como /usr/src/linux y no como /usr/src/linux-2.6.20 y es tán facil como poner:
bash:/usr/src$ sudo ln -s linux-source-2.6.20 linux
Ya lo tenemos todo listo y preparado, ahora hay que decir que hay dos formas de compilar el kernel, el make menuconfig o make xconfig, el make menuconfig no hace falta tener las X (la pantalla gráfica) en marcha, con el make xconfig es necesario tener las X funcionando.
Tanto para una cosa como para la otra necesitaremos un paquete adicional que es el libncurses5-dev (con todas sus dependencias) para usar el makemenuconfig y en caso de usar las make xconfig necesitaremos las libqt3-dev.
bash:/usr/src$ sudo apt-get install libncurses5-dev
bash:/usr/src$ sudo apt-get install libqt3-dev
Se puede partir de una configuración conocida para ahorrar trabajo (en caso de haber usado un kernel precocinado o precompilado abstenerse) en caso de ya haber compilado un kernel manualmente con anterioridad y es ir a /boot y copiar el archivo config-2.6.17 a /usr/src/linux-2.6.20 renombrandolo a .config
bash:$ cd /usr/src/linux
bash:/usr/src/linux$ sudo cp /boot/config-2.6.20 .config
Como anteriormente dije, en caso de resultar otro kernel debereis modificar la versión del mismo 😛
Ahora ya, nos vamos a las sources (cd /usr/src/linux) y empezamos lo que es el mundillo de la compilación donde vereis que si teneis paciencia y un cierto tiempo libre es más facil de lo que se piensa. Usamos el sudo make oldconfig menuconfig o un sudo make oldconfig xconfig segun lo que nos convenga (personalmente prefiero siempre el make oldconfig menuconfig) y esto es peliagudo dado que debemos conocer nuestra máquina para no dejarnos algun modulo por el camino por lo que en caso de duda que sea más poner dos cosas que no ninguna, por ejemplo. Cuidado, que en este paso hacer algo mal significa compilar el kernel para nada, recordad (tengo una tarjeta gráfica que es XXXX pero hay dos módulos y no se cual de los dos es, Instala los dos).
Para construir el paquete o .deb para instalar nuestro nuevo kernel usaremos la función make-kpkg. Esta orden sustituye a las clásicas ordenes de antaño de make dep, make clean, make bzImage y make modules, por lo que ahorramos trabajo y tiempo con la make-kpkg. Y hacemos los siguientes comandos:
bash:/usr/src/linux$ sudo make-kpkg clean
bash:/usr/src/linux$ sudo make-kpkg –append-to-version=.XXXX –initrd kernel_image
Las XXXX representa una secuencia alfanumérica en la que podreis poner lo que deseeis, personalmente lo uso para poner la fecha de compilación por lo que mi kernel ahora mismo es este:
Linux xoxe 2.6.20.100207 #1 SMP Sat Feb 10 16:07:05 CET 2007 i686 GNU/Linux
Por favor, abstenerse de poner cosas como i386, i686, k6, k7, spark, o cualquier otra simbología de construcción y arquitectura, por lo demás podeis poner lo que querais.
Si usais por ejemplo la fecha de compilación quedaría algo como esto:
bash:/usr/src/linux$ sudo make-kpkg –append-to-version=.100207 –initrd kernel_image
Posiblemente cuando pongamos ese comando nos pueda salir una advertencia avisando de que si se comete un error se puede poner en peligro la configuración o el sistema, aunque si seguis bien los pasos que expongo, omitis esa advertencia porque saldrá bien y bien.. ahora toca esperar dado que la compilación dura su tiempo por lo que es un buen momento para tomarse un café, sacar al perro o seguir usando tu pc como de costumbre mientras trabaja.
Si todo ha ido correctamente se habrá generado en /usr/src un archivo llamado: kernel-image-2.6.20.100207_10.00.Custom_i386.deb que instalaremos como un paquete normal.
sudo dpkg -i kernel-image-2.6.20.100207_10.00.Custom_i386.deb
Esto no solo lo instalará sino que encima te ahorra los pasos de actualizar el initrd y el grub dado que lo hará todo solo, solo nos quedará borrar si queremos, aquel enlace simbólico que habíamos creado con bash:/usr/src$ sudo rm -R linux, reiniciar y gozar de nuestro nuevo kernel actualizado y personalizado. 😛