sábado, febrero 21, 2004

Instalar paquetes debian descargando desde otra PC

- Primero: Editar el /etc/apt/sources.list de la Debian para que apunte a cualquiera de los servidores de paquetes de Debian. Ver lista de mirrors en http://www.debian.org/mirror/mirrors_full. Si quieres conseguir las versiones mas nuevas, conviene poner 'unstable' como distribución preferida (mira man:sources.list), pero si rompes algo...

- Segundo: Hacer un apt-get update para actualizar la base de datos de paquetes con los paquetes nuevos que encuentre en el servidor. Para esto se necesita, claro, estar conectado a internet. A mi me costo algo así como 15 minutos. Cuando acabe la actualización, ya no sera necesaria mas conexión en esa máquina.

- Tercero: Utilizaremos apt-get como si fuéramos a instalar o actualizar los paquetes que queremos, pero pidiéndole que solo nos imprima las direcciones desde donde tenemos que bajarlos. Apt, como siempre, se encargara de buscar las dependencias que tiene esos paquetes y dará una lista de todos los que tendremos que instalar y sus URL's. Haremos que esa lista se guarde en un fichero de texto, que luego llevaremos a la máquina con buena conexión, para que wget se encargue de bajar automáticamente todos los paquetes.

Después de leer un poco, y gracias, sobre todo a un comentario en esdebian.org (ver nota 2), el scrip para hacer todo esto me ha quedado así:

apt-get -y --print-uris install sylpheed | grep http | awk '{print $1}' | tr -d "'" > debs.txt

Donde:

* apt-get:
-y: dice si a todo, para que no se pare a preguntar si estas de acuerdo con "instalar" los paquetes y tal.

--print-uris: orden que hace que se "impriman" las URL's de los paquetes que se van a "instalar".

install sylpheed: es el ejemplo que he utilizado, le pido que me "instale" la versión mas nueva que haya de sylpheed, con todas sus dependencias. Se puede sustituir por los demás comandos de apt-get como upgrade, dist-upgrade... (a tu entero riesgo :-)).

* grep http: hace que solo se seleccionen las lineas de texto que empiezan por un http (las de las URL's de los paquetes) y elimina el resto de "paja". Si el sources.list tiene seleccionados servidores ftp, cambiar http por ftp (supongo).

* awk '{print $1}': de la lineas seleccionadas por grep, hace que solo se "imprima" la primera parte ($1), que es justo la que tiene la URL. De esta forma se elimina el resto de información que da el --print-uris del apt-get en la linea, que son: los nombres de ficheros, sus tamaños y los md5; y que luego "confunden" a wget.

* tr -d "'": sirve para quitar las comillas simples (') con las que el apt-get engloba las URL's. Si no lo quitamos también wget se hace un lío. (si todo esto no funcionara, también se puede editar el fichero a mano :-).

* > debs.txt: encadena todo lo anterior al archivo de texto debs.txt, que será luego el que le pasaremos a wget.

- Cuarto: Coger el archivo "debs.txt", meterlo en un disquete normal (formateado para el sistema operativo de la otra máquina) y llevarlo a la máquina con buena conexión. Copiarlo en el mismo directorio donde esta wget (o si no modificar el path en la orden que demos a wget). Hacer wget -i debs.txt. Por ejemplo, si la máquina tiene un win98 (como es mi caso) y wget esta instalado en el directorio C:\wget, abrir una ventana del DOS, ir a ese directorio haciendo cd c:\wget, y allí escribir el comando de mas arriba. Con esto, si todo va bien, wget leerá el fichero debs.txt, se conectara con el servidor que tenemos en el sources.list y bajara todos los paquetes debian que nos hacen falta para actualizar sylpheed (en el ejemplo).

- Quinto: Aquí lo dejo a tu imaginación. Puedes coger esos archivos (que, en general, estarán en el mismo directorio que wget) y grabarlos en un cd. O puedes utilizar una unidad zip que te funcione en las dos máquinas, o medio millar de disquetes... Yo personalmente (que soy un poco vago :-), lo que he hecho es instalar una unidad zip al puerto paralelo en el win98 donde me baje los paquetes, y en el ordenador de casa, donde tengo la Debian. Pero en este ultimo lo he hecho también bajo windows, que era solo ejecutar el disquete de drivers. Para hacerlo en linux deberla haber cambiado el kernel, cargado módulos y yo que se que mas cosas :-/ (lo estuve mirando). Así que lo que hago es bajarme los paquetes, pasarlos al zip, ir a casa, encender el ordenata en win, pasar los paquetes a una partición compartida que tengo de tipo windows y reiniciar el ordenata en linux.

- Sexto: Instalar todos los paquetes bajados con dpkg -i nombres_de_los_paquetes_separados_por_espacios. Si tenemos todos los paquetes bajados en un directorio del que no cuelga ningún subdirectorio que tenga otros paquetes podemos hacer (mas fácil si son muchos) dpkg --recursive -i directorio. Si en el intervalo no has cambiado nada en la Debian y las dependencias siguen como cuando hiciste apt-get en el paso tercero, todo debería ir bien. Si algo falla... ah, yo no se nada :-).

- Séptimo: A disfrutar del nuevo sylpheed (o lo que sea).