ACTUALIZACION OFF-LINE DE LA DEBIAN/SARGE DE GARRAXI IRRATIA. Hemos realizado la actualizacion del S.O. de los ordenadores de Garraxi (una distribucion GNU/Linux Debian) de la version 3.1 Sarge, a la 4.0 Etch. La actualizacion se ha realizado sin tener conexion a internet y sin usar CD/DVD para ello, solo contando con otra maquina con igual distribucion que si tiene conexion. Los pasos realizados para actualizarla han sido: 0. Limpieza de paquetes: Antes de ponerse a upgradear las maquinas sin conexion, hacer una limpia de paquetes de programas que no se necesitan (desinstalarlos). - Orphaner: Tras desinstalar programas, pueden quedar instaladas librerias que no se necesitan. Para desinstalar los paquetes de librerias que no tienen ningun paquete que dependa de ellas se utiliza orphaner (que es un frontend de deborphan). Se ejecuta orphaner en una consola como root y sale una interfaz dialog con todos los paquetes que se pueden desintalar. Para desintalarlos marcarlos en el cuadro de seleccion y dar a "Ados". Tambien se puede simular que es lo que pasaria si se desinstalan, y se puede obtener info sobre el paquete a desintalar pinchando en "Laguntza". Cuando se da a ejecutar o a simular, se desinstalan o simula que se desinstalan los paquetes y despues vuelve a correr deborphan para ver si vuelven a haber mas paquetes huerfanos. Asi hasta que ya no queda ninguno. Hay que tener en cuenta que en la desinstalacion a traves de orphaner NO se borran los ficheros de configuracion. De esta manera es interesante despues utilizar un metodo para desinstalar completamente esos paquetes (ver mas adelante). - Debfoster: Debfoster es una herramienta avanzada para desinstalar paquetes no deseados. Mantiene una lista de paquetes que han sido instalados explicitamente, y no por dependencias. Dicha lista se crea corriendo como root 'debfoster -q'. Despues se puede editar (añadir o quitar paquetes de ella) con un editor de textos normal, ya que se encuentra en: /var/lib/debfoster/keepers. Hay que tener en cuenta que da la impresion de que en esa lista se meten tambien paquetes que puedes haber instalado tu (no por dependencias), pero no quieres mantener (ejemplo librerias -dev). Para quitarlas una idea es eliminar de la lista (con un editor de texto) todas las librerias que aparezcan. De esta manera se desinstalaran todas las que realmente no valgan para nada, y no se desinstalaran las necesarias por dependencias de los paquetes que mantienes en la lista. Una vez hecho esto puedes correr simplemente debfoster y te pregunta que hacer con los paquetes que existan y no sean dependencias de los listados en keepers. Puedes desinstalarlos, desisntalar tambien otros asociados a ellos, mantenerlos (y entonces se meten en la lista keepers), etc. - Desinstalar paquetes compilados: Se pueden buscar los paquetes de la seccion "checkinstall", para saber que paquetes he compilado yo e instalado con esa herramienta. Despues desisntalarlos como habitualmente. Tambien se puede utilizar para ello aptitude, corriendo en una consola como root 'aptitude', te da una interfaz ncurses con la lista de paquetes instalados, separadas por secciones. Una de las secciones es siempre "Paquetes obsoletos y creados localmente" (Pakete zaharkituak eta lokalki sortuak) donde se listan los paquetes que hemos compilado, los que se han bajado de internet sin apt-get, y los que hayan quedado obsoletos por la razon que sea. - Eliminar paquetes transicionales: Son los paquetes que solo se instalan para facilitar transicion entre versiones de debian. Se pueden buscar paquetes dummy, obsolete o transitional de entre los instalados y despues desinstalarlos a mano si conviene. Para buscarlos: $ dpkg -l|grep -i dummy $ dpkg -l|grep -i transitional $ dpkg -l|grep -i obsolete - Eliminar la configuracion de paquetes desinstalados: Si no se utiliza 'apt-get remove --purge' para desinstalar paquetes, el sistema guarda sus archivos de configuracion. El comando dpkg -P desintala completamente los paquetes que se han desintalado pero no se ha quitado su configuracion con --purge. Estos son los que haciendo un dpkg -l aparece una "rc" al principio del archivo, ejemplo: ||/ Izena Bertsioa Azalpena +++-==============-===========-==================== rc esound-clients 0.2.36-3 Enlightened Sound Daemon - clients Esta desinstalacion se puede automatizar con la orden (borra todos los "rc" existentes): COLUMNS=200 dpkg -l |grep ^rc |awk '{print $2} ' | xargs sudo dpkg -P Tras la limpieza con todos estos pasos se separa en dos listas los paquetes a mantener: los que son paquetes debian (los gestiona apt-get) y los que son compilados e instalados a mano, pero son necesarios. Estos ultimos se desinstalan para que no interfieran con la actualizacion de los paquetes que gestiona apt-get (y se volveran a instalar despues). Hago tambien una lista de paquetes instalados tras la limpieza, para compararla con la que haya tras el upgrade. La hago con: COLUMNS=150 dpkg -l > paquetes-garraxiaux-15-4-traslimpieza.txt Aprovecho tambien para hacer una copia de seguridad de paquetes, configs en /etc y configs en /home por si acaso. 1. Conseguir la lista de paquetes actualizada en la maquina sin conexion: - La lista de los paquetes de Debian Etch esta actualizada en la maquina con conexion (que tendra la misma version de Debian que la que se va a poner en la maquina sin conexion), en el dir /var/lib/apt/lists, y esta distribuida en varios archivos que tienen los nombres de los repositorios que tenemos en el /etc/apt/sources.list. Si se quieren poner versiones de Debian diferentes en ambas maquinas, tambien se puede conseguinr dicha lista desde internet, con el metodo indicado en http://jedrm.wordpress.com/2006/09/12/howto-updateinstallupgrade-a-debian-box-wi th-no-internet/. Pero esto es mas complicado porque se deben bajar muchos archivos de pakages de los server de debian a mano, y luego renombrarlos con nombres largos y complicados. Aqui ya los tenemos bajados y renombrados en una maquina y solo los transferimos a otra. - Todos los paquetes descargados por apt-get se almacenan por defecto en /var/cache/apt/archives/. Estaran alli mientras no se borren, ejecutando por ejemplo 'apt-get clean'. - /var/cache/apt/pkgcache.bin es la caché de paquetes y se actualiza con la orden 'apt-get check', que actualiza la cache de paquetes (/var/cache/apt/pkgcache.bin), crea un nuevo árbol de dependencias y busca dependencias imposibles de resolver. Este archivo se recreara por tanto tras actualizar los otros archivos, al hacer algun apt-get, por lo que no es necesario moverlo. Entonces para conseguir la lista de paquetes actualizada en la maquina sin conexion se llevan los siguientes archivos de la maquina con conexion (en una memoria usb por ejemplo): * El contenido del dir /var/lib/apt/lists * El archivo /etc/apt/sources.list y se sustituiria con esto lo que hay en la que no tiene conexion. Las fuentes de paquetes debian que se utilizan son las de "etch" del server frances (que parece mas rapido que el español), y las de security. 2. Hacer el dist-upgrade inicial en la maquina sin conexion: Antes de empezar hay que tener en cuenta que el metodo recomendado por las notas de la version de Debian/Etch para mantener los paquetes es ahora el programa aptitude, en vez de apt-get, dado que el primero tiene mejor control de las dependencias (en concreto al desinstalar paquetes tiene en cuenta las librerias que se instalaron solo por dependencias de ese paquete, para desinstalarlas tambien si se puede). Asi que es conveniente utilizar aptitude. Pero en este upgrade off-line se utilizo apt-get para el dist-upgrade inicial en la maquina sin conexion dado que los comandos que se necesitan (imprimir las URL de los paquetes...) estan en apt-get y no (creo) en aptitude. Tambien se recomendaba en las notas de la actualizacion de Etch que antes de actualizar se arrancara el ordenata con el nucleo 2.6 que venia en Sarge, para facilitar la transicion. Los pasos a dar son: - Poner el contenido de /var/lib/apt/lists y del /etc/apt/sources.list de la maquina con conexion en la maquina sin conexion. Guardar, por si acaso el contenido inicial en un dir de backup, en la misma localizacion. - Hacer un apt-get check para actualizar la caché de paquetes. - Hacer un aptitude update (o apt-get update) para que se entere de la existencia de los nuevos paquetes. Esto lo dicen en http://www.orsobruno.net/linux/docs/Debian-upgrade-without-Internet-HOWTO-en/how to.html. Dice tambien que da un error pero que funciona (al menos con apt, no con dselect). El error que da es porque no puede bajar de internet las listas de paquetes, pero el cache de paquetes ya esta actualizado en el paso anterior y se puede seguir adelante. - Antes de hacer nada se puede probar a ver si encuentro algun paquete que no estaba en Sarge y si en Etc, para comprobar que el update a funcionado. Por ejemplo 'apt-cache search --names-only iceape' (antes era mozilla). Se ve que si lo encuentra!!!. - Hacer un apt-get upgrade, pero que no intente instalar nada, solo nos diga las URL de las que bajar los paquetes necesarios, y guardarlas en un archivo de texto: apt-get -qq --print-uris upgrade | cut -f 2 -d \' > garraxiaux-upgrade.txt - Hacer un apt-get dist-upgrade, pero que solo nos diga las URL de las que bajar los paquetes necesarios, y guardarlas en un archivo de texto: apt-get -qq --print-uris dist-upgrade | cut -f 2 -d \' > garraxiaux-distupgrade.txt - Meter los dos archivos de texto garraxiaux-upgrade.txt y garraxiaux-distupgrade.txt en la memoria usb y llevarlos a la maquina con conexion. 3. Bajarse los paquetes en la maquina con conexion: En la maquina con conexion utilizar wget para bajar los paquetes debian desde las URL guardadas en los archivos de texto. Para ello se pueden seguir los siguientes pasos: $mkdir ~/debs (crear dir debs) $cd ~/debs (cambiar a dir debs) $cp /path/el/que/sea/garraxiaux-upgrade.txt /path/el/que/sea/garraxiaux-distupgrade.txt ./ (copiar archivos de texto a dir debs) $wget -c -i garraxiaux-upgrade.txt (bajar los paquetes de un archivo de texto) $wget -c -i garraxiaux-distupgrade.txt -c: que continue una bajada previa que se ha cortado -i: que coja lo que bajar del fichero indicado. Los paquetes se descargaran en el dir ~/deb creado. Mover ese dir a la memoria usb y llevarlos a la maquina sin conexion. Otra posibilidad consistiria (sin bajar los paquetes de internet) buscar esos paquetes de la cache de paquetes que pueda tener la maquina con conexion (si no se han borrado) en /var/cache/apt/archives/. Despues copiarlos (esos justo, o todos los que haya) a la memoria usb. 4. Finalmente acabar el dist-upgrade en la maquina sin conexion: Copiar todos los paquetes de la memoria usb a /var/cache/apt/archives de la maquina sin conexion. Hacer el 'aptitude upgrade', y despues el 'aptitude dist-upgrade'. El upgrade si se pudo hacer con aptitude, pero no el dist-upgrade, que haciendolo con aptitude pedia mas paquetes para instalar que los que habia bajado con apt-get en el paso 2. Asi que hago 'apt-get dist-upgrade'. De esta manera, con estos dos comandos se van instalando todos los paquetes que son reemplazo y actualizacion de los ya instalados en la maquina. Es importante estar presente durante la instalacion, porque el sistema hace preguntas de configuracion y en algunos casos hay que apuntar que archivos han cambiado, para comprobarlos despues y poder resolver los problemas de configuracion, etc. 5. Nueva limpieza: Nueva limpieza de paquetes no necesarios (sobre todo librerias obsoletas, etc), como en el paso 0. Al finalizar vuelvo a realizar una lista de paquetes instalados como la realizada en el paso 0., para poder comparar ambas. 6. Comparar lista de paquetes actual y anterior: Comparar la lista de paquetes actual con la anterior (con mgdiff, por ejemplo). Los paquetes que no han cambiado durante el proceso aparecen no resaltados. Crear lista de paquetes no upgradeados y ver las razones para no haberse upgradeado. Para ello se puede utilizar para cada uno de ellos 'apt-show-versions -p nombre_de_paquete' y/o buscarlo en http://www.debian.org/distrib/packages/. Posibilidades encontradas con apt-show-versions: - "newer than version in archive": paquetes compilados por mi desde la version upstream o la de SID. Decision: mantener la version que tenemos, pero recompilandola para Etch, por si acaso (si en el proceso el paquete no se ha cambiado, se mantiene el paquete compilado para Sarge, y esto puede ser malo). - "uptodate": paquetes compilados por mi desde la version de testing, o que no han cambiado entre las dos versiones de Debian. Decision: dejarlos como estan. - "No available version in archive": paquetes compilados por mi desde la version upstream y que no estan en debian, o paquetes que estaban en Sarge y han desaparecido en Etch. Decision: ver si lo necesitamos. Si si, buscar codigo fuente y compilarlo para etch. Si no desinstalarlo (y buscar reemplazo quizas). Caso especial: Kernel. El kernel no se actualiza solo, se mantiene el que estaba con la Sarge. Bajar el kernel 2.6 para i686 oficial de Debian (linux-image-2.6.18-4-686) e instalar tambien un custom compilado a partir de las fuentes del kernel oficial, y optimizado para la maquina en cuestion. Tener en cuenta para ello las diferencias de hardware de las dos maquinas (aux y server) y tambien el diferente uso de ambas, un kernel mas orientado a servers y el otro a maquinas de escritorio. No desintalar los kernels viejos de Sarge hasta no haber visto que los nuevos funcionan. Instalar tambien una libc optimizada para i686 (libc6-i686). Para que esta funcione parece que no hace falta desinstalar nada, se utiliza sin mas si el kernel que se utiliza es un 2.6 compilado para i686 y el procesador es un i686 (o algo asi). Al final, solventados todos los problemas con los paquetes debian, recompilar para Etch y reinstalar los paquetes importantes que no estan en Debian, mirando para ello lo quitado al principio (lista "paquetes mios"). 7. Reiniciar con nuevo kernel: Reiniciar con los nuevos kernel 2.6 (custom y oficial). En un caso no me actualizo la config de grub y no habia forma de iniciarlos. Tocar /boot/grub/menu.lst y añadir a mano los nuevos kernels. Desinstalar los viejos kernels 2.4 (kernel-image-2.4.20-ck7 y kernel-image-2.4.27-2-386) cuando se ve que los nuevos funcionan. 8. Reconfigurar cosas importantes: Reconfigurar cosas importantes que han quedado medio mal, o por las indicaciones dadas por la documentacion de las notas de la version de Debian/Etch: http://www.debian.org/releases/stable/releasenotes. * Mejorar la configuracion de las X, en /etc/X11/xorg.conf. El debian configurator no siempre pilla bien las tasas de refresco horizontal y vertical de la pantalla, ni el /dev/psaux del mouse y su protocol "auto". Pillo esos datos de la config vieja en /etc/X11/XF86Config-4. * Añadir a la configuracion de las X (en /etc/X11/xorg.conf) las instrucciones para apagar la pantalla antes (copiada de la antigua config, sirve igual). Esta en la seccion "ServerFlags". * Quitar el arranque de demonios que no se necesitan: - Servidor: Quito: boa/apache, exim4, gpm y alguno mas. Mantengo: udev, portmap, syslogd, klogd, y anacron. - Auxiliar: Quito: boa/apache, exim4, sshd, cron, gpm, nfsd y alguno mas. Mantengo: udev, portmap, syslogd, klogd, nfsd, atd y cron. * Mirar las configuraciones de los paquetes que el apt ha dicho que se iban a modificar cosas (siempre es mejor instalar la config propuesta en el paquete y despues compararla con la tuya que se guardara como `.dpkg-old'). Para ello estar presente durante el upgrade e ir apuntando todos los problemas que salgan. Comparar las que he instalado con la que tengo guardada en la copia de seguridad. Recuperar mis configs si se da el caso. * Bajar lame y tal de http://www.debian-multimedia.org utilizando en la maquina con conexion un mirror portuges que aparece en la pagina. * Mirar el problema de apt que dice que no se puede confirmar los paquetes a instalar. Parece ser que se arregla haciendo como root un 'apt-key update', con lo que se actualizan las "signatures" (aunque en las maquinas sin conexion esto parece que no funciona y siempre te indica que se van a instaar paquetes sin confirmar su procedencia). * Con el kernel custom, el mplayer no puede mojorar su rendimiento porque no puede tocar el RTC y cambiar el max-user-frec (o algo?). Lo recompilo añadiendo en la config CONFIG_RTC=y (anda por "charecter devices") y va bien. * En los kernels 2.6 el sistema de deteccion del enchufado en caliente de dispositivos, o de deteccion del harware lo lleva udev, en vez de hotplug que lo utilizaba el 2.4. Por lo demas funciona parecido, es arrancado en el inicio y se queda como un proceso corriendo en plan demonio. Para que esto funcione el kernel tiene que tener soporte para tmpfs. Con udev, la memoria usb es detectada cuando se enchufa y se cargan los modulos (mass-storage y tal) necesarios. Despues el supermount compilado en el kernel-custom funciona perfectamente (tanto con usbs, como con cds y disketes). La targeta de sonido tambien es detectada en el inicio por udev y carga todos los modulos de ALSA. Asi parece que no harian falta los paquetes alsa-base y alsa-utils que permiten la configuracion de alsa para que se carge en el inicio (pero si estan por dependencias de otros paquetes no pasa nada). * Editar `/etc/kernel-img.conf' y cambiar la localización del programa `update-grub' cambiando `/sbin/update-grub' por `/usr/sbin/update-grub'. Asi esa parte queda: postinst_hook = /usr/sbin/update-grub postrm_hook = /usr/sbin/update-grub * Los sistemas de ficheros ext2 y ext3 es mejor que tengan habilitadas las funciones 'dir_index'. Esta funcion acelera las operaciones en directorios que tienen muchos ficheros. Asi utilizo 'sudo tune2fs -O +dir_index /dev/hda1' para añadir el dir_index en la particion raiz. Despues se puede ver que etiquetas tiene esa particion (entre otras cosas) con 'sudo dumpe2fs -h /dev/hda1': Filesystem features: has_journal dir_index filetype needs_recovery sparse_super * Al instalarse Xorg se instala tambien el metapackage xserver-xorg-video-all, con lo cual se instalan todos los paquetes de drivers de las X. Se puede desinstalar tanto este, como todos los demas excepto el que se usa en cada maquina (y los vesa, vga y dummy, por si acaso). Lo mismo pasa con los 'xserver-xorg-input*' que se instala el xserver-xorg-input-all y todos los drivers de dispositivos de entrada. Se pueden desinstalar todos excepto el mouse y el kbd (keyboard). * Mirar si existen los paquetes gcc-3.3, g++-3.3 y similares (etch usa la version 4.1 por defecto) Paquetes quitados: cpp-2.95 gcc-2.95 cpp-3.3 g++-3.3 gcc-3.3 gcc-3.3-base, y libstdc++5* libstdc++5-3.3-dev (por dependencias de los anteriores). Esto libera mas de 17 Mb. * La codificación por omisión para etch es UTF-8, asi que pruebo a hacer un `dpkg-reconfigure locales' para poner UTF-8 en el locale por defecto: elijo locales es_ES.UTF-8 y eu_ES.UTF-8 y predeterminado eu_ES.UTF-8. Sin embargo, las aplicaciones gtk1 muestran menus con acentos y todo, pero cuando en emelfm intento renombrar un nombre con 'enye' no lo muestra en el cuadro de dialogo. En gtkedit tampoco se pueden escribir enye ni acentos (salen simbolos raros) y no hay solucion para esto. Las aplicaciones gtk2 y qt tambien muestran los menus bien y ademas se pueden escribir enyes y acentos. Las aplicaciones en las librerias de las X (Xlib) y en Xaw no parecen pillar bien los acentos (el menu de Icewm no los acepta). Vistos los problemas, revierto todos los cambios y dejo 'sudo dpkg-reconfigure locales' con locales definidos: es_ES.UTF-8 eu_ES.UTF-8 es_ES ISO-8859-1 eu_ES ISO-8859-1 es_ES@euro ISO-8859-15 eu_ES@euro ISO-8859-15 y predeterminado el eu_ES@euro ISO-8859-15 Tengo que instalar las fuentes "transcoded" para el soporte del euro (ISO-8859-15). Asi instalo las xfonts-100dpi-transcoded. Las de 75dpi no hacen falta porque son para pantallas que soporten menor resolucion (pero no se pueden desinstalar las xfonts-75dpi porque quitan todas las X por dependencias, solo quito las xfonts-75dpi-transcoded).