Se, come me, vi trovate ad aver installato diversi server CentOS nella stessa rete, sicuramente vi sarete posti il problema di come cercare di evitare i ripetuti download dal web degli aggiornamenti per ogni singola macchina. Non sarebbe meglio scaricarli una volta e distribuirli tramite rete locale ?
La risposta è semplice : basta creare un repository locale di Yum su uno dei server. I requisiti sono davvero minimi e, molto probabilmente, sono già soddisfatti nella vostra installazione standard : un web server (Apache) e l’utilità rsync.

Comunque, nel caso voleste essere certi di avere a disposizione questi strumenti, accedete alla console del server che avete deciso conterrà il repository ed installate quanto necessario. Per far questo aprite una finestra terminal, passate a privilegio di root e digitate:

yum install httpd rsync

Yum scaricherà ed installerà le versioni più aggiornate del server Apache e dell’utilità rsync. Se questi componenti già installati verranno semplicemente aggiornati alla versione più recente.

A questo punto possiamo avviare Apache ed assicurarci che venga avviato automaticamente all’avvio del server. Quindi, sempre da riga di comando:

/etc/init.d/httpd start
chkconfig httpd on

Ecco fatto. I prerequisiti sono soddisfatti.

Ora … bisogna sapere che per impostazione predefinita di CentOS, la directory principale dei documenti di Apache è /var/www/html. Al di sotto di essa andremo a creare le directory che conterrano il repository di Yum. Per l’esempio corrente creiamo il repository relativo alla versione 5 di CentOS con architettura i386 (quindi non 64bit). Ovviamente potete creare repository anche per architetture diverse.

Stando sempre nella console da riga di comando creiamo dunque le due directory che ci servono maggiormente: la os e la updates. Ovviamente i repository ufficiali supportano anche altri contenitori come addons ed extra, ma, nel mio caso, ho preferito focalizzarmi sui contenitori di maggiore importanza. A voi la scelta di scaricarne altre:

mkdir -pv /var/www/html/centos/5/{os,updates}/i386

Ecco fatto. Le directory sono state create.

Ora … assumendo che il vostro server si chiami mioserver.miodominio.com provate, da un’altra postazione, ad accedere con un browser all’indirizzo http://mioserver.miodominio.com/centos/5/os/i386 … dovreste ricevere un messaggio di Apache.  Fatto questo tornate alla console del server che state configurando.

Ok … a questo punto bisogna trovare la corretta sorgente da cui attingere per copiare i file del repository … ovvero un mirror tra i tanti di CentOS che supporti rsync. Per l’italia l’unico al momento è il mirror del GARR/CILEA. Siamo pronti per avviare il comando che creerà una copia esatta del repository sorgente sul nostro server. Vi consiglio a questo proposito di creare uno script in modo che i comandi possano essere schedulati. Create quindi in /etc/cron.daily un file che si chiama yum-update-repo e copiateci dentro il seguente testo:

#!/bin/sh
rsync -avrt --bwlimit=100 rsync://mi.mirror.garr.it/CentOS/5/os/i386  /var/www/html/centos/5/os/
rsync -avrt --bwlimit=100 rsync://mi.mirror.garr.it/CentOS/5/updates/i386  /var/www/html/centos/5/updates/

Salvate il file e rendetelo eseguibile:

chmod 755 /etc/cron.daily/yum-update-repo

Qualche commento sui comandi appena descritti. Il tool rsync creerà una copia degli archivi presenti nell’origine ed in tutte le sottodirectory. Lo switch –bwlimit serve a limitare l’utilizzo della banda (che io ho impostato a 100KBPS) al fine di evitare che la copia avvenga intasandovi la linea di connessione ad internet. Al primo ciclo ovviamente verranno scaricati tutti i file, ma dal secondo in avanti verranno scaricati solo i file variati e verranno elminiati (dalla copia locale) tutti i file non più presenti sulla sorgente.

A questo punto, visto che abbiamo preparato il nostro repository locale, dobbiamo informare tutti i nostri server CentOS della rete (incluso quello su cui state lavorando) del fatto che gli aggiornamenti non devono più essere scaricati dalla rete ma da un server locale.

Con l’editor di testo che preferite aprite il file /etc/yum.repos.d/CentOS-Base.repo. Per la sezione [base] e [updates] (quelle che ho attivato per questo esempio) dovrete togliere il commento dalla riga baseurl e completarla con l’indirizzo http del server che avete appena creato:

[base]
name=CentOS-$releasever - Base
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os
baseurl=http://mioserver.miodominio.com/centos/$releasever/os/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5

#released updates
[updates]
name=CentOS-$releasever - Updates
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=updates
baseurl=http://mioserver.miodominio.com/centos/$releasever/os/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5

Salvate il file.

Siete pronti per lanciare l’esecuzione di un aggiornamento.