Haciendo un mirror de debian o ubuntu

Me ha tocado hace tiempo hacer un mirror de ubuntu y relato ahora los problemas que he tenido, como los he solucionado y la forma en la que voy a acabar haciéndolo.
Todo lo que aquí digo también sirve para debian ya que ubuntu no deja de ser una copia modificada de Debian.

Para hacer un mirror de ubuntu necesitamos usar la herramienta rsync y algo de su sintaxis así como el lugar del que podemos bajarnos los paquetes del mirror.

El comando básico que se puede usar es rsync -auvz rsync://archive.ubuntu.com/ubuntu /var/www/ubuntu/.
El parámetro 'a' hace una copia recursiva muy similar a la que hace "cp -a".
El parámetro 'u' significa "update" y nos sirve para borrar los archivos que ya no están en el mirror de origen.
El parámetro 'v' significa "verbose".
El parámetro 'z' sirve para habilitar la compresión por gzip.

Si ejecutamos el comando anterior veremos que se empiezan a bajar ficheros de todas las arquitecturas así como del código fuente.

A veces no queremos bajárnoslo todo. Por ejemplo, supongamos que queremos bajar todo menos los binarios de amd64. Una posible orden podría ser:
rsync -auvz rsync://archive.ubuntu.com/ubuntu --exclude=*amd64.deb --exclude=*amd64.udeb --exclude=*amd64 /var/www/ubuntu/
También podemos excluir *gz y *dsc para no bajarnos el código fuente.

Los problemas que he encontrado al hacer el mirror han sido básicamente la falta de espacio y las interrupciones que yo realizaba al programa que no permitían que se borraran ficheros ya que el borrado se realiza al final de la ejecución de rsync.

Si comenzamos varias veces el rsync y no lo dejamos acabar los ficheros se empezarán a acumular en el disco duro y acabarán llenándolo. Si se da este caso, lo mejor es borrar ficheros.
En mi caso no podía borrar la arquitectura i386 porque la estábamos usando así que no podía borrar por ejemplo todo "main" o todo "universe". Tenía que borrar por ejemplo la arquitectura amd64.
Usaba la siguiente línea:
for i in `ls`; do for j in `ls $i`; do rm $i/$j/*amd64*; done; done
Si esto se ejecuta en "main" irá borrando todos los paquetes que contengan la cadena "amd64", si se ejecuta en "universe" lo mismo. Esto nos permitirá eliminar solo una arquitectura sin afectar a las demás.

A día 14 de Septiembre del 2006, excluyendo las arquitecturas sparc y amd64 el mirror ocupa unos 145GB así que ve preparando disco duro.
También es verdad que la mayor parte del espacio ocupado es el código fuente así que si lo excluyes no te ocupará ni la mitad.

Espero haberos animado a hacer un mirror de debian o ubuntu y contribuir a la comunidad de software libre.