Manual básico compilación kernel y make-kpkg: Un bug antiguo sin resolver.

########################################################################
#
# Nueva versión de cómo compilar el kernel en:
# http://audiolinuxdesdecero.blogspot.com/2010/12/tunear-el-kernel.html
#
########################################################################
Soy de los pocos que no se conforman con el kernel precompilado que viene en la distro oficial de ubuntu.
Me gusta mucho lo que es audio y video. Particularmente el audio requiere de ciertas características que no se consiguen por defecto en ubuntu.
Desde hace poco estamos haciendo un podcast con un amigo y ahora que tengo un computador más potente necesité un kernel más acorde para poder utilizar JACK y Ardour.
Ya probé ubuntustudio pero no satisfizo mis necesidades. Probablemente por lo poco eficiente que resulta el kernel-rt así como viene.
Entonces me dispuse a compilar un kernel para mis necesidades (cosa que no hacía desde mucho tiempo ya que la documentación empezó a extinguirse con la aparición de el kernel que "detectaba automáticamente el procesador" cosa que nunca he creído al 100% pero que quienes sí lo creía lo tomaron como la excusa perfecta para no volver a ayudar a nadie con la compilación del dichoso kernel).
Empecé con lo de siempre:
$ sudo -i $ adduser miusuario src $ apt-get install fakeroot build-essential makedumpfile libncurses5 libncurses5-dev linux-source initramfs-tools $ apt-get build-dep linux-source
Con esto ya deberíamos tener todo lo necesario para poder compilar el kernel.
El siguiente paso es ir al directorio /usr/src y descomprimir el kernel, hacer un enlace simbólico al directorio del código del kernel (OPCIONAL), copiar el archivo de configuración del kernel en uso es altamente recomendable; y por último acceder al directorio para empezar la configuración.
$ exit (esto es para dejar de ser super usuario) $ cd /usr/src $ tar xvjf linux-source-2.X.XX.tar.bz2 $ ln -sf linux-sorce-2.X.XX linux $ cd linux $ cp -vi /boot/config-$(uname -r) .config (con esto copias la configuración del kernel en uso) $ make menuconfig
Aquí los usuarios más avanzados podrán jugar con las opciones como les plazca. En mi caso, el kernel de ubuntu está bien, pero no está optimizado para mi procesador y necesito mejor rendimiento para trabajar con JACK y Ardour. Por lo tanto sólo voy a modificar opciones del procesador y del rendimiento del kernel.
En "General Setup-->RCU Subsistem -->RCU Implementation" si se puede lo cambio por "Preemptable tree-based hierarchical RCU"
En "Processor type and features" Cambio el procesador por el mío (en mi caso: Opteron/Athlon64/Hammer/K8.
En timer frequency puse 1000Hz
En preemption model puse Preemptible Kernel (Low-Larency Desktop)
Salimos al menu principal y en "Kernel Hacking" desactivo "Kernel Debug"
Salí y guardé mis cambios.
El siguiente paso ya es compilar el kernel lo cual tarda unas horas aún con un buen computador.
Nota: Si compilan exitosamente un kernel y pueden iniciar el sitema con él hagan la prueba de volver a compilar un kernel. Notarán una abismante diferencia en el tiempo de compilación en la razón de 8/3, es decir, si al compilar el kernel se demoró 4 horas, con el nuevo kernel la compilación tardará 1,5 horas... ¡y después dicen que no tiene ningún sentido compilar el kernel!
Es recomendable compilarlo a la manera debian para que quede un paquete deb y se pueda guardar el nuevo kernel y respaldarlo por cualquier catástrofe posterior.
$ fakeroot make-kpkg --initrd --append-to-version=-escribir-lo-que-sea kernel-image kernel-headers
Una vez que haya terminado la compilación (y suponiendo que no cambiaron nada crítico y que no hay errores) deberían haber dos paquetes deb en /usr/src, uno con el paquete del kernel y otro con los header, las que son bastante útiles cuando necesitas compilar algún módulo tranfugo... ¬¬
Se supone que el último paso debería ser el instalar los paquetes resultantes de la compilación, pero por alguna razón desconocida, make-kpkg no está generando la imagen initrd aunque uno le paso esa orden como parámetro.
Así que si habían logrado compilar e instalar un kernel pero al bootear les arrojaba "kernel panic" probablemente no había sido su culpa.
Los pasos finales son los siguientes:
Si todavía están en /usr/src/linux:
$ sudo dpkg -i ../*.deb
Con eso se instalan ambos paquetes, el kernel y las headers.
Ahora lo que falta es crear la imagen initrd para ese kernel. Mucho ojo con lo que sigue:
Haciendo:
$ ls ../*.deb
Aparecerán listados los paquetes deb. Como ejemplo voy a poner cómo quedó el mío:
El paquete de la imagen del kernel se llamaba linux-image-2.6.32.15+drm33.5_escribir-lo-que-sea_amd64.deb
Lo que marqué con negrilla es la versión del kernel, dato necesario para crear la imagen initrd. El comando es el siguiente:
$ sudo mkinitramfs -k -o /boot/initrd.img-2.6.32.15+drm33.5 2.6.32.15+drm33.5
Y con eso ya deberíamos estar listos. Aunque recomiendo hacer dos cosas más por si acaso:
Primero: Actualizar las imagenes initrd:
$ sudo update-initramfs -uk all
Segundo: Por si acaso revisen /boot/grub/grub.cfg y vean si la entrada del kernel hace la llamada a su correspondiente imagen.
###############ACTUALIZACIÓN 29-11-2010##################
Una cosa a tener en cuenta es la cantidad de procesadores presentes en su máquina o bien los cores según sea el caso.
En Lucid no se le puede pasar el argumento -j a make-kpkg para que ocupe todos los procesadores presentes, pero se puede hacer que los use si antes de la compilación se hace:
$export CONCURRENCY_LEVEL=X
Cambiando X por la cantidad de cores o de procesadores que tengas. Tanto para esto o para el -j (que sí se puede hacer en Maverik con make-kpkg) sólo hay que poner la cantidad exacta de cores o procesadores. Poner más crea el efecto contrario y empieza a ser más lento el proceso.
La mala noticia es que tras actualizar Lucid, tenemos que volver a cambiar la forma de crear las initrd... uf, qué lata, pero bueno, todo sea por mejorar nuestro querido ubuntu...
$sudo update-initramfs -c -k 2.6.32.15+drm33.5
Esto va a crear la imagen ramdisk en /boot
Paso final y necesario:
$sudo update-grub
y hora sí se acaba la lata y estaríamos listos para disfrutar de nuestro kernel con viagra.
- blog de negrolder
- Inicie sesión o regístrese para enviar comentarios
