¿La mejor manera de almacenar en caché descargas aptas en una LAN?

152

Tengo varias máquinas Ubuntu en casa y una conexión a Internet bastante lenta, y a veces es necesario actualizar varias máquinas a la vez (especialmente durante las nuevas versiones de Ubuntu).

¿Hay alguna forma en que solo una de mis máquinas necesite descargar los paquetes, y las otras máquinas puedan usar la primera máquina para obtener los debs? ¿Implica configurar mi propio espejo local? O un servidor proxy? ¿O puede hacerse más simple?

Ken Simon
fuente

Respuestas:

129

Investigué un montón de soluciones y algunos desarrolladores de Ubuntu idearon una configuración proxy (basada en Squid) para 10.04 y posteriores. Se llama squid-deb-proxy. Solo requiere una máquina para actuar como servidor. Las grandes organizaciones suelen ejecutar sus propios espejos completos, pero para la mayoría de las personas el reflejo bajo demanda es suficiente.

¿Por qué squid-deb-proxy?

  • Sin edición de archivos en el lado del cliente.
  • Utilice zeroconf para que los clientes fueran "zero config"
  • Use una solución proxy sólida existente en lugar de escribir una nueva herramienta.
  • Fácil de configurar para un administrador típico de Linux.

Configuración del servidor

En la máquina que desea que actúe como servidor, instale la herramienta con:

sudo apt-get install squid-deb-proxy avahi-utils

Ahora inicie los bits de servicio:

 sudo start squid-deb-proxy

Y los bits de avahi (no necesitas esto si estás en 12.04+):

 sudo start squid-deb-proxy-avahi

Esto instalará el servidor proxy (que escucha el puerto 8000 por defecto) y las herramientas avahi necesarias para que el servidor se anuncie en su red a través de zeroconf.

Configuración de cliente

En cada una de las computadoras que desea usar el caché (los clientes y el servidor en sí mismo para que también pueda usar el caché), debe instalar la herramienta del lado del cliente que permite buscar el servidor automáticamente, haga clic aquí :

Instalar a través del centro de software

o a través de la línea de comando:

sudo apt-get install squid-deb-proxy-client

Opcional : para obtener la máxima eficacia, debe configurar una máquina para que descargue actualizaciones automáticamente, de modo que cuando sus otras máquinas lo necesiten, ya esté en el caché. Puede hacerlo yendo a Sistema-> Administración-> Administrador de actualizaciones, luego haga clic en el botón "Configuración ...", en la pestaña Actualizar configúrelo para descargar automáticamente todas las actualizaciones.

texto alternativo

Almacenamiento en caché de fuentes de terceros

Por defecto, el caché está configurado para almacenar solo en caché los repositorios oficiales de Ubuntu. Para agregar más, debe agregarlos a la lista de fuentes en /etc/squid-deb-proxy/mirror-dstdomain.acl. Aquí es donde puede agregar ppa.launchpad.net u otros servicios que pueda usar. Después de realizar cambios en este archivo, debe ejecutarlo sudo restart squid-deb-proxypara que los cambios sean efectivos.

Configuración manual

Si por alguna razón no desea usar zeroconf (por razones de red o lo que sea), puede configurar manualmente un cliente para que use el proxy editando /etc/apt/apt.confy agregando la siguiente estrofa (reemplace 0.0.0.0 con la dirección IP del servidor ):

 Acquire { 
   Retries "0"; 
   HTTP { Proxy "http://0.0.0.0:8000"; };
 };

Cortafuegos

En caso de que esté usando un firewall, Avahi usa 5353 sobre las direcciones 224.0.0.0/4 y requiere una regla similar a esta:

# Specifically port 5353 which avahi uses
-A INPUT -i eth2 -d 224.0.0.0/4 --dport 5353 -j ACCEPT

# OR

# Wide open so all local broadcasting works
-A INPUT -i eth2 -d 224.0.0.0/4 -j ACCEPT

A continuación, debe abrir el puerto TCP 8000 para la comunicación real a través del proxy. Algo más o menos así:

-A INPUT -i eth2 -p tcp -m tcp --dport 8000 -d 192.168.0.1 -s 192.168.0.0/24 --syn -j ACCEPT

Estas reglas son solo para ayudarte. Probablemente no coincidan con su configuración uno a uno. (es decir, interfaz incorrecta, direcciones IP de red privada incorrecta, etc.)

Confirmando que funciona

Primero siga el registro en el servidor para que pueda verlo: tail -F /var/log/squid-deb-proxy/access.logy luego ejecute una actualización en cualquier máquina que tenga instalado el cliente; el registro debería comenzar a desplazarse con entradas como esta:

1307310795.647     32 192.168.1.106 TCP_MISS/302 768 GET http://us.archive.ubuntu.com/ubuntu/dists/natty-proposed/universe/i18n/Translation-en.xz - DIRECT/141.210.26.10 text/html
1307310795.683     34 192.168.1.106 TCP_MISS/302 752 GET http://us.archive.ubuntu.com/ubuntu/dists/natty/main/i18n/Translation-en_US.lzma - DIRECT/141.210.26.10 text/html
1307310795.716     32 192.168.1.106 TCP_MISS/302 746 GET http://us.archive.ubuntu.com/ubuntu/dists/natty/main/i18n/Translation-en.lzma - DIRECT/141.210.26.10 text/html
1307310795.750     32 192.168.1.106 TCP_MISS/302 764 GET http://us.archive.ubuntu.com/ubuntu/dists/natty/multiverse/i18n/Translation-en_US.lzma - DIRECT/141.210.26.10 text/html
1307310795.784     32 192.168.1.106 TCP_MISS/302 758 GET http://us.archive.ubuntu.com/ubuntu/dists/natty/multiverse/i18n/Translation-en.lzma - DIRECT/141.210.26.10 text/html
1307310795.817     32 192.168.1.106 TCP_MISS/404 657 GET http://us.archive.ubuntu.com/dists/natty-proposed/multiverse/i18n/Translation-en_US.xz - DIRECT/141.210.26.10 text/html

Lo que significa que los clientes ven el caché pero lo faltan, lo cual se espera ya que aún no ha almacenado nada en caché. Cada ejecución posterior debe aparecer como TCP_HIT. Puede encontrar los archivos de caché de calamar en sí mismos /var/cache/squid-deb-proxy.

Usándolo

A partir de ese momento, todas las máquinas de su red comprobarán el caché antes de acceder a la red externa para buscar paquetes. Si hay nuevos paquetes disponibles, la primera máquina lo descargará de la red, después de eso, las solicitudes posteriores de ese paquete vendrán del servidor a los clientes.

QUE HACER

Todavía tenemos que habilitar apt para usar solo un caché anunciado en la red de forma predeterminada y de forma predeterminada, por lo que no necesita instalar la pieza del cliente. También tenemos que corregir el error de que las deb.

Jorge Castro
fuente
2014/01/21 14: 56: 31 | ERROR: / var / cache / squid-deb-proxy / 03: (2) No existe tal archivo o directorio FATAL: no se pudo verificar uno de los directorios de intercambio, consulte cache.log para obtener más información. Ejecute 'squid -z' para crear directorios de intercambio si es necesario, o si ejecuta Squid por primera vez. Caché de calamar (Versión 3.3.8): Terminado anormalmente.
golpeador
1
También debes instalar el calamar.
golpeador
Parece que la configuración manual ya no es válida. No hay apt.confarchivo debajo /etc/apt. Sin embargo, hay una gran cantidad de archivos con configuraciones debajo /etc/apt/apt.conf.d. Me imagino que ahora deberíamos crear un archivo allí.
Alexis Wilke
Además, parece que TODO ha sido resuelto. Es decir, no tuve que hacer nada y el caché se usó primero. Aunque el error no parece estar marcado como solucionado todavía.
Alexis Wilke
Claro, si apt.conf.d es como se hace ahora, envíe una edición a esta respuesta, ¡salud!
Jorge Castro
37

apt-cacher-nges la respuesta para mí: no he encontrado ningún problema en entornos pequeños (aproximadamente 20 clientes), así que supongo que los problemas que menciona @MagicFab se resolvieron en la versión actual (instalada en Ubuntu 10.04 y 10.10). No hay configuración necesaria para el servidor, y solo necesita indicar a sus clientes que usen el servidor como su proxy de administrador de paquetes.

El servidor está completamente instalado y configurado al instalar el apt-cacher-ngpaquete.

Los clientes deben configurarse configurando el proxy APT, agregando el archivo que /etc/apt/apt.conf.d/01proxycontiene esto (donde "your-apt-server" es el nombre o la dirección IP de su servidor):

Acquire::http { Proxy "http://your-apt-server:3142"; };

Listo : ahora los paquetes serán almacenados en caché por el servidor, sin importar qué fuentes use o qué versión de sistema tenga (por ejemplo, un servidor 10.04 puede ser usado por clientes 9.10,10.04 y 11.04 sin ningún problema o conflicto).


Si tiene una (s) computadora (s) portátil (s) cliente (s) que deambulan entre redes, se vuelve un poco más compleja: he creado un script que establece el proxy correcto según la dirección de red; el script es ejecutable y en /etc/network/if-up.d/apt-proxy. Al recibir una dirección IPv4 de un servidor DHCP, el script establecerá el servidor apt-cacher adecuado para la red respectiva:

#!/bin/sh

set -e
# Don't bother when lo is configured.
if [ "$IFACE" = lo ]; then
    exit 0
fi
# Only run from ifup.
if [ "$MODE" != start ]; then
    exit 0
fi
# currently only cares about IPv4
if [ "$ADDRFAM" != inet ] && [ "$ADDRFAM" != NetworkManager ]; then
    exit 0
fi
# only run for DHCP-assigned addresses
if [ "$DHCP4_IP_ADDRESS" = "" ]; then
    exit 0
fi

# we're matching on network *broadcast* address,
#  not the specific IP address we were assigned
case "$DHCP4_BROADCAST_ADDRESS" in
    10.3.141.255)
        PROXY='Acquire::http::Proxy "http://my-home-server:3142";';
        ;;
    192.168.154.255)
        PROXY='Acquire::http::Proxy "http://work-server.foo.bar.example.com:3142";';
        ;;
    # add as needed
    *)
        # unknown, no proxying
        PROXY=""
        ;;
esac

# set the proxy
FNAME="/etc/apt/apt.conf.d/01proxy"
echo -n "$PROXY">$FNAME

exit 0
Piskvor
fuente
apt-cacher-ng también es compatible con IPv6 (recuerdo que algunas de las otras soluciones no lo hicieron).
Azendale
11
Un año más tarde, me fui a squid-deb-proxyy squid-deb-proxy-client: zeroconf en realidad significa cero configuración en los clientes, lo cual es extremadamente útil para los usuarios nómadas, y en caso de que un servidor no responda, el cliente se predetermina a la descarga directa.
Piskvor
apt-cacher-ng apesta, es muy buggy, se cuelga en la descarga de paquetes. por ejemplo, lo vi descargado 150 MB solo por un paquete de 30 MB
pylover
apt-cacher-ng funciona perfectamente. Tienes algo muy mal con TU sistema. En Precise squid-deb-proxy quiere instalar Squid. Insiste en ello.
Ken Sharp
Ahora esa es la mejor solución para que funcione un caché pbuilder. Esto funcionó de la caja. También parece que hay soporte para zeroconf(en 2016), pero no pude (todavía) hacer que eso funcione de mi parte.
Alexis Wilke
6

Prefiero configurar un espejo local utilizando la debmirrorutilidad.

Aquí hay un ejemplo de encantamiento.

debmirror --progress --verbose --nosource --method=ftp --passive \
 --host=ftp.osuosl.org --root=pub/ubuntu \
 --dist=lucid,lucid-updates,lucid-security,lucid-backports \
 --section=main,restricted,universe,multiverse --arch=amd64 \
 /d2/ftp/mirror/ubuntu-lucid

Ejecuto esto aproximadamente una vez por semana, y lo uso como base para establecer uno o más "niveles de parche". Por ejemplo...

 cd /d2/ftp/mirror/
 cp -al ubuntu-lucid ubuntu-lucid-20100908

Esto crea una copia vinculada del árbol (usa casi cero espacio en disco) a la que puedo apuntar cada uno de mis servidores locales en apt sources.list

delimitador
fuente
55
Debe consultar ubumirror, es un paquete de conveniencia en el archivo que tiene todo lo que ya está configurado para usted. Es lo que usan los espejos oficiales.
Jorge Castro
2

En redes pequeñas (como el hogar / pequeña oficina), he usado apt-cacher-ng con buenos resultados. No he comprobado las últimas versiones, pero sé que necesita una configuración cuidadosa tanto del servidor como de los clientes, y es más adecuado para clientes que solo recibirán actualizaciones de su red local.

Probé la solución a base de calamar anterior pero requería la aplicación de varios solución alternativa y más de configuración del cliente de lo que me gusta, por lo que no se siente todavía como que podría sustituir a apt-cacher-ng en pequeñas configuraciones.

MagicFab
fuente
1

apt-cacher no fue el más fácil de configurar y no sobrevivirá a una actualización de dist.

Instalar squid-deb-proxyen el servidor, squid-deb-proxy-clienten los clientes. Utiliza zeroconf Avahi, por lo que no es necesaria ninguna configuración.

Si está buscando almacenar en caché más que solo debs, no me molestaría con Squid. Apache Traffic Server es la próxima gran cosa. http://trafficserver.readthedocs.org

caduceo
fuente
squid-deb-proxy insiste en instalar squid. Y apt-cacher está muerto hace mucho tiempo, apt-cacher-ng es donde está.
Ken Sharp