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


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 debiti? Implica la creazione del mio mirror locale? O un server proxy? O può essere reso più semplice?


147
2017-09-02 23:34


origine




risposte:


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. È chiamato 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 è sufficiente il mirroring on demand.

Perché squid-deb-proxy?

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

Config server

Sulla macchina che si desidera agire come 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 ti serve questo se sei il 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

Sopra 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 cercare automaticamente il server, fare in modo che facciano clic qui:

Install via the software center

o tramite riga di comando:

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

Opzionale: Per la massima efficienza, è necessario impostare una macchina per scaricare automaticamente gli aggiornamenti, in modo che quando le altre macchine ne hanno bisogno, è già nella cache. È possibile farlo andando su Sistema-> Amministrazione-> Gestore aggiornamenti, quindi fare clic sul pulsante "Impostazioni ...", nella scheda Aggiorna impostarlo per scaricare automaticamente tutti gli aggiornamenti.

alt text

Memorizzazione nella cache di terze parti

Di default 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 in modo che le modifiche siano efficaci.

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.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 sbagliati, ecc.)

Confermando funziona

Per prima cosa fai 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 /var/cache/squid-deb-proxy.

Usandolo

Da quel momento in poi tutte le macchine sulla 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.

FARE

Dobbiamo ancora abilitare apt per utilizzare semplicemente una cache pubblicizzata sulla rete e per impostazione predefinita, in modo da non dover installare il pezzo client. Dobbiamo anche risolvere il problema il bug quello di 403 non è nella lista dei mirror.


126
2017-09-02 23:52



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 swap, controllare cache.log per i dettagli. Esegui 'squid -z' per creare directory di swap se necessario, o se stai usando Squid per la prima volta. Squid Cache (versione 3.3.8): terminato in modo anomalo. - thumper
Devi anche installare calamaro. - thumper
Sembra il Configurazione manuale non è più valido Non c'è apt.conf file sotto /etc/apt. Tuttavia, vi è una pletora di file con le impostazioni sotto /etc/apt/apt.conf.d. Immagino che dovremmo ora creare un file lì invece? - Alexis Wilke
Inoltre, sembra che il TODO sia stato risolto. Cioè, non ho dovuto fare nulla e la cache è stata usata prima. Anche se il bug non sembra che sia stato ancora contrassegnato come fisso. - Alexis Wilke
Certo, se apt.conf.d è come è ora, per favore invia una modifica a questa risposta, evviva! - Jorge Castro


apt-cacher-ng è la risposta per me - non ho riscontrato problemi in ambienti piccoli (circa 20 clienti), quindi suppongo che i problemi @MagicFab le menzioni sono state risolte nella versione attuale (installata su Ubuntu 10.04 e 10.10). Non è necessaria alcuna configurazione per il server e devi solo istruire i tuoi client a utilizzare il server come proxy del gestore pacchetti.

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

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 origini o dalla versione di sistema in uso (ad esempio 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 (s) client che si spostano tra le reti, diventa un po 'più complesso - Ho fatto uno script che imposta il proxy giusto a seconda dell'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

37
2018-02-12 10:45



apt-cacher-ng supporta anche IPv6 (ricordo che alcune delle altre soluzioni no). - Azendale
Un anno dopo, sono andato oltre squid-deb-proxy e squid-deb-proxy-client: zeroconf significa infatti zero configurazione sui client, che è estremamente utile per gli utenti nomadici e, nel caso in cui un server non risponda, il client imposta automaticamente il download diretto. - Piskvor
apt-cacher-ng fa schifo, è verry buggy, si blocca a scaricare i 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 di esso - Ken Sharp
Questa è la soluzione migliore per far funzionare una cache pbuilder. Questo ha funzionato fuori dagli schemi. Inoltre sembra che ci sia il supporto per zeroconf (nel 2016), ma non potevo (ancora) farlo funzionare alla mia fine. - Alexis Wilke


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

Leggi la documentazione di ubuntu qui: https://help.ubuntu.com/community/AptProxy


6
2017-09-02 23:51





Preferisco di gran lunga impostare uno specchio locale usando il debmirror utilità.

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". Per 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 puntare a ciascuno dei miei server locali in apt sources.list


6
2017-09-08 15:07



Dovresti controllare ubumirror, è un pacchetto di convenienza nell'archivio che ha tutto ciò che hai già impostato per te. È quello che usano gli specchi ufficiali. - Jorge Castro


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 aggiornamenti dalla rete locale.

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


2
2017-11-29 02:35





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

Installare squid-deb-proxy sul server, squid-deb-proxy-client sui clienti. 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. http://trafficserver.readthedocs.org


1
2017-12-19 12:19



squid-deb-proxy insiste sull'installazione di squid. E apt-cacher è morto da tempo, apt-cacher-ng è dove si trova. - Ken Sharp