Configurar un servidor local para distribuir paquetes debian entre diferentes equipos de nuestra red local con apt-cacher.

Cuando se administra una red con muchos equipos Linux (Debian), en ocasiones es necesario actualizar todos los equipos al mismo tiempo, ya sea por una actualización de seguridad o por un nuevo paquete que se necesita instalar en dos o más de ellos. Inclusive cuando se manejan máquinas virtuales dentro de un mismo equipo esto se vuelve fundamental ya que el descargar todos los mismos paquetes de los servidores remotos provoca una saturación en el tráfico de la red y todo para que al final sean los mismos paquetes. Y el andar bajando un paquete y compartirlo entre los diferentes equipos es demasiado engorroso. Pero para ello existe el paquete apt-cacher que nos permite crear un servidor de cache/proxy de para todos los paquetes que se necesiten dentro de nuestra red local.

Cuando un equipo cliente solicite una lista o paquete a cualquiera de los repositorios que tenga configurados (oficiales o no) delegará la descarga al servidor de “apt-cacher”. Si existe una copia en el servidor se devolverá al cliente. En caso contrario el servidor descargará la lista/paquete, hará copia para otras peticiones posteriores y la enviará al cliente.

Es posible configurar el servidor “apt-cacher” para que optimice el espacio ocupado manteniendo sólo copias de los archivos con la última versión, copias para distintas distribuciones de Debian (9, 10, …) o arquitecturas (32 / 64 bits) o tipo de procesador (i386, amd), así como restringir el uso a equipos o subredes concretas.

Instalación inicial

En un equipo que pueda actuar como servidor dentro de tu red, con IP fija, y espacio suficiente en la partición de usuarios del disco duro (+10GB).

Instalar con

# apt-get install apt-cacher


Cuando aparezca la pregunta de como se desea configurar, hay que hacerlo como daemon para que inicie automáticamente al iniciar el equipo. Si no te pregunta durante la instalación hay que modificar el archivo “/etc/default/apt-cacher” y cambiar la línea de “autostart” a “1”  o usar

# dpkg-reconfigure apt-cacher

Asegúrate de que el servidor apt-cacher esté parado con

# service apt-cacher stop

Ajustes a la configuración por defecto del servidor

En caso que la partición del sistema que incluye el directorio “/var/cache” esté limitada a 8-10Gb. hay varias opciones para solventar este detalle ya que aquí se guardaran las copias de los paquetes que se descargen y es muy probable que te quedes sin espacio (y más si ahí almacenas los discos duros de máquinas virtuales).

  • Una opción es si se está usando LVM es aumentar el tamaño de nuestra partición directamente.
  • Otra es crear un link entre el directorio /var/cache/apt-cacher/ y que esté almacenado en un una partición donde si haya espacio disponible.
  • Cear  un nuevo directorio en alguna otra partición como por ejemplo “/home” que tiene mucho más espacio libre asignado y editar el fichero “/etc/apt-cacher/apt-cacher.conf”.


# mkdir /home/apt-cacher chown nobody:nobody /home/apt-cacher chmod 770 /home/apt-cacher


Para estos cambios se necesita lo siguiente:

Descomenta y edita la línea “cache_dir = /var/cache/apt-cacher” y cámbiala por “cache_dir = /home/apt-cacher” para que utilice el directorio que hemos creado previamente.

Opcionalmente (/etc/apt-cacher/apt-cacher.conf):

  • Descomenta y edita la línea “admin_email = root@localhost” y cambia la dirección de correo por otra con más sentido.
  • Descomenta la línea “daemon_addr = localhost” y modifícala para que refleje la IP del servidor (192.168.0.3 en mi caso) de la forma “daemon_addr = 192.168.0.3 ”.
  • Si existen en la red varios tipos de distribuciones (Debian, Ubuntu) es posible separar los paquetes de cada una habilitando la opción “distinct_namespaces”. Descomenta la línea correspondiente y cámbiala a “distinct_namespaces = 1”.
  • Descomenta la línea de “allowed_hosts = *” para que cualquier equipo de la red pueda acceder al servidor. En caso contrario observarás mensajes del tipo “403 access to cache prohibited” o similar cuando traten de instalar/actualizar paquetes los clientes.
  • Descomenta la línea “generate_reports = 1” para que el servidor regenere el informe de uso cada 24 horas. (no es tan necesario, sólo es práctico si instalaste/tienes instalado apache2 y eres fanatico de los reportes, si deseas mantener más limpio tu servidor y que no ocupe tanto espacio puedes omitir el uso de apache2 y funciona más que perfecto)
  • Descomenta la línea “clean_cache = 1” para que el servidor se purge cada 24 horas y elimine las copias de paquetes de versiones no actualizadas y se quede con la última.

Opcionalmente (/etc/services):

Modifica el fichero “/etc/services” para reflejar el uso del puerto “3142” por parte de “apt-cacher”. Añade al final del archivo las líneas:

apt-cacher 3142/tcp
apt-cacher 3142/udp

Para terminar vamos a reconfigurar la forma en que el servidor instala/actualiza sus propios paquetes. Crea y edita el siguiente archivo /etc/apt/apt.conf.d/01proxy y agrega la siguiente línea  (suponiendo que la dirección IP 192.168.0.3 es la del servidor. Cámbiala por la tuya):

Acquire::http::Proxy "http://192.168.8.10:3142";

Reinicia ahora el servicio con

# service apt-cacher restart

Verificación del funcionamiento del servidor

Con un simple

$ netstat -patan |grep 3142

Podrás verificar que el servidor está respondiendo en ese puerto

(Not all processes could be identified, non-owned process info
will not be shown, you would have to be root to see it all.)
tcp 0 0 192.168.8.10:3142 0.0.0.0:* LISTEN -

Actualiza la lista de paquetes disponibles con “apt-get update”.

Actualiza el servidor con “apt-get dist-upgrade”. Reinicia si es necesario.

A continuación puedes verificar que se han hecho copia de las listas y de los archivos a partir del directorio “/home/apt-cacher”.

Configuración de los clientes

En cada uno de los clientes crea y edita el siguiente archivo /etc/apt/apt.conf.d/01proxy y agrega la siguiente línea  (suponiendo que la dirección IP 192.168.0.3 es la del servidor. Cámbiala por la tuya):

Acquire::http::Proxy "http://192.168.8.10:3142";

Si, esto es igual que el servidor y es muy importante que quede igual para que cada cliente haga uso del servidor de cache.

Una vez configurados los clientes SOLO instalarían/actualizarían a través del servidor-proxy. Si éste no estuviera disponible se produciría un error de acceso y no completarían el proceso.

NOTAS



Es posible que haya paquetes almacenados en el servidor de alguna actualización anterior (por ejemplo en “/var/cache/apt/archives” ) y queramos poner disponible para los clientes. Se puede hacer con este comando:

/usr/share/apt-cacher/apt-cacher-import.pl -r /var/cache/apt/archives

Con respecto a los informes de uso, se pueden ver desde “http://direccion_ip_servidor:3142/report” pero como seguro todavía no se generó ninguno puedes forzar que lo cree ejecutando este comando en el servidor:

/usr/share/apt-cacher/apt-cacher-report.pl

Actualizar a la última versión:



En primer lugar debemos parar el servicio si es que tenemos ya una versión anterior instala y funcionando:

service apt-cacher stop

Luego podemos descargar la última versión desde: www.hindley.org.uk/~mark/debian/

Antes de aplicar asegurarse de tener instalados los paquetes de los que depende apt-cacher para procesar listas comprimidas:

libcompress-raw-lzma-perl libcompress-raw-bzip2-perl libcompress-raw-zlib-perl libio-compress-perl libio-compress-lzma-perl

apt-get install libcompress-raw-lzma-perl libcompress-raw-bzip2-perl libcompress-raw-zlib-perl libio-compress-perl libio-compress-lzma-perl

dpkg -i apt-cacher_1.7.13_all.deb

A la pregunta sobre si queremos instalar una nueva versión del fichero de configuración o mantener el anterior respondemos instalar el del paquete.

Editamos el fichero de configuración y descomentamos/modificamos las líneas en función de muestras preferencias:

cache_dir = /data/apt-cacher daemon_addr = 192.168.0.3 distinct_namespaces = 1 allowed_hosts = * supported_archs = i386, amd64 generate_reports = 1 clean_cache = 1

Reiniciamos el servicio apache y apt-cacher. En los clientes no habría que cambiar nada.

service apt-cacher startservice apache2 restart

NOTAS:

Si al actualizar desde un cliente da problemas con algún repositorio podemos indicarle en su fichero «01proxy» que evite al apt-cacher y se conecte directamente añadiendo una línea como:

Acquire::http::proxy::dirección_del_repositorio_problemático "DIRECT";

Ejemplo:

Acquire::http::proxy::repo.waydro.id "DIRECT";
Acquire::http::proxy::dl.winehq.org "DIRECT";

Modificado del original: https://diocesanos.es/blogs/equipotic/2016/11/11/instalacion-y-actualizacion-de-apt-cacher/