enchufado
   RSS
#
Parcheo kernel Linux 2.6.8.1 -> 2.6.9 (GNU/Linux) 2004-10-21 03:37:25

Nueva versión del kernel Linux, y con ello necesidad de parcheo (hay varios cambios que me afectan, como casi siempre). Resulta que el parche es para el 2.6.8, y no el último estable (2.6.8.1). Si bien el 2.6.8.1 sólo corregía un bug en nfs, sería lógico que saliera un parche del 2.6.9 para poder aplicarlo sobre el citado. Pues bien, no lo hay.

En barrapunto se comenta en uno de los posts de este artículo. Navegando por otros lares, me encuentro la misma duda, y una respuesta. En barrapunto responden lo mismo. Pero probemos...

jors@monik:~$/usr/src/linux# uname -r
2.6.8.1
jors@monik:~$/usr/src/linux# bzcat patch-2.6.9.bz2 | patch -p1 --dry-run
(...)
Hunk #1 FAILED at 1.
1 out of 19 hunks FAILED -- saving rejects to file Makefile.rej
(...)
Hunk #2 FAILED at 74.
Hunk #3 FAILED at 91.
2 out of 11 hunks FAILED -- saving rejects to file fs/nfs/file.c.rej
(...)

Los mismos síntomas que en el post de la duda reseñado al principio. El Hunk #1 hace referencia a la EXTRAVERSION (referida al 1 del número de versión 2.6.8.1), que en breve corregiremos, mientras que los Hunks #2 y #3 hacen referencia a nfs; no aplica los cambios del parche 2.6.9 porque son los mismos que los incorporados en el 2.6.8.1 y ya están aplicados. Podemos mirar los archivos "rejects", que no son más que unos diffs de lo que se supone que da conflicto (p.ej. el Makefile.rej y el fs/nfs/file.c.rej, en nuestro caso, para ver qué conflicto existe entre el archivo original -los .orig- y el generado -sin extensión .orig ni .rej-).

Para corregir lo primero, vamos al Makefile, dejamos el campo EXTRAVERION en blanco, y cambiamos el SUBLEVEL a 9 (de no hacer esto, nuestro 2.6.9 se seguiría identificando como un 2.6.8.1). Lo segundo no necesita corrección. Parcheamos y actualizamos la configuración del kernel:

jors@monik:~$/usr/src/linux# bzcat patch-2.6.9.bz2 | patch -p1
jors@monik:~$/usr/src/linux# make oldconfig

Luego compilamos (a la debian-way):

jors@monik:~$/usr/src/linux# make-kpkg clean && make-kpkg -rev 20-10-2004 kernel_image

Y voilá, ya tenemos kernel con su versión correcta. Procedemos a desinstalar el antiguo, instalar el nuevo y re-ejecutar lilo (por si las moscas):

jors@monik:~$/usr/src/linux# dpkg --purge --force-remove-essential kernel-image-2.6.8.1
jors@monik:~$/usr/src/linux# dpkg -i ../kernel-image-2.6.9_20-10-2004_i386.deb && lilo

Reinicio el sistema, el kernel funciona, marca bien su versión (2.6.9), peeeero... en esta vida todo son "pero's". Gdm no arranca y peta miserablemente soltando el archiconocido "No screens found". ¿Qué pasó? Me olvidé de recompilar el driver oficial de Nvidia para mi gráfica (una Geforce) para esa versión de kernel en particular. Para esto, el script de Nvidia necesita los fuentes del kernel que está corriendo (o los kernel-headers, si tenemos un precompilado). Nada, no compila. Ni siquiera indicándole como parámetro la situación de los fuentes del kernel.

Pienso que a lo mejor es por los chanchullos que he estado haciendo para poder parchear el 2.6.8.1 con el parche 2.6.9, pero tras bajarme los sources completos del kernel Linux 2.6.9, configurarlo, compilarlo y tratar de compilar también los drivers de la Geforce, estos últimos tampoco compilan.

¿Alguna idea?


Comentarios (4)


Volver al indice

login, admin, form, register