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

147

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

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

    
posta Ken Simon 03.09.2010 - 01:34
fonte

6 risposte

126

Ho fatto qualche ricerca su una serie di soluzioni e alcuni sviluppatori di Ubuntu hanno trovato una configurazione proxy (basata su Squid) per la 10.04 e successive. Si chiama squid-deb-proxy . Richiede solo una macchina che funga da server. Le grandi organizzazioni di solito eseguono i propri mirror completi, ma per la maggior parte delle persone il mirroring su richiesta è sufficiente.

Perché squid-deb-proxy?

  • Nessuna modifica dei file sul lato client.
  • Usa zeroconf in modo che i client siano "zero config"
  • Utilizza una soluzione proxy solido esistente invece di scrivere un nuovo strumento.
  • Facile da configurare per un tipico amministratore Linux.

Config server

Sulla macchina che vuoi utilizzare come server, installa 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 ti serve questo se sei su 12.04 +):

 sudo start squid-deb-proxy-avahi

Questo installerà il server proxy (che ascolta per default la porta 8000) e gli strumenti avahi necessari affinché il server si annunci sulla 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 consente di cerca automaticamente il server, fai clic qui:

o tramite riga di comando:

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

Facoltativo : per la massima efficienza devi impostare una macchina in modo che scarichi automaticamente gli aggiornamenti, in modo che quando le altre macchine ne hanno bisogno è già nella cache. Puoi farlo andando su System- & gt; Administration- & gt; Update Manager, quindi fai clic sul pulsante "Impostazioni ...", nella scheda Aggiorna impostalo per scaricare automaticamente tutti gli aggiornamenti.

Memorizzazione nella cache di origini di terze parti

Per impostazione predefinita, la cache è impostata per memorizzare solo i repository ufficiali di Ubuntu. 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 le modifiche a questo file, è necessario eseguire sudo restart squid-deb-proxy affinché le modifiche siano effettive.

Configurazione manuale

Se per qualche motivo non vuoi usare zeroconf (per ragioni di rete o altro), puoi impostare manualmente un client per usare il proxy modificando /etc/apt/apt.conf e aggiungendo la seguente stanza, (sostituisci 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 a questa:

# 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 attraverso il proxy. Qualcosa più o 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 servono solo ad aiutarti. Probabilmente non corrisponderanno al tuo setup uno a uno. (cioè interfaccia errata, indirizzi IP della rete privata errati, ecc.)

Confermando funziona

In primo luogo effettua il log sul server in modo da poterlo vedere: tail -F /var/log/squid-deb-proxy/access.log e 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

Il che significa che i client vedono la cache ma la mancano, il che è previsto dal momento che non ha ancora memorizzato nella cache. Ogni successiva esecuzione dovrebbe apparire come TCP_HIT. Puoi trovare i file della cache dei calamari stessi in /var/cache/squid-deb-proxy .

Usandolo

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

TODO

Dobbiamo ancora abilitare apt per utilizzare semplicemente una cache pubblicizzata nella rete e per impostazione predefinita, in modo da non dover installare il pezzo client. Dobbiamo anche correggere il bug che il deb di 403 non è in l'elenco dei mirror.

    
risposta data Jorge Castro 03.09.2010 - 01:52
fonte
37

apt-cacher-ng è la risposta per me - Non ho incontrato nessun problemi in ambienti piccoli (circa 20 client), quindi suppongo che i problemi Le menzioni @ MagicFab sono state risolte nella versione corrente (installata 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 pacchetto apt-cacher-ng .

I client devono essere configurati configurando 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 tuo 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 esempio un server 10.04 può essere utilizzato dai client 9.10, 10.04 e 11.04 senza eventuali problemi o conflitti).

Se si dispone di laptop (s) client che si spostano tra le reti, diventa un po 'più complesso - Ho creato uno script che imposta il proxy giusto in base all'indirizzo di rete; lo script è eseguibile e in /etc/network/if-up.d/apt-proxy . Dopo aver ricevuto 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
    
risposta data Piskvor 12.02.2011 - 11:45
fonte
6

Una delle soluzioni più semplici è l'installazione di apt-proxy.

Leggi la documentazione di ubuntu qui: link

    
risposta data sandaru1 03.09.2010 - 01:51
fonte
6

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

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 faccio circa una volta alla settimana, e lo uso come base per stabilire uno o più "patchlevel". Ad esempio ...

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

Questo crea una copia collegata dell'albero (utilizza quasi zero spazio su disco) che posso indirizzare a ciascuno dei miei server locali in apt sources.list

    
risposta data delimiter 08.09.2010 - 17:07
fonte
2

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

Ho provato la soluzione basata su calam sopra, ma ha richiesto l'applicazione di diversi workaround e una configurazione più client di quanto mi piacerebbe, quindi non sente ancora come potrebbe sostituire apt-cacher- ng in piccole configurazioni.

    
risposta data MagicFab 29.11.2010 - 03:35
fonte
1

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

Installa squid-deb-proxy sul server, squid-deb-proxy-client sui client. Usa zeroconf Avahi, quindi nessuna configurazione necessaria.

Se stai cercando di mettere in cache più di un semplice debito, non mi preoccuperei di Squid. Apache Traffic Server è la prossima grande cosa. link

    
risposta data caduceus 19.12.2013 - 13:19
fonte

Leggi altre domande sui tag