Lokalne repozytorium dla YUMa

30 listopada, 2010 (15:07) | centos, linux | By: konrad

Infrastruktura serwerowa w mojej firmie w pewnym momencie zaczęła dość intensywnie rosnąć. W dodatku, wobec wszędobylskich portali i web-serwisów, znaczna część tych systemów działa pod kontrolą CentOSa (Apache wydaje mi się odrobinę bezpieczniejszy i mniej wymagający, niż IIS). Wszystko to wymaga okresowych „przeglądów” i instalowania aktualizacji (w moim przypadku głównie ze względu na bezpieczeństwo). Niby nie jest to jakoś specjalnie skomplikowane – wystarczy zalogować się na taką maszynę, uruchomić YUMa, pobrać nowe wersje pakietów i klepnąć „OK”. No właśnie, ale czy te wszystkie aktualizacje trzeba za każdym razem pobierać z Sieci? Otóż nie, i zmiana takiego stanu rzeczy nie jest nawet taka bardzo skomplikowana.

Można, na przykład, skorzystać z takiej instrukcji, ale dla mnie jest ona odrobinę za bardzo skomplikowana, poza tym nie przepadam za rsync’iem.

Alternatywny proces tworzenia własnego repozytorium pakietów w moim przypadku wyglądał tak:

Po pierwsze – w katalogu /mnt/md3 (bo akurat tutaj miałem trochę miejsca)  utworzyłem odpowiednią strukturę katalogów:
[kbechler@sv ~]# tree /mnt/md3/mirror/centos/5.5 -L 2
/mnt/md3/mirror/centos/5.5
|-- addons
|   |-- i386
|   `-- x86_64
|-- centosplus
|   |-- i386
|   `-- x86_64
|-- contrib
|   |-- i386
|   `-- x86_64
|-- extras
|   |-- i386
|   `-- x86_64
|-- os
|   |-- i386
|   `-- x86_64
`-- updates
|-- i386
`-- x86_64

Po drugie – napisałem sobie prosty plik, o taki:


[kbechler@sv ~]$ cat /mnt/md3/mirror/centos55.lftp
open http://ftp-stud.fht-esslingen.de/pub/Mirrors/centos/5.5
lcd /home/www/html/centos/5.5
echo CENTOS_OS
mirror -e --verbose=3 --parallel=10 os/x86_64 os/x86_64
mirror -e --verbose=3 --parallel=10 os/i386 os/i386
echo CENTOS_ADDONS
mirror -e --verbose=3 --parallel=10 addons/x86_64 addons/x86_64
mirror -e --verbose=3 --parallel=10 addons/i386 addons/i386
echo CENTOS_EXTRAS
mirror -e --verbose=3 --parallel=10 extras/x86_64 extras/x86_64
mirror -e --verbose=3 --parallel=10 extras/i386 extras/i386
echo CENTOS_UPDATES
mirror -e --verbose=3 --parallel=10 updates/x86_64 updates/x86_64
mirror -e --verbose=3 --parallel=10 updates/i386 updates/i386
echo CENTOS_CENTOSPLUS
mirror -e --verbose=3 --parallel=10 centosplus/x86_64 centosplus/x86_64
mirror -e --verbose=3 --parallel=10 centosplus/i386 centosplus/i386
echo CENTOS_CONTRIB
mirror -e --verbose=3 --parallel=10 contrib/x86_64 contrib/x86_64
mirror -e --verbose=3 --parallel=10 contrib/i386 contrib/i386
exit

Po trzecie – w katalogu /etc/cron.daily utworzyłem skrypt, który wywołuje polecenie:

lftp -f /mnt/md3/mirror/centos55.lftp > /var/log/mirror_centos55.log

Po czwarte – skonfigurowałem Apache’a na ten maszynie tak, aby link „http://sv/centos” wskazywał na katalog /mnt/md5/mirror/centos.

Po piąte – poczekałem, aż skrypt z crona zrobi swoje i na lokalnym serwerze będę miał aktualną kopię wszystkich pakietów. Tutaj drobna uwaga: przy wolnym łączu do internetu trzeba albo sprytnie napisać skrypt do synchronizacji, albo uruchomić tą ostatnią „z palca”, a skrypt dopisać do crona po jej zakończeniu. W innym wypadku możemy się natknąć na race-condition, w którym kolejne wywołania „zazębią” się ze sobą (o ile pierwsza synchronizacja nie zakończy się w ciągu 24h).

Po szóste (i ostatnie)  – poprosiłem wszystkie moje systemy, aby pobierały aktualizacje z nowo utworzonego repozytorium. Polegało to na tym, że wywaliłem standardową zawartość katalogu /etc/yum.repos.d i wrzuciłem tam poniższy plik:

[kbechler@sv ~]$ cat /etc/yum.repos.d/centos.repo
[base]
name=CentOS-$releasever - Base
baseurl=http://sv/centos/$releasever/os/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5
[updates]
name=CentOS-$releasever - Updates
baseurl=http://sv/centos/$releasever/updates/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5
[addons]
name=CentOS-$releasever - Addons
baseurl=http://sv/centos/$releasever/addons/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5
[extras]
name=CentOS-$releasever - Extras
baseurl=http://sv/centos/$releasever/extras/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5
#additional packages that extend functionality of existing packages
[centosplus]
name=CentOS-$releasever - Plus
baseurl=http://sv/centos/$releasever/centosplus/$basearch/
gpgcheck=1
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5
#contrib - packages by Centos Users
[contrib]
name=CentOS-$releasever - Contrib
baseurl=http://sv/centos/$releasever/contrib/$basearch/
gpgcheck=1
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5

I to tyle – od momentu wykonania tego powyżej, wszystkie moje maszyny instalują i aktualizują pakiety z lokalnego repozytorium. Dzięki temu zaoszczędziłem odrobinę ruchu (co akurat nie jest w moim przypadku specjalnie ważne), oraz uprościłem konfigurację samej sieci – większość z tych maszyn nie „wystaje” na zewnątrz i konfiguracja NATa stała się zbędna.

Trackback URL: http://konrad.bechler.pl/2010/11/lokalne-repozytorium-dla-yuma/trackback/

«

»

Write a comment





*