Approx: Risparmiare banda con i proxy apt

linux

Debian e le distribuzioni da lei derivate, utilizzano l’accoppiata apt-get e dpkg per installare e mantenere aggiornati i programmi. Mentre dpkg si preoccupa di lavorare esclusivamente in locale, scompattanto i pacchetti ed assicurandosi che la loro installazione sia portata a buon fine, è apt-get il vero cavallo da lavoro: si preoccupa di mantenere aggiornati gli indici per il reperimento dei pacchetti, calcola e risolve le dipendenze al momento dell’installazione di un nuovo programma e si preoccupa di scaricare il deb dai repository remoti.
Quest’ultima azione, il download, può incidere notevolmente sulle performance della rete, specialmente se si è scelto di installare diversi pacchetti (si pensi agli effetti di un apt-get install ubuntu-desktop sopra un Ubuntu base system) e se questa operazione viene effettuata da più di un computer della stessa rete.

Una prima soluzione potrebbe essere quella di tenere un repository locale e scaricare i pacchetti necessari da quel repository, sfortunamente questa soluzione richiede un notevole consumo di spazio ed ogni giorno è necessario scaricare gli aggiornamenti al repository anche se alcuni o tutti dei programmi scaricati non sono necessari.
Per ovviare a questi effetti entrano in gioco i proxy apt: risolvono il problema di consumo di banda tenendo nella cache locale i pacchetti richiesti e sono meglio della presenza di un repository personale in quanto non si devono sprecare spazio e banda per avere tutti i pacchetti salvati nella cache in ogni momento.
La soluzione più semplice per installare un proxy apt è quella di eleggere, se già presente, il proxy della rete a fare anche da proxy per i deb scaricati: da un lato si ha un immediato vantaggio di configurazione, con poche righe uno squid è in grado di tenere in cache pure i pacchetti dei programmi, dall’altro si hanno delle limitazioni sulla flessibilità di configurazione e sui protocolli supportati per il download dai repository.
Per superare anche queste limitazioni è sufficiente utilizzare un programma dedicato al caching dei deb, quello storico è apt-proxy seguito, in ordine cronologico, da approx, apt-cacher e apt-cacher-ng. In questo articolo parleremo dell’utilizzo di approx perchè è il più vecchio proxy apt funzionante, in quanto il povero apt-proxy mostra i segni dell’età non risultando affatto scalabile su larga scala.
Il comportamento dei proxy apt è molto semplice: vengono configurati per fornire la cache di alcuni repository, quando un client li contatta e richiede un pacchetto, i proxy controllano la presenza del pacchetto nella loro cache, se questo manca verrà scaricato dal repository e passato al client altrimenti verrà servita la copia locale, risultando così estremamente veloce e risparmiando un download extra inutile. L’installazione di approx è immediata:

root@proxy:~# apt-get install approx

una volta finito il processo, si deve editare il file /etc/default/approx solamente nel caso sia necessario fornire al nostro proxy apt… un proxy per uscire! Per esempio:

# Default settings for approx, included by the /etc/init.d/approx shell script
 
# Uncomment and edit this definition to have approx use a proxy server
export http_proxy=il-mio-proxy:porta

A questo punto si può procedere alla vera configurazione di approx, il file /etc/approx/approx.conf:

# Here are some examples of remote repository mappings.
# See http://www.debian.org/mirror/list for mirror sites.
 
debian          http://mi.mirror.garr.it/mirrors/debian
security        http://security.debian.org/debian-security
volatile        http://volatile.debian.org/debian-volatile
 
# The following are the default parameter values, so there is
# no need to uncomment them unless you want a different value.
# See approx.conf(5) for details.
 
#$interface      any
$port          80
#$max_wait      10
#$max_rate      unlimited
#$user          approx
#$group         approx
#$syslog         daemon
#$pdiffs        true
#$verbose        false
#$debug         false

La prima sezione specifica a quale nome faranno riferimento i repository proxati, la sintassi è molto semplice:

nome_repo      url_repo

così facendo, all’indirizzo http://proxy/nome_repo risponderà la cache di url_repo o, come accade nella prima riga del nostro file di configurazione, http://proxy/debian/ è una cache per http://mi.mirror.garr.it/mirrors/debian.
A questo punto basta modificare il /etc/apt/sources.list delle macchine della propria rete e del proxy stesso, utilizzando i nuovi url:

http://proxy/debian/   lenny main contrib non-free
http://proxy/security/   lenny/updates main contrib non-free
http://proxy/volatile/   lenny/volatile main contrib non-free

La seconda sezione, invece, si occupa della gestione delle opzioni di configurazione del comportamento di approx stesso, nel nostro esempio abbiamo configurato come porta di ascolto la 80, al contrario del default storico di apt-proxy: la 9999. Se non avessimo cambiato la configurazione, il proxy avrebbe comunque funzionato ma nei client si doveva configurare esplicitamente la porta di ascolto del server usando, per esempio, una riga come http://proxy:9999/debian/ lenny main contrib non-free.
Il proxy è ora in piedi, sta venendo utilizzato dai client e possiamo anche dimenticarci della sua presenza! Se però vogliamo provare a verificare manualmente il suo comportamento, approx ci fornisce due ulteriori programmi che vengono usati esclusivamente da cron per mantenere in forma il proxy ma che il sistemista curioso può provare a lanciare manualmente.
Il primo programma è update_approx che viene schedulato come giornaliero al momento dell’installazione, questo programma si preoccupa di aggiornare la lista e le versioni dei programmi reperibili dai repository remoti.
Il secondo è gc_approx, il garbage collector: come dice il nome, questo programma si preoccupa di tenere pulita la cache di approx, eliminando i pacchetti superfli e non più disponibili dai repository remoti. Al momento dell’installazione questo programma viene schedulato come settimanale.
Credo che valga veramente la pena installare approx o un altro proxy apt: il risparmio di banda è notevole già da quando si utilizzano solo due macchine e la vostra connessione vi ringrazierà 😉

Tags: , , , ,