En situaciones en las que administrás varias máquinas, Apt puede ser de mucha ayuda ya que hace que el proceso de actualización y aplicación de los parches de seguridad para cada máquina sea muy simple. El problema es que, con el método tradicional, una vez que sale una actualización, tenés que bajar una copia de todos los nuevos paquetes para cada una de las máquinas, lo que implica un consumo fenomenal de nuestro ancho de banda y del ancho de banda del servidor oficial.
Afortunadamente, existe un método que nos permite actualizar una de las máquinas y, desde allí, actualizar el resto de las máquinas que componen nuestra red. Este método, además de reducir los costos y optimizar el uso de nuestro ancho de banda, evita la duplicación de paquetes en las distintas máquinas: todas instalan los paquetes utilizando nuestro «servidor de caché».
Cuando estás ejecutando la misma distribución en diferentes máquinas (ya sea en el trabajo, en laboratorios de computación, en «granjas» de servidores, en clusters o incluso en tu pequeña red doméstica) puede resultar útil crear un repositorio caché en tu red para que una vez descargado un paquete desde un repositorio oficial todas las demás máquinas lo descarguen desde ese repositorio caché que está almacenado en una máquina de tu red a la que llamaremos «servidor». De esta manera, las actualizaciones descargadas desde una máquina pueden ser instaladas en las demás sin necesidad de volver a descargarlas desde los repositorios oficiales.
Primero veamos algunas soluciones «no tradicionales» que NO recomiendo, pero que seguramente te vendrán a la mente a la hora de resolver esta cuestión.
Compartir /var/cache/apt
Cuando instalás un paquete en una distro Debian (o sus derivadas), éste se almacena localmente en el directorio ‘/var/cache/apt’. Cuando un paquete es requerido, Apt primero busca en este directorio para ver si existe una copia local (o sea, un caché), evitando así su descarga innecesaria. Como resultado de ello, a varios de Uds. seguramente se les habrá ocurrido que una buena forma de resolver el problema en cuestión podría ser elegir una computadora, que designaríamos como una suerte de servidor, que se actualizaría utilizando los repositorios oficiales, y que compartiría su directorio ‘/var/cache/apt’ con el resto de las máquinas de la red. No obstante, este método podría derivar en problemas vinculados al bloqueo del archivo ‘sources.list’. En general, no es la solución más utilizada ni la más conveniente.
Mover los paquetes
En vez de compartir un directorio ‘/var/cache/apt’ común, otra alternativa podría ser que cada compu utilice su propio directorio local de caché pero generar un script que se ocupe de copiar los paquetes de una máquina a la otra de modo que queden todas actualizadas. Una herramienta para llevar adelante esta tarea puede ser ‘apt-move’, pero sinceramente no se las recomiendo porque no es lo suficientemente transparente para el usuario final. Además, puede significar una utilización completamente innecesaria de espacio en disco ya que deberán copiarse todos los paquetes en cada una de las máquinas.
Sistemas de caché dedicados
La mejor solución para este problema es la utilización de un sistema de caché dedicado. De lo que se trata, en definitiva, es de crear una copia de los servidores oficiales en una de las máquinas de tu red y luego configurar al resto de las máquinas para que, en vez de buscar las actualizaciones desde los servidores oficiales, lo hagan utilizando este caché (o copia) local.
Existe una variedad de sistemas diseñados para trabajar con Apt, incluyendo apt-cacher, apt-proxy, y apt-cached.
Aquí vamos a tratar con apt-cacher, que es el más sencillo de usar.
Apt-cacher
Apt-cacher es bien diferente de otros sistemas de caché de repositorios ya que no es un programa independiente («stand-alone») sino que corre como un script CGI bajo Apache. Esto tiene varias ventajas, como por ejemplo, convertirlo en una herramienta pequeña y simple pero al mismo tiempo muy poderosa y, por consiguiente, más robusta porque no precisa de un código propio para el manejo de protocolos, y es muy flexible porque podés usar el mecanismo de control de acceso de Apache en caso de que quieras limitar el número de máquinas que se encuentren habilitadas para acceder al caché.
Apt-cacher sólo necesita ser instalado en una máquina, aquella que decidas que debe funcionar como tu caché local de repositorios. Luego, el resto de las computadoras de tu red deberán ser configuradas para que realicen los pedidos de actualizaciones al caché y no a los servidores oficiales.
Configuración del servidor
Para instalar basta con
sudo apt-get install apt-cacher
Este paquete tiene dependencias con apache, perl y wget, por lo que los instalará si no lo tenés previamente instalados.
Una vez instalado, es recomendable reiniciar Apache:
/etc/init.d/apache restart
Finalmente, lo único que hay que hacer es ajustar los parámetros por defecto del script. Escribí en un terminal:
sudo gedit /etc/apt-cacher/apt-cacher.conf
En general, todos los valores por defecto están bien, pero es recomendable ajustar los tres siguientes:
admin_email=mimail@miservidor
generate_reports=1
expire_hours=24
El segundo elemento es una variable de tipo booleana que determina la generación de reportes (0 no genera reportes, 1 sí los genera). El primer elemento, en cambio, es la dirección de correo electrónico a la que se enviarán los reportes creados. El tercer y último elemento determina la cantidad de horas que debe esperar Apt para verificar si hay actualizaciones disponibles en los servidores oficiales.
Si utilizás un proxy, no te olvides de agregar los siguientes elementos:
http_proxy=proxy.example.com:8080
use_proxy=1
Para verificar que funcione, podés acceder a tu caché local a través de la url http://nombre_servidor/apt-cacher/ y aparecerá una página donde se muestra la configuración de apt-cacher. Recordá que ‘nombre_servidor’ debe ser reemplazado por el IP de la máquina que hayas designado como ‘servidor’, o sea, como depositaria del caché local de paquetes.
Configuración clientes
Ahora lo único que hay que hacer es modificar los sources.list de los clientes para que pasen a través del servidor. Si el IP del servidor es 123.123.123.123, hay que añadirlo a cada línea del sources.list, y además tener cuidado y que todos hagan referencia al mismo servidor, sino el cache no tendrá efecto.
sudo gedit /var/cache/apt/sources.list
Nota: ¡Ojo! En Debian el ‘sources.list’ se almacena en ‘/var/cache/apt’. Sin embargo, en otras distribuciones como Ubuntu y sus derivados se almacena en ‘/etc/apt’. En caso de que no encuentres el archivo siempre podés encontrarlo ingresando ‘locate sources.list’ en un terminal.
Una vez abierto el archivo, siendo el IP de nuestro servidor 123.123.123.123, habría que modificar todas las líneas usando el siguiente criterio:
# Originales
#deb http://ftp.us.debian.org/debian/ sid main contrib non-free
#deb-src http://ftp.us.debian.org/debian/ sid main contrib non-free
# Modificados
deb http://123.123.123.123/apt-cacher/ftp.us.debian.org/debian/ sid main contrib non-free
deb-src http://123.123.123.123/apt-cacher/ftp.us.debian.org/debian/ sid main contrib non-free
Como ves, hay que agregar al comienzo de la dirección URL el IP del servidor + ‘/apt-cacher/’. Luego va el resto de la línea original.
Estadísticas de tráfico
Si agregaste el elemento ‘generate_reports=1’ en el archivo ‘apt-cacher.conf’, apt-cacher generará estadísticas de accesos, a las que podés acceder con el url ‘/apt-cacher/report’.
Si, por algún motivo, necesitás generar las estadísticas antes de las cantidad de horas establecidas en ‘apt-cacher.conf’, ejecutá el el siguiente comando:
/usr/share/apt-cacher/apt-cacher-report.pl