1 de septiembre de 2007

1/4 - Instalar y configurar nuevo kernel en Debian Etch

El tema que intentaré explicar hoy va sobre como debemos actuar a la hora de llevar a cabo una actualización del kernel de nuestra Debian Etch.

Me he decidido a redactar ésta guía ya que si lo actualizáis y tenéis compilado algún módulo para vuestro kernel (aceleración 3D con fglrx, nvidia, tarjeta inalámbrica con ipw3945d, etc), tendréis problemas a la hora de iniciar con el nuevo kernel, ya que debéis recompilar éstos drivers.

Ésta guía constará de 4 artículos en los cuales detallaré:
1.- Instalar y configurar nuevo kernel en Debian Etch - ¿Cuándo y como actualizarlo?
2.- Recompilar módulo nvidia - Actualizar Kernel en Debian Etch
3.- Recompilar módulo fglrx (ATI) - Actualizar Kernel en Debian Etch
4.- Recompilar módulo ipw3945 - Actualizar Kernel en Debian Etch
(Inalámbrica Intel PRO/Wireless 3945ABG)

A continuación empiezo con la 1º guía.

- ¿Cuándo actualizar el kernel?
Para saber cuando hay disponible una nueva versión del kernel para nuestro sistema, debemos ir a la página de "Información sobre Seguridad" de Debian. Si accedéis, podréis ver que recientemente han sacado 2 actualizaciones que corrigen diversos fallos.
[31 de ago de 2007] DSA-1363 linux-2.6
several vulnerabilities
[15 de ago de 2007] DSA-1356 linux-2.6
several vulnerabilities
Otra forma de saber que hay alguna actualización, y que casi siempre es como me doy cuenta, es cuando actualizo el sistema. Al ejecutar el comando "aptitude upgrade" me aparece algo parecido a lo siguiente, indicando que el paquete "linux-image-2.6-686" ha sido retenido:

# aptitude update && aptitude upgrade
Leyendo lista de paquetes... Hecho
Creando árbol de dependencias... Hecho
Leyendo la información de estado extendido
Inicializando el estado de los paquetes... Hecho
Leyendo las descripciones de las tareas... Hecho
Construir la base de datos de etiquetas... Hecho
Se han retenido los siguientes paquetes:
linux-image-2.6-686
0 paquetes actualizados, 0 nuevos instalados, 0 para eliminar y 1 sin actualizar.

Para ver que versión del kernel tenemos, ponemos el siguiente comando. A día de hoy, la versión que aparece a continuación es la última publicada.
$ uname -a
Linux portatil 2.6.18-5-686 #1 SMP Thu Aug 30 02:19:07 UTC 2007 i686 GNU/Linux



- ¿Cómo actualizar el kernel?
Pues abrimos una terminal (KONSOLE), nos logueamos como root y procedemos a instalar el paquete retenido.

$ su -
password:

# aptitude install linux-image-2.6-686
Leyendo lista de paquetes... Hecho
Creando árbol de dependencias... Hecho
Leyendo la información de estado extendido
Inicializando el estado de los paquetes... Hecho
Leyendo las descripciones de las tareas... Hecho
Construir la base de datos de etiquetas... Hecho
Se instalarán automáticamente los siguientes paquetes NUEVOS:
linux-image-2.6.18-5-686
Se instalarán los siguiente paquetes NUEVOS:
linux-image-2.6.18-5-686
Se actualizarán los siguientes paquetes:
linux-image-2.6-686
1 paquetes actualizados, 1 nuevos instalados, 0 para eliminar y 0 sin actualizar.
Necesito descargar 16,3MB de ficheros. Después de desempaquetar se usarán 48,0MB.
¿Quiere continuar? [Y/n/?] y
Escribiendo información de estado extendido... Hecho
Des:1 http://security.debian.org etch/updates/main linux-image-2.6.18-5-686 2.6.18.dfsg.1-13etch2 [16,3MB]
Des:2 http://security.debian.org etch/updates/main linux-image-2.6-686 2.6.18+6etch2 [2256B]
Descargados 16,3MB en 1m9s (234kB/s).
Preconfigurando paquetes ...
tar: ./postinst: time stamp 2007-08-30 07:42:59 is 5855056.735401303 s in the future
tar: ./config: time stamp 2007-08-30 07:42:59 is 5855056.727854019 s in the future
tar: ./postrm: time stamp 2007-08-30 07:42:59 is 5855056.724214159 s in the future
tar: ./preinst: time stamp 2007-08-30 07:42:59 is 5855056.720335598 s in the future
tar: ./prerm: time stamp 2007-08-30 07:43:00 is 5855057.717094496 s in the future
tar: ./templates: time stamp 2007-08-30 07:43:00 is 5855057.715943723 s in the future
tar: ./control: time stamp 2007-08-30 07:43:00 is 5855057.715421284 s in the future
tar: ./md5sums: time stamp 2007-08-30 07:43:00 is 5855057.700145191 s in the future
tar: .: time stamp 2007-08-30 07:43:00 is 5855057.699594211 s in the future
Seleccionando el paquete linux-image-2.6.18-5-686 previamente no seleccionado.
(Leyendo la base de datos ...
43800 ficheros y directorios instalados actualmente.)
Desempaquetando linux-image-2.6.18-5-686 (de .../linux-image-2.6.18-5-686_2.6.18.dfsg.1-13etch2_i386.deb) ...
Done.
tar: ./control: time stamp 2007-08-21 01:03:57 is 5053497.931993926 s in the future
tar: ./md5sums: time stamp 2007-08-21 01:03:58 is 5053498.927449836 s in the future
tar: .: time stamp 2007-08-21 01:03:58 is 5053498.92428837 s in the future
Preparando para reemplazar linux-image-2.6-686 2.6.18+6 (usando .../linux-image-2.6-686_2.6.18+6etch2_i386.deb) ...
Desempaquetando el reemplazo de linux-image-2.6-686 ...
Configurando linux-image-2.6.18-5-686 (2.6.18.dfsg.1-13etch2) ...

Hmm. The package shipped with a symbolic link /lib/modules/2.6.18-5-686/source
However, I can not read the target: No existe el fichero o el directorio
Therefore, I am deleting /lib/modules/2.6.18-5-686/source

Running depmod.
Finding valid ramdisk creators.
Using mkinitramfs-kpkg to build the ramdisk.
Running postinst hook script /sbin/update-grub.
You shouldn't call /sbin/update-grub. Please call /usr/sbin/update-grub instead!

Searching for GRUB installation directory ... found: /boot/grub
Searching for default file ... found: /boot/grub/default
Testing for an existing GRUB menu.lst file ... found: /boot/grub/menu.lst
Searching for splash image ... none found, skipping ...
Found kernel: /boot/vmlinuz-2.6.18-5-686
Found kernel: /boot/vmlinuz-2.6.18-4-686
Updating /boot/grub/menu.lst ... done


Configurando linux-image-2.6-686 (2.6.18+6etch2) ..

Nos habrá creado una entrada nueva en el grub para iniciar con el nuevo kernel.

# cat /boot/grub/menu.lst
....
title Debian GNU/Linux, kernel 2.6.18-5-686 - Kernel Nuevo
root (hd0,5)
kernel /boot/vmlinuz-2.6.18-5-686 root=/dev/sda6 ro vga=791
initrd /boot/initrd.img-2.6.18-5-686
savedefault

title Debian GNU/Linux, kernel 2.6.18-5-686 (single-user mode)
root (hd0,5)
kernel /boot/vmlinuz-2.6.18-5-686 root=/dev/sda6 ro single vga=791
initrd /boot/initrd.img-2.6.18-5-686
savedefault

title Debian GNU/Linux, kernel 2.6.18-4-686 - Kernel Viejo
root (hd0,5)
kernel /boot/vmlinuz-2.6.18-4-686 root=/dev/sda6 ro vga=791
initrd /boot/initrd.img-2.6.18-4-686
savedefault

title Debian GNU/Linux, kernel 2.6.18-4-686 (single-user mode)
root (hd0,5)
kernel /boot/vmlinuz-2.6.18-4-686 root=/dev/sda6 ro single vga=791
initrd /boot/initrd.img-2.6.18-4-686
savedefault


NOTA:
El parámetro vga=791 lo utilizo para tener una resolución de 1024x768 en las consolas de texto. Cada vez que el kernel es actualizado (update-grub), éste parámetro desaparece, por lo que tengo que editar el fichero y añadirlo. Si quiere evitar ésto, mira el punto número 5 de la Guía de Optimizar y personalizar Debian Etch.

Sólo queda reiniciar el sistema y iniciar con el nuevo kernel.

MUY IMPORTANTE:
En caso de que hayas configurado los drivers nvidia ó fglrx (ATI) puede que no te arranque el servidor gráfico al iniciar con el nuevo kernel, ya que fallará al cargar el driver. Debemos compilarlos para el nuevo kernel. También si has compilado el driver
ipw3945, hay que volver a compilarlo para que te funcione la red inalámbrica.
Dentro de poco publicaré el resto de guías, tal y como indico arriba.


De todas maneras, ésto sólo afectará en el caso de que arranquemos con el nuevo kernel (2.6.5-686). Seleccionando el viejo en el GRUB (2.6.4-686) seguiremos iniciando sin problemas.


- ¿Cómo borrar el kernel viejo?

Una vez que hayas compilado los módulos necesarios par el nuevo kernel y tras comprobar que arrancamos sin ningún problema, podemos liberar espacio en disco borrando el kernel antiguo (2.6.4-686).

Para ver las versiones instaladas en nuestro equipos ejecutamos el siguiente comando:
# aptitude search linux-image | grep ^i
i linux-image-2.6-686 - Linux kernel 2.6 image on PPro/Celeron/PII
i linux-image-2.6.18-4-686 - Linux 2.6.18 image on PPro/Celeron/PII/PII
i A linux-image-2.6.18-5-686 - Linux 2.6.18 image on PPro/Celeron/PII/PII

Vemos que nos aparecen las 2 versiones del kernel antes mencionadas.
A continuación, procedemos a borrar la versión antigua:

# aptitude purge linux-image-2.6.18-4-686
Leyendo lista de paquetes... Hecho
Creando árbol de dependencias... Hecho
Leyendo la información de estado extendido
Inicializando el estado de los paquetes... Hecho
Leyendo las descripciones de las tareas... Hecho
Construir la base de datos de etiquetas... Hecho
Se ELIMINARÁN los siguientes paquetes:
linux-image-2.6.18-4-686{p}
0 paquetes actualizados, 0 nuevos instalados, 1 para eliminar y 0 sin actualizar.
Necesito descargar 0B de ficheros. Después de desempaquetar se liberarán 48,0MB.
¿Quiere continuar? [Y/n/?] y
Escribiendo información de estado extendido... Hecho
(Leyendo la base de datos ...
45912 ficheros y directorios instalados actualmente.)
Desinstalando linux-image-2.6.18-4-686 ...
Running postrm hook script /sbin/update-grub.
You shouldn't call /sbin/update-grub. Please call /usr/sbin/update-grub instead!

Searching for GRUB installation directory ... found: /boot/grub
Searching for default file ... found: /boot/grub/default
Testing for an existing GRUB menu.lst file ... found: /boot/grub/menu.lst
Searching for splash image ... none found, skipping ...
Found kernel: /boot/vmlinuz-2.6.18-5-686
Updating /boot/grub/menu.lst ... done

The link /vmlinuz.old is a damaged link
Removing symbolic link vmlinuz.old
Unless you used the optional flag in lilo,
you may need to re-run your boot loader[lilo]
The link /initrd.img.old is a damaged link
Removing symbolic link initrd.img.old
Unless you used the optional flag in lilo,
you may need to re-run your boot loader[lilo]
Purgando ficheros de configuración de linux-image-2.6.18-4-686 ...
Running postrm hook script /sbin/update-grub.
You shouldn't call /sbin/update-grub. Please call /usr/sbin/update-grub instead!

Searching for GRUB installation directory ... found: /boot/grub
Searching for default file ... found: /boot/grub/default
Testing for an existing GRUB menu.lst file ... found: /boot/grub/menu.lst
Searching for splash image ... none found, skipping ...
Found kernel: /boot/vmlinuz-2.6.18-5-686
Updating /boot/grub/menu.lst ... done

En éste paso, tal y como comenté arriba, cada vez que se ejecuta el comando "update-grub", perdemos la opción de arranque "vga=791" (resolución 1024x768 en consola), con lo que si te interesa esa opción, debes agregarla manualmente al archivo "/boot/grum/men.lst".

Con el siguiente comando, vemos si hay algún paquete mas relacionado con el kernel eliminado. (Ojo, fíjate bien que busco por la versión del kernel que hemos eliminado arriba).

# aptitude search 2.6.18-4 | grep ^i
i linux-headers-2.6.18-4 - Common header files for Linux 2.6.18

Aquí vemos que nos aparecen las cabeceras del kernel, necesarias para compilar. Como ya no nos hace falta lo eliminamos.

# aptitude purge linux-headers-2.6.18-4
Leyendo lista de paquetes... Hecho
Creando árbol de dependencias... Hecho
Leyendo la información de estado extendido
Inicializando el estado de los paquetes... Hecho
Leyendo las descripciones de las tareas... Hecho
Construir la base de datos de etiquetas... Hecho
Se ELIMINARÁN los siguientes paquetes:
linux-headers-2.6.18-4{p}
0 paquetes actualizados, 0 nuevos instalados, 1 para eliminar y 0 sin actualizar.
Necesito descargar 0B de ficheros. Después de desempaquetar se liberarán 18,6MB.
¿Quiere continuar? [Y/n/?] y
Escribiendo información de estado extendido... Hecho
(Leyendo la base de datos ...
99939 ficheros y directorios instalados actualmente.)
Desinstalando linux-headers-2.6.18-4 ...


Saludos y suerte.
Domi - Gran Canaria (Islas Canarias)

10 comentarios:

Batusai dijo...

Romario:
Esta muy buena la guía. Mira, yo me he descargado una versión que aun esta en prueba en la página oficial de Debian. Lo compile e instale. Recientemente me mando un mensaje que decia algo asi como que el sistema a iniciado 33 veces sin corregir el error y de forma automática escaneo algo y luego entro a la pantalla de registro. He puesto un poco de atención y he visto que al cargar el sistema envía un mensaje que dice Fatal Error en algo, pero no lo he podido detectar.
La pregunta es ¿Como puedo hacer para ver desde la consola cual es la secuencia de arranque y que me muestre donde esta el error?
Saludos

Batusai dijo...

Romario,
pues he descubierto cual ha sido el error y ya lo corregi.
El error era
FATAL: Error inserting i8xx_tco (/lib/modules/2.6.18-3-686/kernel/drivers/char/watchdog/i8xx_tco.ko): No such device
y la solucion fue editar el archivo /etc/discover.conf
corrigiendo i8xx-tco por i8xx_tco y se soluciono el problema.
Igual,
muchas gracias
Saludos

Romario dijo...

Hola Batusai.
1. Lo del chequeo es normal. Las particiones con formato ext3 realizan un chequeo para comprobar su integridad tras haber sido montadas x número de veces.

2. Para ver los log de arranque debes ejecutar éstos comandos como root:

- Salidas del Kernel:
# dmesg | less

- Carga de servicios/demonios:
Debes instalar primero el paquete initscripts.

# aptitude install initscripts

Luego edita el fichero /etc/default/bootlogd y déjalo tal como detallo a continuación.

# vi /etc/default/bootlogd
# Run bootlogd at startup ?
BOOTLOGD_ENABLE=yes

La próxima vez que reinicies, te habrá creará el fichero /var/log/boot. Ahora revisa el contenido igual que antes:

# less /var/log/boot

Por cierto, me he fijado y también tengo el mismo error que tu. Mira el siguiente enlace con más información. Parece que mi placa no posee ese chipset. De ahí que de el error. He hecho lo que me comentas. Gracias. La próxima vez que inicie me fijaré si ya no da el error.

http://www.nabble.com/i8xx_tco-t4367116.html

Saludos
Domi

Batusai dijo...

Romario,
la solución al problema la encontré en esta página http://www.sawadka.org/article.php3?id_article=150.

Y acabo de hacer lo que me recomendaste.
muchas gracias!
saludos

Elthon Guillermo dijo...

hola romario, aun soy un principiante en linux, y mi pregunta es esta, como se exactamente q version de kernel nuevo instalar, ya que mi kernel es 2.6.18-4-k7 y el q esta en este tuto es me imagino el correcto para esa laptop, tuve buscando algo en kernel.org, pero no encontre algo q aclare mi duda, y si instalo el q dice la guia habria algun problema?

Romario dijo...

Hola Elthon Guillermo.
La guía está basada en un PC con procesador Intel, que es el que tengo yo, más concretamente, un Dual Core 2Ghz. Según lo que me comentas, tienes un procesador AMD en tu equipo.
Pues bien,lo que pretendo explicar en ésta guía son algunos problemas que me he encontrado a la hora de actualizar el kernel a las nuevas versiones que Debian ha sacado. Sigue la guía tal y como está que creo que no deberías tener más problemas de los que describo ahí. Tendrás que configurar todos los módulos (gráfica, wifi, etc.) que hayas instalado en tu kernel actual.
Si no has actualizado el kernel y sigues con la versión que me comentas (2.6.18-4-k7), al ejecutar el comando "aptitude update && aptitude upgrade" te debe aparecer retenido el paquete "linux-image-2.6-k7". Debes instalar ese paquete que tienes retenido para actualizar el kernel a la nueva versión, la cuál será "2.6.18-5-k7".
En cuanto a problemas, si no eliminas el kernel 2.6.18-4-k7,siempre podrás iniciar con él desde el arranque tal y como tienes actualmente el sistema, (fíjate que cuando instales el 2.6.18-5-k7, te aparecerá una nueva entrada en el menú de GRUB).

Ejecuta éste comando "aptitude search linux-image" y verás los kernel que están disponibles actualmente en los paquetes oficiales de Debian. Puede que te aclares un poco viendo este listado. Fíjate en la "i" que hay al comienzo de cada línea. Son los paquetes que tienes instalados en el sistema.

Espero que entiendas el rollo que te acabo de soltar. ;-)

Saludos y suerte.
Domi

Elthon Guillermo dijo...

Saludos romario, te cuento q me aventure a seguir la guia antes de publicaras tu comentario, e instale el kernel q decia tu guia, instalo todo chevere y funcionaba todo bien, luego de leer tu comentario me volvi a aventurar a instalar el kernel q le correponde a mi procesador as i q instale todo normal, pero al momento de desinstalar los antiguos kernels el proceso se kedaba a medias o sea en la parte q decia:
Se ELIMINARÁN los siguientes paquetes:
linux-image-2.6.18-4-686{p}
0 paquetes actualizados, 0 nuevos instalados, 1 para eliminar y 0 sin actualizar.
Necesito descargar 0B de ficheros. Después de desempaquetar se liberarán 48,0MB.
¿Quiere continuar? [Y/n/?] y
Escribiendo información de estado extendido... Hecho
(Leyendo la base de datos ...
45912 ficheros y directorios instalados actualmente.)
Desinstalando linux-image-2.6.18-4-k7 ...

y no hacia nada mas, y cuando le doy otra vez desinstalar ya no encuentra nada, pero cuando le doy aptitude search linux-image | grep ^i
i linux-image-2.6.18-4-k7 - Linux 2.6.18 image on AMD K7
i A linux-image-2.6.18-5-686 - Linux 2.6.18 image on PPro/Celeron/PII/PII
i linux-image-2.6.18-5-k7 - Linux 2.6.18 image on AMD K7
siguen apareciendo los antiguos kernels al igual q cuando inicio la pc siguen cargados en el grub, este nunca se actualizo, y cuando busco algo relacionado con los kernels antiguos no muestra nada, asi q supongo q de alguna manera desinstale los dos kernel mal, pero la pc esta, configure los modulos y ta todo bien, solo esa es la palta, q no toy seguro si desinstale bien los kernels y como hago pa q ya no me aprescan los antiguos kernels en el grub.

Romario dijo...

Hola Elthon Guillermo.
Si lo que necesistas es eliminar esas líneas, edita el fichero /boot/grub/menu.lst y borralas.
# vi /boot/grub/menu.lst

En cuanto al problema que te da con los kernel, es algo complejo. Intenta desinstalar el "linux-image-2.6.18-5-686" que fue el que instalastes con mi guía. Ten cuidado, no reinicies el equipo sin comprobar que tienes algún kernel instalado ( utiliza el comando aptitude search linux-image | grep ^). Puede que te desinstale al hacer el comando anterior, te lo advierto porque no estoy seguro.
También comprueba que en /boot/grub/menu.lst tienes alguna entrada para el kernel instalado.

Saludos y Suerte.
Domi

Olfa dijo...

Disculpas estoy empezando en Linux
Al usar este comando:
# aptitude update && aptitude upgrade

Al final me aparece esto

W: GPG error: http://www.debian-multimedia.org etch Release: Las firmas siguient es no se pudieron verificar porque su llave pública no está disponible: NO_PUBKE Y 07DC563D1F41B907
E: dpkg was interrupted, you must manually run 'dpkg --configure -a' to correct the problem.
E: No se pudo reconstruir el almacén de paquetes
Que esta mal?

Romario dijo...

Hola Olaf.

Fíjate que te devuelve un "W:" y "E:". La "W" si no me equivoco viene de WARNING (advertencia) y la "E" de ERROR (ha detectado un error).

1. Según parece has añadido el repositorio debian-multimedia pero no has instalado la llave pública del servidor con la que firma los paquetes que te descargas de él. Te falta instalar el paquete "debian-multimedia-keyring".

# aptitude install debian-multimedia-keyring

2. En el mensaje de ERROR, te está diciendo que el proceso de actualización fue interrumpido y que debes ejecutar el comando "dpkg --configure -a" para corregir el problema. Pues simplemente ejecutalo como root:

# dpkg --configure -a

Saludos y suerte.
Domi