# HOWTO: Lokalny serwer rsync i proxy dla distfiles

## milu

Masz kilka komputerów z Gentoo w swojej sieci?

Zoptymalizuj wykorzystanie łącza przy pobieraniu pakietów z Portage i przyspiesz swoją kompilację przez zmniejszenie czasu na ściąganie plików.

Nie dość, że zmniejszysz obciążenie swojego łącza to odciążysz serwery gentoo.

Całość tego rozwiązania składa się z dwóch części:

I. Http-Replicator - krótko mówiąc proxy dla distfiles

II. gentoo-rsync-mirror - lokalny serwer rsync serwujący drzewko portage

I. Http-Replicator

1. Należy pobrać ebuild dla tego programiku: http://www.updatedlinux.com/replicator/http-replicator-flybynite-1.5.tar.bz2

Zainstalować http-replikator (Jak zainstalować ebuild spoza portage znajdziesz tutaj)

```
# emerge http-replicator
```

2. Teraz pozostaje konfiguracja:

Na wszystkich komputerach z gentoo w sieci lokalnej(na serwerze także) w /etc/make.conf należy dodać 

```
http_proxy="http://mójserwerproxy:8080"
```

a także takie linie:

```
#FETCHCOMMAND="/usr/bin/wget -t 5  --passive-ftp \${URI} -P \${DISTDIR}"

RESUMECOMMAND=" /usr/bin/wget -t 5 --passive-ftp  \${URI} -O \${DISTDIR}/\${FILE}"
```

3. Sprawdzenie konfiguracji i utworzenie cache'u replikatora

Ustawienia domyślne  powinny wystarczyć ale profilaktycznie radzę sprawdzić kofigurację w /etc/http-replicator.conf u mnie trzeba było zmienić linijkę z hostami, które moga korzystać z replikatora:

```
DAEMON_OPTS="$DAEMON_OPTS --ip 192.168.1.*"
```

potem utworzenie i uzupełnienie katalogu replikatora

```
#  /usr/bin/repcacheman 
```

4. Uruchomienie replikatora

```
#  /etc/init.d/http-replicator start
```

5. Dodanie replikatora do startu systemu

```
# rc-update add http-replicator default
```

Należy pamiętać, że portage potrzebuje mirrorów. W tym celu dopisz GENTOO_MIRRORS="jakie_chcesz_serwery_gentoo" do /etc/make.conf i pamiętaj, żeby mirrory ftp ustawić na końcu jako że http-replicator robi tylko za serwer proxy dla http a nie dla ftp .

Niektóre pakiety w portage mają ustawione RESTRICT="nomirror". Standardowo nie pozwala to portage na korzystanie z mirrorów. Jest jednak na to sposób. Trzeba stworzyć plik /etc/portage/mirrors o zawartości:

```
# Http-Replicator Override for FTP and RESTRICT="nomirror packages

local http://gentoo.src.pl http://gentoo.oregonstate.edu
```

Jeśli korzystasz z cron'a dodaj repcacheman do /etc/cron.daily. Skasuje to zduplikowane pliki pobrane na serwer i zaimportuje te, które zostały pobrane z ftp.

Żeby repcacheman działał szybko i efektywnie powinieneś kasować pliki, które pozostają w katalogu distfiles na serwerze po każdym uruchomieniu repcacheman.

Pliki te:

1.Nie istnieją już w Portage

2.Są niekompletne albo uszkodzone

3.To śmieci.

Uwaga!!! Jeśli korzystasz z ACCEPT_KEYWORDS="~x86" możesz natrafić na taki błąd:

```
Verifying checksum's....

/usr/portage/distfiles/eog-2.8.0.tar.bz2

Traceback (most recent call last):

  File "/usr/bin/repcacheman", line 204, in ?

      if t[0]:

      KeyError: 0
```

Rozwiązaniem powyższego błędu jest:

zmiana w /usr/bin/repcacheman w linii 204 i 205

```
t[0] na t["MD5"]
```

i w linii 167

```
portage.writemsg
```

 na 

```
portage_util.writemsg
```

Spowodowane jest to zmianami wprowadzanymi do nowych wersji portage(stabilna 2.0.50-r11 działa OK a niestabilna portage-2.0.51-rc9 wymaga zmian).

II. gentoo-rsync-mirror

1. Instalacja jest bardzo prosta bo w portage jest już odpowiedni ebuild

```
emerge gentoo-rsync-mirror

etc-update
```

2. Konfiguracja

Konfiguracje gentoo-rsync-mirror można przeprowadzić na dwa sposoby. Pierwszy to taki, w którym jest tworzone oddzielne drzewko niezależne od tego, które znajduje się na serwerze a drugi to współdzielenie drzewka serwerowego.

Sposób pierwszy:

Jest on sposobem domyślnym - drzewko znajduje się w katalogu

/opt/gentoo-rsync-mirror/portage i powinno być ściągane przy użyciu

skryptu znajdującego się w instalacji /opt/gentoo-rsync-mirror/rsync-gentoo-portage.sh

Powinnien tam być ustawiony także odpowiedni(najszybszy dla Ciebie) publiczny serwer rsynca

Sposób drugi:

Można jednak skonfigurować to tak, żeby nasz serwer sync oferował drzewko portage z którego sam korzysta. W tym celu w pliku /etc/rsync/rsyncd.conf

zmieniamy linijkę 

```
/opt/gentoo-rsync/portage
```

 na 

```
/usr/portage
```

.

Jeśli zamierzamy cyklicznie synchronizować serwer używając skryptu

/opt/gentoo-rsync-mirror/rsync-gentoo-portage.sh musimy jeszcze zmienić ustawienia w /etc/rsync/gentoo-mirror.conf - chodzi głównie o serwer rsynca i katalog z drzewkiem:

```
 SRC="rsync://rsync.de.gentoo.org/gentoo-portage"

 DST="/opt/gentoo-rsync/portage/"
```

np. na:

```
 SRC="rsync://rsync.pl.gentoo.org/gentoo-portage"

 DST="/usr/portage/"
```

Dodatkowo w /etc/rsync/rsyncd.motd możemy ustawić dowolny opis naszego serwera rsync.

3. Uruchomienie

```
/etc/init.d/rsyncd start
```

4. Dodanie rsyncd do startu komputera

```
rc-update add rsyncd default
```

5. Konfiguracja na pozostałych komputerach w sieci polega na dopisaniu albo zmianie w /etc/make.conf linijki:

```
SYNC="rsync://adres_naszego_rsynca/gentoo-portage"
```

Na koniec pozostaje przetestowanie całego rozwiązania przez zsynchronizowanie lokalnego drzewka na naszym komputerze.

UWAGA!!!!!!

Zgodnie z netykietą Gentoo jeśli tworzymy prywatny mirror synca nie powinniśmy synchronizować drzewka częściej niż raz dziennie!!!

Powodzenia i szybkich synców!!

----------

