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

147

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

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

    
pregunta Ken Simon 03.09.2010 - 01:34

6 respuestas

126

Investigué un montón de soluciones y algunos desarrolladores de Ubuntu obtuvieron 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 a pedido es suficiente.

¿Por qué squid-deb-proxy?

  • Sin edición de archivos en el lado del cliente.
  • Use zeroconf para que los clientes tengan "zero config"
  • Utilice una solución de 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 en la que desea actuar como servidor, instale la herramienta con:

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

Ahora inicie los bits del servicio:

 sudo start squid-deb-proxy

Y los avahi bits (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.

Client Config

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

o por 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 la memoria caché. Para ello, vaya a System- & gt; Administration- & gt; Update Manager, luego haga clic en el botón "Configuración ...", en la pestaña Actualizar configúrelo para descargar automáticamente todas las actualizaciones.

Almacenamiento en caché de fuentes de terceros

De manera predeterminada, la caché está configurada solo para almacenar 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 ejecutar sudo restart squid-deb-proxy para que los cambios sean efectivos.

Configuración manual

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

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

Firewall

En caso de que esté usando un firewall, avahi usa 5353 en las direcciones 224.0.0.0/4 y requiere una regla que se vea así:

# 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 de uno a uno. (es decir, una interfaz incorrecta, direcciones IP de red privada incorrectas, etc.)

Confirmando que funciona

Primero alinee el inicio de sesión en el servidor para que pueda verlo: tail -F /var/log/squid-deb-proxy/access.log y luego ejecute una actualización en cualquier máquina que tenga el cliente instalado; 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 la memoria caché pero la están perdiendo, lo cual se espera porque todavía no ha almacenado nada en la memoria caché. Cada ejecución posterior debe aparecer como TCP_HIT. Puede encontrar los archivos de caché de calamar en /var/cache/squid-deb-proxy .

Utilizándolo

A partir de ese momento, todas las máquinas de su red verificarán la memoria caché antes de acceder a la red externa para buscar paquetes. Si hay paquetes nuevos disponibles, la primera máquina lo descargará de la red, luego de que las solicitudes subsiguientes para ese paquete salgan del servidor a los clientes.

TODO

Todavía tenemos que habilitar apt para usar simplemente un caché anunciado en la red y, de forma predeterminada, para que no tenga que instalar la pieza del cliente. También tenemos que corregir el error en que no está el deb de 403 la lista de espejos.

    
respondido por el Jorge Castro 03.09.2010 - 01:52
37

apt-cacher-ng es la respuesta para mí. No he encontrado ninguna problemas en entornos pequeños (aproximadamente 20 clientes), así que supongo que los problemas @ MagicFab menciones fueron resueltas en la versión actual (instalado en Ubuntu 10.04 y 10.10). No hay configuración necesaria para el servidor, y solo necesita instruir a sus clientes para usar el servidor como proxy del administrador de paquetes.

El servidor está completamente instalado y se configuró instalando el paquete apt-cacher-ng .

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

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

Hecho : ahora el servidor almacena en caché los paquetes, independientemente de las fuentes que utilice o la versión de sistema que tenga (por ejemplo, un servidor 10.04 puede ser utilizado por los clientes 9.10, 10..04 y 11.04 sin cualquier problema o conflicto).

Si tiene computadoras portátiles cliente que recorren las redes, se vuelve un poco más complejo: hice 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, la secuencia de comandos configurará 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
    
respondido por el Piskvor 12.02.2011 - 11:45
6

Una de las soluciones más sencillas es configurar apt-proxy.

Lea la documentación de ubuntu aquí: enlace

    
respondido por el sandaru1 03.09.2010 - 01:51
6

Prefiero configurar un espejo local usando la utilidad debmirror .

Aquí hay un encantamiento de ejemplo.

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 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 dirigir cada uno de mis servidores locales en apt sources.list

    
respondido por el delimiter 08.09.2010 - 17:07
2

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

Probé la solución anterior basada en squid, pero requirió aplicar varias soluciones y más configuración de cliente de lo que me gustaría, por lo que no se siente todavía como que podría reemplazar a apt-cacher- ng en configuraciones pequeñas.

    
respondido por el MagicFab 29.11.2010 - 03:35
1

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

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

Si está buscando almacenar en caché algo más que debug, no me molestaría con Squid. Apache Traffic Server es la próxima gran cosa. enlace

    
respondido por el caduceus 19.12.2013 - 13:19

Lea otras preguntas en las etiquetas