mirror.home

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