
Mientras estaba sentado fumandome un cohiba pensando sobre que postear el día de hoy me di cuenta que en el tiempo que este blog tiene de vida nunca he escrito un tutorial sobre como compilar un Kernel Linux lo cual hizo que me levantara como un resorte de mi silla e inmediatamente pusiera manos a la hora. ¿A quien va dirigido este manual? A todas esas personas que deseen aprender a compilar un kernel en su distribución de linux preferida (este manual aplica para todas las distribuciones) o simple y sencillamente a los que les gusta estar al día con la última versión de todo (como yo) y les gusta tener siempre la última versión del Kernel disponible instalado en su sistema.
Voy a desglozar cada paso del proceso como siempre lo hago para que sea fácil de leer y entender para los usuarios con poca experiencia. Comenzamos.
REQUERIMIENTOS
- Tener TODAS las herramientas de compilación gcc, g++, make, libncurses5, libncurses-dev etc etc.
- Descargar el paquete Full (F) de la última versión del Kernel disponible.
- Paciencia y mucha atención a la hora de configurar.
COMPILACIÓN E INSTALACIÓN
1.- Como mencione anteriormente es necesario tener todas las herramientas de compilación necesarias y para eso en Debian o derivados como Ubuntu tecleamos:
# apt-get install build-essential libncurses5 libncurses-dev
Para el caso de otras distribuciones como Slackware o Gentoo generalmente estas ya tienen instaladas todas las librerías de compilación (por eso es que me encanta Slackware) y para otras como Mandriva o openSuSE pueden utilizar yum, YaST o cualquier herramienta gráfica para la instalación de los paquetes.
2.- Procedemos a descargar la última versión del Kernel (el paquete Full (F)) que actualmente es la 2.6.30.1 dentro del directorio /usr/src:
wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.30.1.tar.bz2
3.- Una vez descargadas las fuentes dentro de /usr/src procedemos a descomprimir el paquete:
tar xvjf linux-2.6.30.1.tar.bz2
4.- Una vez descomprimido el archivo hacemos un enlace a linux y procedemos a copiar el config de nuestro kernel actual al config al archivo config dentro de /boot:
NOTA: Para conocer la versión de Kernel que tenemos instalada tecleamos en una terminal el comando uname -r
# ln -s linux-2.6.30.1 linux
# cd /boot
# cp config-2.6.26-2-686 config
NOTA2: Esto es suponiendo que nosotros en el momento tengamos instalada la versión 2.6.26.2-2 para arquitecturas 686 del Kernel, obviamente la versión que el comando uname -r nos muestre debe estar también dentro del directorio /boot.
5.- Después de haber creado el enlace a linux procedemos a entrar al directorio y comenzar la compilación e instalación de nuestro nuevo kernel de linux:
# cd /usr/src/linux
# make menuconfig
En este punto van a comenzar a ver en cada proceso un monton de archivos y “cosas raras” durante un buen rato pero no se asusten ya que es solo parte de la misma compilación que está haciendo el sistema. Lo que va a pasar aquí es que el sistema nos va a cargar los ncurses en donde vamos a encontrar todo el soporte para el hardware y demás cosas que queramos configurar, habilitar o deshabilitar para nuestro sistema, pongan mucha atención de cada parte y cada opción para así lograr un buen rendimiento del sistema al final de proceso.
6.- Cuando terminemos de configurar todo lo necesario nos salimos del ncurses y comenzamos la modificación del GRUB (para que se muestre la versión que instalemos en el arranque del sistema) y la instalación en sí:
# make && make install && make modules_install && mkinitramfs -o /boot/initrd.img-2.6.30.1 2.6.30.1 && update-grub
El proceso tomará algunos minutos así que no se desesperen ya que al término del mismo pueden pasar dos cosas: que el sistema arranque sin problemas o que no arranque y nos muestre un Kernel Panic pero antes de que pongas cara de horror al leer esto no te preocupes, tiene solución la cual es muy sencilla ya que solo hay que borrar la línea de arranque de nuestro kernel nuevo (el 2.6.30.1) de /boot/grub/menu.lst y borramos también los archivos initrd.img-VersionDelKernel, System.map-VersionDelKernel y vmlinuz-VersiónDelKernel (en donde en todos los casos, otra vez, es 2.6.30.1) de /boot.
Ojalá les sirva y saludos.