Guia como compilar kernel en Debian Sarge

AcidNos

Bien esta guia la hago para aquellos que nunca han compilado un kernel y quieran tenerlo actualizado y de una manera rapida y sencilla. Para algunos, el compilar un kernel puede parecer una tarea compleja, otros pensaran que es algo reservado a expertos y otros no se atreveran para no “cargarse” su querido Linux. Con esta guia pretendo quitar de la cabeza todas esas mitologias creadas en alusion al kernel de nuestro Linux. Despues de haber mirado guias y guias, yo me he decantado por hacer una mezcla de ellas y hacer la mia propia. El caso es que me ha funcionado y hasta hoy sigo con ello.

Como es obvio, no todo el mundo usa la misma distribución de Linux y no todas las distribuciones disfrutan de la misma manera de compilarlo (aunque si parecida). En mi caso me basare en la actualizacion al kernel 2.6.17-rc2 bajo una Debian Sarge recien instalada la cual actualizare a SID en su momento, probablemente después de actualizar el kernel. El kernel 2.6.17-rc2 a dia de hoy es la ultima version disponible y no estable, por lo que puede que prefieras bajarte una version de éste mas estable y asegurar asi el correcto funcionamiento del sistema.

Ante todo, yo no soy un experto en Linux, simplemente me encanta “trastear” y aprender. Tal vez haya una manera mejor, mas recomendable, o mas comoda quiza. Aun asi, esta es la forma que he empleado para actualizar mi kernel y me ha funcionado siempre.

PREPARANDO LA CARNE

Pues bien, lo primero de todo es prepararlo todo para poder empezar. Para ello lo primero, como es obvio, es necesario bajarse el kernel de www.kernel.org en mi caso linux-2.6.17-rc2.tar.gz dentro del directorio testing. Si lo prefieres puedes bajarte una version mas estable deldirectorio anterior. Fijate que te descargues el kernel y no un parche para el kernel. Los parches estas marcados con la palabra match.

Una vez obtenido el kernel abrimos una Terminal como root y descomprimimos el kernel en el directorio /usr/src. Yo prefiero conservar el arvhivo comprimido por si lo necesito en un futuro asi que lo copio a este mismo directorio y después lo descomprimo:

#: cp /home/acid/descargas/inux-2.6.17-rc2 /usr/src
#: cd /usr/src
#: tar –xvzf Linux-2.6.17-rc2

Bien ya tenemos nuestro kernel descomprimido. Ahora vamos a instalar las herramientas necesarias para configurar y compilar nuestro kernel. Yo he usado el modo grafico de configuración dentro e un entorno X. Si quieres usar el modo de linea de comando tendras que sustituir la librería “tk8.x” por “libncurses5-dev”. Tambien es posible que necesites ejecutar apt-setup para actualizar los repositorios si es que te acabas de instalar tu Debian.

Dicho esto, con los repositorios actualizados (Sarge), como root ejecutamos lo siguiente:

#: apt-setup tk8.4 make gcc bin86 libc6-dev kernel-package

Una vez hecho esto ya estamos listos para empezar a configurar nuestro kernel.

INICIANDO NUESTRA CONFIGURACION

Como he dicho antes, nosotros partimos de una base de que nuestro Debian esta recien instalado. Por lo tanto, yo no echare mano de la configuración del antiguo kernel. Aun asi, puedes usar la configuración vieja, copiando el archivo config-a.b.cc (puede haber varios) del directorio /boot a la carpeta /usr/src/Linux-2.6.17-rc2 (o la de el kernel que hayas elegido y descomprimido)

Ahora lanzaremos la aplicación de configuración del kernel. Antes de esto te recomiendo que tengas a mano información sobre el hardware de tu sistema, y ni que decir falta que si dudas, dejalo como esta. Lamentablemente no hay una configuración Standard. Esta depende de tu sistema. Las opciones que se marcan por defecto deberian ser validas para tu sistema.

Dicho esto lanzamos la aplicación de configuración (como root y estando en el directorio /usr/src):

:# make xconfig (“make oldconfig xconfig” para importar la vieja configuracion de tu anterior kernel

o bien:

#: make menuconfig (“make oldconfig menuconfig” para importar la vieja configuracion de tu anterior kernel en modo consola)

Es posible que te de un fallo (a mi me lo dio) diciendo que no se puede iniciar la ventana de configuración del kernel con xconfig diciendo algo de QT o QTDIR (no me acuerdo de exactamente que). Yo solucione el problema instalando el paquete libqt3-mt-dev con apt-get

A partir de aquí es cosa tuya la configuración. Selecciona o quita las opciones que creas convenientes. Recuerda que si dudas con alguna de las opciones, mejor no cambiarla.

CONSTRUYENDO UN PAQUETE .deb DE NUESTRO NUEVO KERNEL

Una vez que hayas terminado de configurar las opciones que contendra tu nuevo kernel, no te olvides de guardar los cambios. El modo grafico dispone de un menú con la opcion de guardarlos (file/save).

Una vez guardado, salimos de la herramienta de configuración del kernel y lanzamos el siguiente comando para crear el paquete .deb de nuestro kernel. Este paquete se construye de forma que nos modifica el grub/lilo de nuestro sistema con las opciones necesarias e incluye nuestro nuevo kernel en el initrd (necesario en algunas distribuciones y kernels), aunque no se exactamente como lo hace. En su dia lei lo que hacia exactamente, pero creo que ya no es necesario hacer uso de ello. Si te pica la curiosidad, por google existen varios manuales de cómo compilar de diferentes maneras, aunque mas costosas y liosas (para mi punto de vista)

El comando a ejecutar para construir el paquete de nuestro kernel, el cual instalaremos mas adelante con la herramienta dpkg, es el siguiente:

#: make-kpkg --append_to_version -lapp4 --initrd --revision=rev.01 kernel_image modules_image

Una vez ejecutado este comando, ya puedes ir a tomar un café o a comer, o cenar o dar una vuelta con tus amigos. El proceso tardara un rato dependiendo de tu equipo. A mi me tardo una media hora con un Sempron 1800. Cuando termine ya tendremos listo nuestro archivo kernel-image-2.6.17-rc2-lapp4_rev.01_i386.deb y preparado para instalar. Asi que ahora nos queda instalarlo:

#: dpkg –i kernel-image-2.6.17-rc2-lapp4_rev.01_i386.deb

Hecho esto, y si todo ha ido bien, ya tenemos nuestro Nuevo kernel instalado. Ahora solo nos queda reiniciar el sistema y disfrutar de el. Si es la primera vez que lo haces y no te ha salido bien, no te preocupes. A todos nos ha pasado. Puedes volver a entrar con tu antiguo kernel y repetir el proceso con una configuración diferente del kernel.

guner

Va a favoritos, gracias _.

Yo uso la forma "standar" de compilarlo.
tar -x...
cd ...
make menconfig
make bzImage && make modules && make modules_install
cp arch/i386/boot/bzImage /boot/vmlinuz-version-VVV
cp arch/System.map /boot/System.map-VVV
cp arch/.config /boot/config-VVV

Claro, con la configuración ya bien hecha, que ES LO JODIDO : D.

Eso vale para todas las distros, y lo tuyo para debian y derivadas, por supuesto, usar el sistema de paquetes es mucho más ventajoso.

Y

guner desde las últimas versiones de los kernels 2.4 y las nuevas de los 2.6 no es necesario hacer make bzimage, directamente haz make && make modules_install && make install y ya es suficiente ;), incluso al hacer make install si usas lilo o grub automáticamente te lo enlaza con tu gestor de arranque, sin necesitar copiar el kernel ni el map y moverlo a su sitio correspondiente.

Esto es válido para cualquier distribución ya que es la ocmpilación standard ;).

Sobre la compilación con el método debian solo decir una cosa, si te has descargado un kernel de kernel.org, al hacer:

make-kpkg --append_to_version -lapp4 --initrd --revision=rev.01 kernel_image modules_image

el poner --initrd es una tontería, simplemente porque no va a funcionar. El --initrd solo funciona con los kernels de debian ya que llevan un parche preparado para ello (es más, cuando ejecutas el mak-kpkg con esa opción te muestra la advertencia que solo es con los kernels que trae debian).

De resto, un muy buen artículo, deberían de ponerlo como post-it

AcidNos

En mi primer intento de arrancar el kernel nuevo, me dio un fallo en el arranque diciendo que no se podia acceder al /dev del root en hd0,0 (algo del VFS que ahora mismo no recuerdo) y era por no haber instalado el --initrd (no lo puse en la primera instalacion del kernel) por eso en este caso si es necesario :).

Eso si, he leido en algunos foros que los kernels de de algunas distros inferiores a la 2.6.xx no necesitan del initrd como tu bien dices, y que en el caso de la 2.6 en adelante si es necesario. No se hasta que punto sera cierto, pero en mi caso en el primer intento, el no poner el --initrd en el primer empaquetado, me costo el tener que volver a generar el .deb del kernel por el error que comento.

Y

En tu caso será porque casi todo lo pones como módulo (caso que es lo ideal :P) pero vamos, en la documentación de debian pone que el --initrd es solo para los kernels que te distribuye ellos. En mi caso nunca lo he probado con alguno externo, siempre con los de debian, pero bueno, quizás ahora si funcione :D

Usuarios habituales