Guida e politiche per i mirror rsync di Gentoo Linux
1.
Informazioni preliminari
Riguardo ai nomi e alle terminologie
Questa guida è dedicata a chiunque voglia configurare personalmente un mirror
rsync, è può risultare utile a chi vuole gestire sia mirror rsync ufficiali, sia
privati.
Ci sono tre tipologie di mirror rsync per Gentoo: mirror principali di
rotazione, mirror della comunità, e mirror privati. I mirror principali di
rotazione sono gestiti dal gruppo per le infrastrutture di Gentoo, e
gestiscono l'enorme massa di traffico rsync sviluppata dagli utenti di questa
distribuzione. I mirror della comunità sono mirror gestiti da volontari della
comunità di Gentoo. I mirror privati sono gestiti da singole persone e non sono
accessibili dalla rete pubblica, ed hanno lo scopo di ridurre i costi del
traffico e la latenza per aziende o singole persone.
Attualmente c'è un numero sufficiente di mirror della comunità, mentre c'è
ancora bisogno di ulteriori mirror principali di rotazione. Le specifiche
hardware per i mirror principali di rotazione includono:
-
Minimo un processore Pentium 4 2GHz (preferibile a 64-bit con almeno 2 core)
- Minimo 2GB di RAM (3GB - 4GB sarebbe l'ideale)
- 15GB di spazio su disco (IDE/SATA va bene)
È possibile mantenere il possesso fisico dell'hardware, e tenerlo online nel
proprio spazio di collocazione. Il consumo medio della larghezza di banda per
ciascun mirror principale di rotazione è di circa 10Mbit/sec (pressapoco 2,6 TiB
al mese). Questo numero dovrebbe diminuire in rapporto all'aumentare dei mirror
ufficiali.
Se si desidera donare la propria macchina, mandare un'e-mail con tutte le
informazioni necessarie ai Mirror
Admin.
2.
Configurare il proprio mirror rsync locale
Introduzione
Molti utenti eseguono Gentoo su diverse macchine e necessitano di sincronizzare
l'albero di Portage su ognuna di queste. Usare i mirror pubblici è un chiaro
spreco di banda da entrambi i lati. Sincronizzare solo una macchina con un
mirror pubblico e tutte le altre con questa macchina locale risparmierebbe
risorse sui mirror Gentoo e banda dati all'utente.
Lo stesso discorso vale per le organizzazioni che vogliono controllare il mirror
rsync con il quale i propri server e workstation effettuano la sincronizzazione.
Ovviamente c'è anche la loro volontà di risparmiare sulla banda e sui costi del
traffico.
Tutto ciò che occorre fare è selezionare la macchina da adibire a mirror rsync
locale e configurarla opportunamente. Scegliere un computer capace di gestire i
carichi di CPU e disco richiesti dalle operazioni di rsync. Inoltre il proprio
mirror locale deve sempre essere disponibile quando gli altri computer
sincronizzeranno il proprio albero di portage, oltre che a disporre di un
indirizzo IP statico o possedere un nome host sempre risolvibile. Configurare un
server DCHP e/o DNS va oltre gli scopi di questa guida.
Tenere presente che in queste istruzioni si assume che il proprio mirror rsync
privato sia una macchina Gentoo. Se si vuole eseguirlo su una distribuzione
differente, la guida per configurare un mirror della comunità potrebbe essere
maggiormente utile. L'importante è non effettuare la sincronizzazione ogni
mezz'ora ma solo una o due volte al giorno.
Configurare il server
Non è richiesta l'installazione di pacchetti aggiuntivi in quanto il software
richiesto è già presente sulla macchina. Per impostare il proprio mirror rsync
locale basta modificare opportunamente il demone rsync in modo da rendere
disponibile per la sincronizzazione la directory /usr/portage.
Creare il seguente file di configurazione /etc/rsyncd.conf:
Codice 2.1: Esempio di /etc/rsyncd.conf |
pid file = /var/run/rsyncd.pid
max connections = 5
use chroot = yes
uid = nobody
gid = nobody
hosts allow = 192.168.0.1 192.168.0.2 192.168.1.0/24
hosts deny = *
[gentoo-portage]
path=/usr/portage
comment=Gentoo Portage
exclude=distfiles/ packages/
|
Le opzioni hosts allow e hosts deny non sono necessarie, in quanto
la configurazione predefinita accetta la connessione da qualsiasi client.
L'ordine con cui vengono scritte le opzioni è irrilevante: il server controlla
sempre per prima l'opzione hosts allow e permette la connessione all'host
se questo corrisponde ad uno dei pattern elencati; dopodiché passa all'opzione
hosts deny e rifiuta la connessione se riscontra una qualsiasi
corrispondenza. Agli host che non hanno nessuna corrispondenza viene permessa la
connessione. Leggere la pagina man (man rsyncd.conf) per ulteriori
informazioni.
Avviare il demone rsync lanciando i seguenti comandi da utente root:
Codice 2.2: Avviare il demone rsync |
# /etc/init.d/rsyncd start
# rc-update add rsyncd default
|
A questo punto si può testare il mirror rsync. È consigliabile, ma non
necessario, effettuare la prova da un'altra macchina. Se il proprio server non
è raggiungibile attraverso il nome dagli altri computer, in alternativa si può
utilizzare il suo indirizzo IP.
Codice 2.3: Testare il proprio mirror |
# rsync 192.168.0.1::
gentoo-portage Gentoo Portage
# rsync nome_tuo_server::gentoo-portage
|
Il mirror rsync è ora pronto per essere utilizzato. Per mantenere aggiornato il
server eseguire ad intervalli regolari emerge --sync, come veniva fatto
anche in precedenza. Se si utilizza cron o strumenti simili per sincronizzare
regolarmente, ricordarsi di mantenere una frequenza bassa, tipo uno o due volte
al giorno.
Nota:
Notare che molti amministratori dei mirror pubblici considerano come abusi le
sincronizzazioni ripetute con una frequenza maggiore ad una o due volte al
giorno. Alcuni se non la maggior parte di essi bandiranno dai propri server gli
IP delle macchine che abuseranno di questo servizio.
|
Configurare i propri client
Ora bisogna modificare la configurazione degli altri computer per farli
sincronizzare con il proprio mirror rsync locale invece che con quello
pubblico. Modificare /etc/make.conf e far puntare la variabile
SYNC al proprio server.
Codice 2.4: Definire SYNC in /etc/make.conf |
SYNC="rsync://192.168.0.1/gentoo-portage"
SYNC="rsync://nome_tuo_server/gentoo-portage"
|
Per verificare che il computer sia configurato correttamente effettuare la
sincronizzazione con il proprio mirror locale per la prima volta:
Codice 2.5: Verifica e sincronizzazione |
# emerge --info|grep SYNC
SYNC="rsync://nome_tuo_server/gentoo-portage"
# emerge --sync
|
Non sono necessarie ulteriori operazioni, ora tutti i computer useranno il
mirror rsync locale appena configurato ad ogni esecuzione di emerge
--sync.
3.
Configurare un server rsync della comunità
Introduzione
Nota:
Si possono trovare esempi di configurazione e file script nel pacchetto
gentoo-rsync-mirror. Eseguire emerge gentoo-rsync-mirror.
|
Attualmente, effettuare il mirror dell'albero di Portage richiede circa 600Mb,
per cui lo spazio consumato non è molto; per assicurarsi di avere spazio a
sufficienza anche in futuro, mettere a disposizione almeno un 1Gb di spazio
libero. Configurare un mirror dell'albero di Portage è semplice -- per prima
cosa, assicurarsi di avere installato rsync. Successivamente, modificare il
proprio rsyncd.conf come nell'esempio seguente:
Codice 3.1: rsyncd.conf |
uid = nobody
gid = nobody
use chroot = yes
max connections = 15
pid file = /var/run/rsyncd.pid
motd file = /etc/rsync/rsyncd.motd
log file = /var/log/rsync.log
transfer logging = yes
log format = %t %a %m %f %b
syslog facility = local3
timeout = 300
[gentoo-portage]
#modern versions of portage use this entry
path = /gentoo/rsync
comment = Gentoo Linux Portage tree mirror
exclude = distfiles
|
Ovviamente per la maggior parte dei file è possibile scegliere le proprie
locazioni. La parte importante è la sezione ([gentoo-portage]). Questa è
la locazione dalla quale i client rsync proveranno a sincronizzarsi.
Per ragioni di sicurezza, è richiesto l'uso di un ambiente in chroot. Ciò
comporta delle implicazioni per i timestamp dei log -- vedere le FAQ più sotto.
A questo punto bisogna effettuare il mirror dell'albero di Gentoo Linux
Portage. Per fare ciò, è possibile usare lo script mostrato qui di seguito.
Probabilmente sarà necessario cambiare la locazione di qualche fileper
soddisfare le proprie necessità -- in particolare, esse dovrebbero
corrispondere a quelle del proprio rsyncd.conf.
Codice 3.2: rsync-gentoo-portage.sh |
#!/bin/bash
RSYNC="/usr/bin/rsync"
OPTS="--quiet --recursive --links --perms --times -D --delete --timeout=300"
#Decommentare la linea seguente solo se si vi è stato garantito l'accesso a masterportage.gentoo.org
#SRC="rsync://masterportage.gentoo.org/gentoo-portage"
#Se si sta aspettanto l'accesso al mirror principale, selezionare uno dei mirror da:
SRC="rsync://rsync.de.gentoo.org/gentoo-portage"
DST="/space/gentoo/rsync/"
echo "Started update at" `date` >> $0.log 2>&1
logger -t rsync "re-rsyncing the gentoo-portage tree"
${RSYNC} ${OPTS} ${SRC} ${DST} >> $0.log 2>&1
echo "End: "`date` >> $0.log 2>&1
|
Il proprio rsyncd.motd dovrebbe contenere l'indirizzo IP ed altre
informazioni di rilievo riguardanti il proprio mirror, per esempio l'host che
fornisce il mirror di Portage e un contatto amministrativo. Ora è possibile
testare il server come abbozzato nel capitolo precedente Configurare il proprio mirror rsync locale
Dopo essere stati approvati a mirror rsync ufficiale, al proprio host verrà
dato un alias avente una nome nella forma: rsync[num].[codice
nazione].gentoo.org.
4.
FAQ brevi
D: Chi bisogna contattare per problemi di manutenzione o problemi
riguardanti rsync?
R: Visitare Gentoo Bugzilla ed
inserire un bug nel prodotto "Mirrors", componente "Server Problem".
D: Come si può controllare l'aggiornamento di un server rsync
ufficiale?
R: Il gruppo delle infrastrutture Gentoo tiene sotto controllo tutti i server
rsync della comunità. I risultati sono visibili nella pagina web corrispondente.
D: Sto mettendo a disposizione un mirror rsync privato per la mia
azienda. Posso ancora accedere a masterportage.gentoo.org?
R: A causa delle risorse limitate, bisogna assicurare che esse siano allocate
in modo da fornire il massimo beneficio agli utenti. Perciò le connessione
permesse al rsync principale e ai mirror distfile sono limitate solamente ai
server pubblici. Si invitano gli utenti ad utilizzare il nostro regolare
sistema di mirror per stabilire un mirror rsync privato, sebbene venga chiesto
loro di seguire qualche basilare Linea guida di
educazione per Rsync.
D: È importante sincronizzare il mio mirror due volte all'ora?
R: Sì, è importante. Non occorre eseguire la sincronizzazione esattamente alle
:00 e alle :30 ma la sincronizzazione dovrebbe avvenire in ciascuna delle due
finestre temporali:
- da :00 a :10
- da :30 a :40
Inoltre, assicurarsi che le proprie sincronizzazioni avvengano esattamente ogni
30 minuti. Per cui, se la prima sincronizzazione è pianificata ogni ora alle
:08, si prega di pianificare la seconda alle :38.
D: Dove dovrei sincronizzazione il mio mirror rsync prima di diventare un
mirror ufficiale Gentoo?
- Per i mirror rsync Europei: sincronizzarsi con rsync.de.gentoo.org
- Per i mirror rsync Statunitensi: sincronizzarsi con
rsync.us.gentoo.org
- Per tutti gli altri: sincronizzarsi con rsync.us.gentoo.org
D: Come individuo il mirror più vicino a me?
R: netselect è progettato per farlo automaticamente. Se non è già
installato, farlo ora tramite il comando emerge netselect, poi lanciare
netselect rsync.gentoo.org. Dopo circa un minuto netselect stamperà un
indirizzo IP, che dev'essere utilizzato come unico parametro per rsync, seguito
da una coppia di due punti, es. rsync 1.2.3.4::. Dal messaggio banner
visualizzato si dovrebbero reperire informazioni utili. Aggiornare di
conseguenza /etc/make.conf.
D: È possibile usare la compressione durante la sincronizzazione con
masterportage.gentoo.org?
R: No. La compressione utilizza troppe risorse del server, per cui è stata
disabilitata forzatamente su masterportage.gentoo.org. Si prega di
non provare ad usare la compressione mentre si sta effettuando
una sincronizzazione con questo server.
D: Noto la presenza di molti processi relativi a rsync vecchi e
probabilmente morti, come posso eliminarli?
R: Questo comando sarà molto utile per terminare i vecchi processi rsync che
qualche volta restano sparsi nel sistema a causa di problemi di connessione. È
importante terminarli poiché contano come connessioni valide per l'opzione 'max
connections'. Si può eseguire questo comando ogni ora tramite crontab, esso
cercherà e terminerà i processi rsync più vecchi di un'ora.
Codice 4.1: Terminare i vecchi processi rsync |
/bin/kill -9 `/bin/ps --no-headers -Crsync -o etime,user,pid,command|/bin/grep nobody | \
/bin/grep "[0-9]\{2\}:[0-9]\{2\}:" |/bin/awk '{print $3}'`
|
D: Molto spesso ci sono troppi utenti connessi al mio server rsync,
e qualche volta ciò comporta un DoS al mio mirror, c'è qualche modo per
prevenire questa situazione?
In certi casi, c'è qualche utente sconsiderato che abusa del sistema di mirror
rsync sincronizzando più di 1-2 volte al giorno. Nei casi più estremi, gli
utenti pianificano una sincronizzazione circa ogni 15 minuti. Molte volte
questo porta ad un attacco di tipo Denial Of Service occupando continuamente
uno slot rsync che dovrebbe altrimenti essere libero e disponibile per un altro
utente. Per cercare di prevenire questa situazione, è possibile usare questo script
perl il quale effettuerà una scansione dei file di log di rsync,
selezionerà gli indirizzi IP che si sono connessi più di N volte al
giorno e in modo dinamico creerà un file rsyncd.conf, includendo
l'indirizzo IP incriminato nella direttiva 'hosts deny'. La linea seguente
controlla il valore di N (in questo caso 4):
Codice 4.2: Defnire il massimo numero di connessioni per IP |
@badhosts=grep {$hash{$_}>4} keys %hash;
|
Se viene usato questo script, ricordarsi di effettuare la rotazione dei propri
file di log di rsync giornalmente e modificare lo script per far corrispondere
la locazione al proprio file rsyncd.conf. Questo script è testato
su Gentoo Linux, ma dovrebbe comunque funzionare regolarmente su altre
architetture che supportano sia rsync che perl.
I contenuti di questo documento sono rilasciati sotto la licenza Creative
Commons - Attribution / Share Alike.
|