Si estás trabajando en una red local con varios servidores Debian, lo más óptimo, pensando en nuevas instalaciones y también en actualizaciones es mantener un pequeño repositorio local con una copia completa del oficial. Tener un repositorio local es bueno, pues evita tener que descargar los paquetes una y otra vez en todos los equipos para actualizar y también, a la hora de nuevas instalaciones, éstas se hacen mucho más rápido.
Vamos por lo tanto a explicar cómo hacer una copia del repositorio oficial, empleando el comando debmirror, ya creado para dicho propósito. Por lo tanto, si nos interesa tener una copia de todo el software principal de debian, podemos ejecutar el siguiente comando.
/usr/bin/debmirror --ignore-release-gpg --postcleanup --method=rsync \
--nosource --host=ftp.fi.debian.org --root :debian \
--progress --arch=i386,amd64 --dist=lenny,squeeze \
--rsync-options="-aIL --partial" --section=main,contrib /srv/debian
Una explicación sencilla de los principales parámetros es:
- --ignore-release-gpg
Ignora la clave GPG del servidor.
- --method
El método de copia que se va a usar. Los más típicos son rsync, http o ftp.
Mejor rsync.
- --nosource
No descarga el código fuente de los paquetes. Excepto que vayamos a compilar, esto no nos interesa para un repositorio local.
- --host
El servidor del que se van a descargar las copias.
- --root
La ruta donde están los archivos.
- --arch
Las arquetecturas que se van a descargar. Las más empleadas en la actualidad son i386 y amd64.
- --dist
El nombre de las distribuciones que se quieran descargar.
En nuestro caso lenny (5.x) y squeeze (6.x).
- --rsync-options
Opciones especiales que se le pasan a rsync en caso de que éste sea el método empleado para la sincronización.
- --section
Las secciones (main, contrib y non-free) que se desean descargar.
Puesto que la seguridad nos interesa para nuestros equipos, es importante también tener una copia del repositorio de seguridad en local. Para ello, únicamente habrá que cambiar los valores de --root y de --dist, tal como sigue.
/usr/bin/debmirror --ignore-release-gpg --postcleanup --method=rsync \
--nosource --host=security.debian.org --root :debian-security \
--progress --arch=i386,amd64 --rsync-options="-aIL --partial" \
--dist=lenny/updates,squeeze/updates --section=main,contrib /srv/security
Si nos interesa tener una copia de debian-volatile entonces,
/usr/bin/debmirror --ignore-release-gpg --postcleanup --method=rsync \
--nosource --host=ftp.fi.debian.org --root :debian-volatile \
--progress --arch=i386,amd64 --rsync-options="-aIL --partial" \
--dist=lenny/volatile,lenny-proposed-updates/volatile /srv/volatile
Ahora que ya tenemos todo listo, sólo falta poder dejar los archivos descargados accesibles para los demás equipos. Para poder hacerlo, podremos optar por montar un servidor ftp (puerto 21) o un servidor web (puerto 80). En este caso, para dejarlo lo más simple, elegiremos un servidor web. Instalamos apache2, por ser más conocido.
shell> apt-get install apache2
Y ahora, para dejarlo todo listo y simplificado, únicamente hacemos los link's simbólicos entre los archivos descargados en /srv a /var/www, tal como sigue.
shell> ln -s /srv/debian/ /var/www/debian
shell> ln -s /srv/security/ /var/www/security
shell> ln -s /srv/volatile/ /var/www/volatile
shell> ls -l /var/www/
lrwxrwxrwx 1 root root 12 May 25 2011 debian -> /srv/debian/
lrwxrwxrwx 1 root root 14 May 27 2011 security -> /srv/security/
lrwxrwxrwx 1 root root 14 May 30 2011 volatile -> /srv/volatile/
Lo único que falta es darle un nombre a este equipo para poder atacarlo. Si tenemos en la organización un servidor DNS, habría que crear una nueva entrada, sino, simplemente en el fichero /etc/hosts se añade una nueva línea como la que sigue, pero cambiando la IP por la que corresponda en vuestro caso.
192.168.1.150 mirror.server.loc mirror
Y ahora, en el fichero /etc/apt/sources.list, dejamos las siguientes entradas, para que apt trabaje perfectamente contra el repositorio local.
deb http://mirror.server.loc/debian squeeze main contrib
deb http://mirror.server.loc/security squeeze/updates main contrib
Un ejemplo de funcionamiento correcto, al realizar la actualización de los paquetes disponibles,
shell> apt-get update
Obj http://mirror.server.loc squeeze/updates Release.gpg
Obj http://mirror.server.loc squeeze Release.gpg
Ign http://mirror.domain.loc/debian/ squeeze/contrib Translation-en
Ign http://mirror.server.loc/debian/ squeeze/contrib Translation-es
Ign http://mirror.server.loc/debian/ squeeze/main Translation-en
Ign http://mirror.server.loc/debian/ squeeze/main Translation-es
Ign http://mirror.server.loc/debian/ squeeze/non-free Translation-en
Ign http://mirror.server.loc/debian/ squeeze/non-free Translation-es
Obj http://mirror.server.loc squeeze/updates Release
Obj http://mirror.server.loc squeeze Release
Obj http://mirror.server.loc squeeze/updates/main i386 Packages
Obj http://mirror.server.loc squeeze/updates/contrib i386 Packages
Obj http://mirror.server.loc squeeze/updates/non-free i386 Packages
Obj http://mirror.server.loc squeeze/main i386 Packages
Obj http://mirror.server.loc squeeze/contrib i386 Packages
Obj http://mirror.server.loc squeeze/non-free i386 Packages
Leyendo lista de paquetes... Hecho
Nota: No se mencionó, pero es obvio, los comandos de actualización hay que ejecutarlos cada cierto tiempo para poder mantener el repositorio local actualizado. Al emplear rsync, únicamente los paquetes que cambien serán transferidos, ahorrándonos ancho de banda.
Se puede crear un pequeño script y dejarlo en crontab para que se ejecute diariamente o semanalmente.