Politica Gentoo Linux Referitoare la Mirror-uri rsync
1.
Cerinţe Hardware
Donaţie Maşini
Gentoo Linux se bazează pe două tipuri diferite de mirror-uri: mirror-urile de
rotaţie principale şi mirror-urile comunităţii. Mirror-urile de rotaţie
principale sunt server-e rsync dedicate ţi responsabile pentru manipularea
volumului traficului nostru rsync. Toate mirror-urile de rotaţie principale
folosesc Gentoo Linux şi sunt administrate de membri ai echipei de dezvoltare
Gentoo. Mirror-urile comunităţii sunt server-e care sunt asigurate şi
administrate de membri ai comunităţii. Aceste server-e pot fi sau nu dedicate
pentru utilizare rsync şi pot folosi sau nu Gentoo Linux.
La această dată, avem destule mirror-uri ale comunităţii şi căutăm activ
server-e de rotaţie principale adiţionale. Specificaţiile pentru server-ele de
rotaţie principale includ:
- Procesor Pentium 4 Minimum 2GHz (sau echivalent)
- Minimum 1 GOctet RAM (ideal este 1.5 GOcteţi - 2 GOcteţi)
- 10 GOcteţi spaţiu disc (IDE este bine)
Aceste server-e pot fi donate cu lăţime de bandă şi spaţiu pentru colocare dacă
dispuneţi de acestea. Dacă nu, putem oferi aceste servicii şi dvs. doar să
trimiteţi maşina către centrul nostru de colocare. Consumul mediu de lăţime de
bandă pentru un mirror de rotaţie principal este în prezent ~7Mbps (aproximativ
2 TOcteţi pe lună). Dacă numărul mirror-urilor de rotaţie principale creşte,
corespunzător scade şi lăţimea medie de bandă consumată.
Dacă doriţi să donaţi o maşină, trimiteţi un email lui Jeffrey Forman cu informaţii pertinente.
2.
Scurte Întrebări Frecvente (oferite ca referinţă pentru actualii administratori de mirror-uri)
Î: Cine ar trebui contactat referitor la probleme rsync şi mentenanţă?
R: Vizitaţi http://bugs.gentoo.org şi completaţi un raport bug pentru produsul "Rsync".
Î: Rulez un server mirror rsync privat pentru compania mea. Pot încă accesa rsync1.us.gentoo.org?
R: Deoarece resursele noastre sunt limitate, trebuie să ne asigurăm că sunt
alocate în aşa mod încât să oferim un beneficiu maxim pentru utilizatorii
noştri. De aceea, limităm conexiunile către server-ele mirror principale rsync
şi distfiles doar la server-ele mirror publice. Utilizatorii sunt bineveniţi în
a folosi sistemul nostru obişnuit de mirror-uri pentru a-şi stabili server-e
mirror rsync private, totuşi sunt rugaţi să urmărească regulile
de bază şi eticheta rsync..
Î: Este important a-mi sincroniza server-ul mirror de două ori pe oră?
R: Da, este foarte important. Nu trebuie să realizaţi sincronizările exact la
:00 şi :30 dar sincronizările ar trebui să se întâmple între următoarele două
intervale de timp:
- de la :00 la :10
- de la :30 la :40
În plus, asiguraţi-vă că sincronizările dvs. se realizează la exact 30 minute
diferenţă. Deci, dacă programaţi prima sincronizare în fiecare oră la :08,
programaţi a doua sincronizare pentru :38.
De unde ar trebui să-mi sincronizez mirror-ul meu rsync înainte de a deveni un mirror oficial Gentoo?
- Sunt un server mirror din Europa: sincronizaţi cu rsync.de.gentoo.org
- Sunt un server mirror din Statele Unite: sincronizaţi cu rsync.us.gentoo.org
- Nu fac parte din primele două grupuri: sincronizaţi cu rsync.us.gentoo.org
Î: Cum găsesc cel mai apropiat mirror de mine?
R: Comanda netselect a fost creată pentru a face acest lucru pentru
dvs. Dacă încă nu aţi rulat emerge netselect, atunci faceţi-o.
Apoi rulaţi: netselect rsync.gentoo.org. După un minut sau aproape,
netselect va afişa o adresă IP. Luaţi această adresă şi folosiţi-o
ca singurul parametru pentru rsync cu două coloane adăugate la aceasta. De
ex. rsync 1.2.3.4::. Veţi avea ocazia să aflaţi ce mirror este din
adresa din mesajul-banner. Actualizaţi corespunzător fişierul dvs.
/etc/make.conf.
Î: Pot folosi compresia când sincronizez cu rsync1.us.gentoo.org?
R: Nu. Compresia utilizează prea multe resurse pe server, aşa că am dezactivat
forţat compresia la rsync1.us.gentoo.org. Vă rugăm să nu
încercaţi să folosiţi compresia când vă sincronizaţi cu acest server.
Î: Observ multe procese rsync vechi şi probabil inactive. Cum scap de acestea?
R: Vă rugăm să citiţi secţiunea cu Script-uri Exemplu.
Î: Sunt mulţi utilizatori care se conectează la server-ul meu rsync
foarte frecvent, uneori chiar cauzând un atac DoS la mirror-ul me. Există vreo
posibilitate de a preveni acest lucru?
R: Din nou, vă rugăm să citiţi secţiunea cu Script-uri Exemplu.
3.
Script-uri Exemplu
Notă:
Veţi găsi un model de configuraţie şi fişiere script în pachetul
gentoo-rsync-mirror. Doar rulaţi emerge gentoo-rsync-mirror.
|
În acest moment, procesul de mirror al arborelui nostru Portage cere în jur de
250Mb, deci nu este mare consumator de spaţiu; având cel puţin 500Mb liberi ar
trebui să ofere spaţiu pentru viitor. Configurarea unui mirror pentru arborele
Portage este simplă -- în primul rănd, asiguraţi-vă că mirror-ul dvs. are
instalat pachetul rsync. Apoi, modificaţi fişierul rsyncd.conf
pentru a arăta similar cu următorul exemplu:
Cod 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-x86-portage]
#această linie este pentru compatibilitate
path = /gentoo/rsync
comment = Gentoo Linux Portage tree
[gentoo-portage]
#versiunile noi de portage folosesc această linie
path = /gentoo/rsync
comment = Gentoo Linux Portage tree mirror
exclude = distfiles
|
În exemplu, mirror-ul gentoo-x86-portage indică aceleaşi date ca şi
gentoo-portage. Deşi am schimbat recent numele oficial al mirror-ului nostru ca
gentoo-portage, gentoo-x86-portage este încă necesar pentru compatibilitatea în
urmă, deci includeţi ambele variante.
Din raţiuni de securitate, folosirea unui mediu în chroot este cerută!
Acum, trebuie să efectuaţi mirror pentru arborele Gentoo Linux Portage. Ar
trebui să folosiţi următorul script pentru aceasta:
Cod 3.2: rsync-gentoo-portage.sh |
#!/bin/bash
RSYNC="/usr/bin/rsync"
OPTS="--quiet --recursive --links --perms --times --devices --delete --timeout=300"
#Decomentaţi următoarea linie doar dacă aveţi permisiunea de a accesa rsync1.us.gentoo.org
#SRC="rsync://rsync1.us.gentoo.org/gentoo-portage"
#Dacă sunteţi în aşteptarea accesului la mirror-ul nostru principal, alegeţi unul din
mirror-urile noastre pe care să îl oglindiţi:
SRC="rsync://rsync2.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
|
Cod 3.3: /etc/init.d/rsyncd |
#!/sbin/runscript
# Copyright 1999-2004 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Header: /var/cvsroot/gentoo-x86/net-misc/rsync/files/rsyncd.init.d,v 1.2 2004/05/02 22:45:02 mholzer Exp $
depend() {
need net
}
# FYI: --sparce seems to cause problems.
RSYNCOPTS="--daemon --safe-links --timeout=300"
start() {
ebegin "Starting rsync daemon"
start-stop-daemon --start --quiet --pidfile /var/run/rsyncd.pid --nicelevel 15 --exec /usr/bin/rsync -- ${RSYNCOPTS}
eend $?
}
stop() {
ebegin "Stopping rsync daemon"
start-stop-daemon --stop --quiet --pidfile /var/run/rsyncd.pid
eend $?
}
|
Fişierul dvs. rsyncd.motd ar trebui să conţină adresa dvs.
IP şi alte informaţii relevante legate de mirror-ul dvs., cum ar fi
informaţii despre gazda care oferă mirror Portage şi o adresă de contact
administrativ. După ce aţi fost acceptat ca un mirror rsync oficial,
maşina dvs. va fi numită cu un nume de forma: rsync[num].[country
code].gentoo.org
Această comandă vă va ajuta să eliminaţi vechile procese rsync care uneori nu
se finalizează din pricina unor probleme de conexiune. Este important să le
eliminaţi deoarece acestea se numără drept conexiuni valide pentru opţiunea
'max connections'. Puteţi rula această comandă cu ajutorul crontab în fiecare
oră, va căuta şi elimina procesele rsync mai vechi de o oră.
Cod 3.4: Eliminarea proceselor rsync vechi |
/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}'`
|
În unele cazuri, există unii utilizatori neluaţi în considearare care
abuzează de sistemul mirror-ului rsync prin sincronizarea de mai mult de 1-2
ori pe zi. În cazurile extreme, utilizatorii programează operaţiile cron
pentru sincronizare la fiecare 15 minute sau asemănător. Aceasta conduce
deseori către un atac Denial of Service prin ocuparea în mod continuu a unui
slot rsync, care altfel ar fi revenit unui alt utilizator. Pentru a încerca
şi preveni aceasta, aţi putea folosi următorul script perl
care va scana prin fişierele dvs. rsync log, va găsi adresele IP care deja
s-au conectat de mai mult de N ori în respectiva zi şi va crea
dinamic un fişier rsyncd.conf, incluzând adresele IP
supărătoare în directiva 'hosts deny'. Linia următoare controlează
calcularea N:
Cod 3.5: Definirea numărului maxim de conectări per IP |
@badhosts=grep {$hash{$_}>4} keys %hash;
|
Dacă folosiţi acest script, nu uitaţi să rotiţi fişierele dvs. rsync
log zilnic şi modificaţi script-ul pentru a se potrivi cu locaţia
fişierului dvs. rsyncd.conf. Acest script este testat în Gentoo
Linux, dar ar trebui să meargă corespunzător pe alte arhitecturi care
suportă atât rsync cât şi perl.
4.
Configurarea propriului server mirror rsync local
Introducere
Mulţi utilizatori folosesc Gentoo pe mai multe maşini şi trebuie să ruleze
emerge --sync pe fiecare din acestea. Folosirea mirror-urilor publice
este o risipă de lăţime de bandă la ambele capete. Sincronizarea doar a unei
maşini cu un server mirror public şi a celorlaltor cu acea maşină va salva
resurse pe mirror-urile Gentoo şi va salva lăţimea de bandă a utilizatorilor.
Tot ceea ce trebuie să faceţi este să alegeţi care din maşinile dvs. va fi
mirror-ul rsync local al dvs. şi să o configuraţi. Ar trebui să alegeţi un
computer care poate susţine încărcarea procesului şi discului cerute de
operaţia rsync. Mirror-ul dvs. local trebuie, de asemenea, să fie disponibil
oricând unul din celelaltele computere ale dvs. îşi sincronizează propriul
arbore Portage. Pe lângă asta, ar trebui să aibă o adresă IP statică sau un
nume care întotdeauna poate fi rezolvat de server-ul dvs. Configurarea unui
server DHCP şi/sau DNS este dincolo de scopul acestui ghid.
Configurarea server-ului
Nu există un alt pachet de instalat pentru că pachetul necesar este deja
instalat pe computerul dvs. Configurarea unui mirror rsync local este doar o
problemă în a configura daemon-ul rsyncd pentru a face directorul dvs.
/usr/portage disponibil pentru sincronizare. Creaţi următorul
fişier de configurare /etc/rsyncd.conf:
Cod 4.1: Exemplu pentru /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/
|
Nu trebuie să folosiţi opţiunile hosts allow şi hosts deny.
Implicit, tuturor clienţilor li se va permite să se conecteze. Ordinea în care
scrieţi aceste opţiuni nu este relevantă. Server-ul va verifica întotdeauna
opţiunea hosts allow în primul rând şi va permite conexiunea dacă
host-urile care se conectează se potrivesc cu unul din modelele afişate.
Server-ul va verifica apoi opţiunea hosts deny şi va refuza conexiunea
dacă este găsită vreo potrivire. Oricărui host care nu se potriveşte cu unul
din modelele anterioare, îi va fi permisă conectarea. Vă rugăm să citiţi pagina
de manual (man rsyncd.conf) pentru mai multe informaţii.
Acum, porniţi daemon-ul dvs. rsync cu următoarea comandă ca utilizator root:
Cod 4.2: Pornirea daemon-ului rsync |
# /etc/init.d/rsyncd start
# rc-update add rsyncd default
|
Haideţi să testăm mirror-ul dvs. rsync. Nu trebuie să-l încercaţi de pe altă
maşină dar ar fi o bună idee să faceţi asta. Dacă server-ul dvs. nu este
recunoscut după nume de pe toate computerele dvs., puteţi folosi altfel adresa
IP a acestuia.
Cod 4.3: Testarea mirror-ului dvs. |
# rsync 192.168.0.1::
gentoo-portage Gentoo Portage
# rsync your_server_name::gentoo-portage
|
Server-ul dvs. mirror rsync este configurat. Rulaţi emerge --sync aşa
cum aţi făcut până acum pentru a vă menţine server-ul actualizat.
Notă:
Luaţi aminte că mulţi administratori de mirror-uri publice consideră că
sincronizarea mai mult de o dată sau două pe zi este un abuz.
|
Configurarea clienţilor dvs.
Acum, configuraţi celelalte sisteme ale dvs. să folosească mirror-ul local în
locul unui mirror public. Modificaţi fişierul dvs. /etc/make.conf
şi stabiliţi ca variabila SYNC să indice server-ul dvs.
Cod 4.4: Definirea SYNC în /etc/make.conf |
SYNC="rsync://192.168.0.1/gentoo-portage"
SYNC="rsync://your_server_name/gentoo-portage"
|
Puteţi verifica dacă computerul dvs. a fost configurat corespunzător
pentru sincronizare folosind mirror-ul local pentru prima dată:
Cod 4.5: Verificarea şi sincronizarea |
# emerge --info|grep SYNC
SYNC="rsync://your_server_name/gentoo-portage"
# emerge --sync
|
Asta e tot! Toate sistemele dvs. vor folosi de acum mirror-ul local rsync
atunci când veţi rula emerge --sync.
Conţinutul acestui document este publicat sub licenţa Creative Commons -
Attribution / Share Alike.
|