Il modo migliore per memorizzare nella cache i download di apt su una LAN?


152

Ho più macchine Ubuntu a casa e una connessione Internet piuttosto lenta, e a volte più macchine devono essere aggiornate contemporaneamente (specialmente durante le nuove versioni di Ubuntu.)

C'è un modo in cui solo una delle mie macchine deve scaricare i pacchetti e le altre macchine possono usare la prima macchina per ottenere i deb? Implica la configurazione del mio mirror locale? O un server proxy? O può essere reso più semplice?

Risposte:


129

Ho fatto alcune ricerche su un gruppo di soluzioni e alcuni sviluppatori di Ubuntu hanno escogitato una configurazione proxy (basata su Squid) per la versione 10.04 e successive. Si chiama squid-deb-proxy. Richiede solo una macchina che funga da server. Le grandi organizzazioni di solito gestiscono i propri mirror completi, ma per la maggior parte delle persone è sufficiente il mirroring on demand.

Perché squid-deb-proxy?

  • Nessuna modifica di file sul lato client.
  • Utilizzare zeroconf in modo che i client fossero "zero config"
  • Utilizzare una soluzione proxy solida esistente anziché scrivere un nuovo strumento.
  • Facile da configurare per un tipico amministratore Linux.

Server Config

Sul computer che si desidera fungere da server installare lo strumento con:

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

Ora avvia i bit di servizio:

 sudo start squid-deb-proxy

E i bit avahi (non è necessario se sei su 12.04+):

 sudo start squid-deb-proxy-avahi

Ciò installerà il server proxy (che ascolta la porta 8000 per impostazione predefinita) e gli strumenti avahi necessari per consentire al server di pubblicizzarsi sulla propria rete tramite zeroconf.

Configurazione client

Su ciascuno dei computer che si desidera utilizzare la cache (i client e il server stesso in modo che possa utilizzare anche la cache), è necessario installare lo strumento lato client che cerchiamo di cercare automaticamente il server, fare clic qui :

Installa tramite il centro software

o tramite riga di comando:

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

Facoltativo : per la massima efficienza, è necessario impostare un computer per il download automatico degli aggiornamenti, in modo che quando gli altri computer ne hanno bisogno sia già nella cache. Puoi farlo andando su Sistema-> Amministrazione-> Gestione aggiornamenti, quindi fai clic sul pulsante "Impostazioni ...", nella scheda Aggiornamento impostalo per scaricare automaticamente tutti gli aggiornamenti.

testo alternativo

Memorizzazione nella cache di fonti di terze parti

Per impostazione predefinita, la cache è impostata per memorizzare nella cache solo i repository Ubuntu ufficiali. Per aggiungere altro è necessario aggiungerli all'elenco delle fonti in /etc/squid-deb-proxy/mirror-dstdomain.acl. Qui puoi aggiungere ppa.launchpad.net o altri servizi che potresti utilizzare. Dopo aver apportato modifiche a questo file, è necessario eseguire sudo restart squid-deb-proxyper rendere effettive le modifiche.

Configurazione manuale

Se per qualche motivo non si desidera utilizzare zeroconf (per motivi di rete o altro), è possibile impostare manualmente un client per utilizzare il proxy modificando /etc/apt/apt.confe aggiungendo la seguente stanza (sostituire 0.0.0.0 con l'indirizzo IP del server ):

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

Firewall

Nel caso in cui si utilizzi un firewall, avahi utilizza 5353 sugli indirizzi 224.0.0.0/4 e richiede una regola simile alla seguente:

# 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

Successivamente, è necessario aprire la porta TCP 8000 per la comunicazione effettiva tramite il proxy. Qualcosa di più o di meno come questo:

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

Queste regole sono solo per aiutarti. Probabilmente non corrisponderanno al tuo setup uno a uno. (es. interfaccia errata, indirizzi IP di rete privata errati, ecc.)

Confermando che funziona

Prima di tutto accodare il registro sul server in modo da poterlo guardare: tail -F /var/log/squid-deb-proxy/access.loge quindi eseguire un aggiornamento su qualsiasi macchina su cui è installato il client; il registro dovrebbe iniziare a scorrere con voci come questa:

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

Ciò significa che i client vedono la cache ma la mancano, il che è previsto poiché non ha ancora memorizzato nella cache nulla. Ogni esecuzione successiva deve essere visualizzata come TCP_HIT. Puoi trovare gli stessi file di cache di calamari in /var/cache/squid-deb-proxy.

Usandolo

Da quel momento in poi tutte le macchine della tua rete controlleranno la cache prima di colpire la rete esterna per recuperare i pacchetti. Se sono disponibili nuovi pacchetti, il primo computer lo scaricherà dalla rete, dopo che le richieste successive per quel pacchetto verranno dal server ai client.

FARE

Dobbiamo ancora abilitare apt per usare immediatamente una cache pubblicizzata sulla rete e per impostazione predefinita, quindi non è necessario installare il pezzo client. Dobbiamo anche correggere il bug che il deb di 403 non è nella lista dei mirror.


2014/01/21 14: 56: 31 | ERRORE: / var / cache / squid-deb-proxy / 03: (2) Nessun file o directory FATAL: impossibile verificare una delle directory di scambio, controllare cache.log per i dettagli. Esegui 'squid -z' per creare directory di scambio, se necessario, o se esegui Squid per la prima volta. Squid Cache (Versione 3.3.8): terminato in modo anomalo.
thumper

1
Devi anche installare calamari.
thumper

Sembra che la configurazione manuale non sia più valida. Non ci sono apt.conffile sotto /etc/apt. Tuttavia, esiste una pletora di file con impostazioni in /etc/apt/apt.conf.d. Immagino che ora dovremmo creare un file lì?
Alexis Wilke,

Inoltre, sembra che TODO sia stato risolto. Cioè, non ho dovuto fare nulla e la cache è stata utilizzata per prima. Sebbene il bug non sembri ancora contrassegnato come riparato.
Alexis Wilke,

Certo, se apt.conf.d è come è fatto ora, per favore invia una modifica a questa risposta, evviva!
Jorge Castro,

37

apt-cacher-ngè la risposta per me - non ho riscontrato alcun problema in ambienti di piccole dimensioni (circa 20 client), quindi suppongo che i problemi menzionati da @MagicFab siano stati risolti nella versione corrente (installato su Ubuntu 10.04 e 10.10). Non è necessaria alcuna configurazione per il server e devi solo istruire i tuoi clienti a utilizzare il server come proxy del gestore pacchetti.

Il server è completamente installato e configurato installando il apt-cacher-ngpacchetto.

I client devono essere configurati impostando il proxy APT - aggiungendo il file /etc/apt/apt.conf.d/01proxy, contenente questo (dove "your-apt-server" è il nome o l'indirizzo IP del server):

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

Fatto : ora i pacchetti verranno memorizzati nella cache dal server, indipendentemente dalle fonti utilizzate o dalla versione del sistema in uso (ad es. Un server 10.04 può essere utilizzato dai client 9.10,10.04 e 11.04 senza problemi o conflitti).


Se si dispone di laptop client che si spostano tra le reti, diventa un po 'più complesso: ho creato uno script che imposta il proxy corretto in base all'indirizzo di rete; lo script è eseguibile e in /etc/network/if-up.d/apt-proxy. Alla ricezione di un indirizzo IPv4 da un server DHCP, lo script imposterà il server apt-cacher giusto per la rispettiva rete:

#!/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

apt-cacher-ng supporta anche IPv6 (ricordo che alcune delle altre soluzioni no).
Azendale,

11
Un anno dopo, sono passato a squid-deb-proxye squid-deb-proxy-client: zeroconf significa in effetti zero configurazione sui client, il che è estremamente utile per gli utenti nomadi - e nel caso in cui un server non risponda, il client passa automaticamente al download diretto.
Piskvor,

apt-cacher-ng fa schifo, è molto difettoso, si blocca sul download di pacchetti. per esempio l'ho visto scaricato 150 MB solo per un pacchetto da 30 MB
pylover

apt-cacher-ng funziona perfettamente. Hai qualcosa di molto sbagliato nel TUO sistema. Su Preciso squid-deb-proxy vuole installare Squid. Insiste su questo.
Ken Sharp,

Questa è la soluzione migliore per far funzionare una cache pbuilder. Questo ha funzionato fuori dalla scatola. Inoltre sembra che ci sia supporto per zeroconf(nel 2016), ma non sono riuscito (ancora) a farlo funzionare da parte mia.
Alexis Wilke,


6

Preferisco di gran lunga impostare un mirror locale usando l' debmirrorutilità.

Ecco un esempio di incantesimo.

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

Lo eseguo circa una volta alla settimana e lo utilizzo come base per stabilire uno o più "patchlevels". Per esempio...

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

Questo crea una copia collegata dell'albero (usa quasi zero spazio su disco) su cui posso puntare ciascuno dei miei server locali in apt sources.list


5
Dovresti dare un'occhiata a ubumirror, è un pacchetto di convenienza nell'archivio che ha già tutto ciò che è stato impostato per te. È quello che usano i mirror ufficiali.
Jorge Castro,

2

In piccole reti (come casa / piccolo ufficio), ho usato apt-cacher-ng con buoni risultati. Non ho controllato le ultime versioni, ma so che necessita di un'attenta configurazione sia del server che dei client, ed è più adatto per i client che riceveranno solo aggiornamenti dalla rete locale.

Ho provato la soluzione basata su calamari di cui sopra, ma ha richiesto l'applicazione di diverse soluzioni alternative e di una configurazione client maggiore di quella che vorrei, quindi non sembra ancora che possa sostituire apt-cacher-ng in piccole configurazioni.


1

apt-cacher non è stato il più facile da configurare e non sopravviverà a un aggiornamento dist.

Installa squid-deb-proxysul server, squid-deb-proxy-clientsui client. Utilizza zeroconf Avahi, quindi non è necessaria alcuna configurazione.

Se stai cercando di memorizzare nella cache più di semplici detriti, non mi preoccuperei di Squid. Apache Traffic Server è la prossima grande novità. http://trafficserver.readthedocs.org


squid-deb-proxy insiste sull'installazione di squid. E apt-cacher è morto da tempo, apt-cacher-ng è dove si trova.
Ken Sharp,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.