Un servicio de caché de paquetes Debian y similares.
Y es que no he podido resistirme y lo he puesto en marcha en literalmente dos patadas.
Primero he definido en el DNS una entrada para la máquina mirror.home, luego he instalado el paquete approx que ya he usado durante años en mi lugar de trabajo y la guinda la he puesto con un servidor virtual en Apache para que los URL de los servicios sean
deb http://mirror.home/debian buster main contrib non-free deb http://mirror.home/security buster/updates main contrib non-free deb http://mirror.home/debian/ buster-updates main contrib non-free
Respecto a approx el único cambio significativo ha sido hacer que escuche en el interfaz local conservando el puerto. En Debian 10 esto se define en systemd con un socket que el paquete incluye. Se copia el archivo /lib/systemd/system/approx.socket en /etc/systemd/system (porque tiene preferencia y no hay que andarse con cosas raras) y se altera de esta forma
[Unit] Description=caching proxy server for Debian archive files Documentation=man:approx(8) [Socket] ListenStream=127.0.0.1:9999 Accept=yes [Install] WantedBy=sockets.target
Luego viene la parte de apache que se encarga de simplificar la URL y limita la forma de acceso al repositorio. En el archivo /etc/apache2/sites-available/mirror.home.conf se incluye:
<VirtualHost *:80>
ServerName mirror.home
ServerAdmin root@home
ProxyPreserveHost On
ProxyPass "/" "http://127.0.0.1:9999/"
ProxyPassReverse "/" "http://127.0.0.1:9999/"
LogLevel info
ErrorLog /var/log/apache2/mirror.home/error.log
CustomLog /var/log/apache2/mirror.home/access.log combined
</VirtualHost>
Y ya está. Basta con indicar (por ejemplo en la instalación) que el repositorio está en http://mirror.home/debian y se reutilizan todos los archivos que se han descargado previamente para el resto de la red. Puede hacerse perfectamente para las Raspberry Pi porque la estructura es la misma:
deb http://mirror.home/raspbian/ buster main contrib non-free rpi
En la parte del proxy, eso sí, tendremos que definir los repositorios de la siguiente manera:
debian http://deb.debian.org/debian security http://security.debian.org/debian-security raspbian http://raspbian.raspberrypi.org/raspbian raspi-archive http://archive.raspberrypi.org/debian postgresql http://apt.postgresql.org/pub/repos/apt
¿ Y los repositorios con conexión https ? Pues se pueden emplear trampeando su acceso si, como es mi caso, no tengo un certificado digital para conexiones en mi red local (.home) indicando que el repositorio tiene acceso local como http y desde el proxy con acceso https.
Por ejemplo mi repositorio privado (uno de ellos) de paquetes tiene la siguiente línea en su archivo .list correspondiente:
deb https://debian.astillas.net debian main deb-src https://debian.astillas.net debian main
Si lo definimos en approx como
astillas https://debian.astillas.net/
Podemos cambiar el archivo .list de la siguiente forma:
deb http://mirror.home/astillas debian main deb-src http://mirror.home/astillas debian main