15 Lug 2010
Inserito da: Andrea Lanfranchi in: Mondo IT
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.
6 Commenti
marco
20-Nov-2013 1Condividere la cache del package manager è più semplice, scarica solo il necessario, è più veloce, e risparmia banda. E’ a causa di consigli parassiti e sconsiderati come questo, che i server di Debian e di Arch sono stati offline per aver superato la banda, e che oggi hanno il cap! Questa è una sgridata: chi ti ha insegnato a scaricare l’intero repo è un cretino.
Punto 2: nemmeno un accenno al fatto che conviene scaricare di notte, se possibile, affinché il carico del mirror sia distribuito meglio?
Andrea Lanfranchi
20-Nov-2013 2Caro Marco, condivido volentieri il tuo commento solo per dimostrare a tutti quanto il “cretino”, che con grande scioltezza elargisci, ti torna al mittente.
Ma vediamo i punti che sollevi: la condivisione della cache permette di condividere sulla rete locale solo i pacchetti di aggiornamento utili a quella specifica installazione di CentOS. Nel momento in cui ne hai più di una, con configurazioni diverse (un server per apache, un server dedicato a MySQL o MongoDB, un server dedicato alla posta) i pacchetti di aggiornamento sono specifici per ogni singolo setup quindi ognuno si scarica i suoi. Ovviamente alcuni potranno essere condivisi ma non certo tutti.
Punto secondo : la creazione di un repository locale non me l’ha consigliata un cretino ma la stessa wiki ufficiale di CentOS. Proprio ai fini di risparmiare banda e di evitare di scaricare continuamente ISO aggiornate, il network install tramite repository di rete locale ti permette di essere rapido ed indolore per i mirror ufficiali, quando devi installare diverse macchine. Ovviamente questo vale per chi ha necessità di sviluppo e monta e smonta server dummy in continuazione: per gli hobbisti fanatici della pulizia che usano solo un computer con una singola installazione questo può non essere necessario.
Punto terzo: rsync (per come l’ho indicato io) lavora solo per scaricare i pacchetti variati rispetto al repository principale quindi non intaso certo la banda riscaricando tutto ogni volta e, a maggior tutela ancora, lo switch bwlimit permette di gestire il thresold di occupazione media della banda a piacimento.
Punto quarto : ho consigliato di schedulare rsync nel gruppo dei lavori cron nightly che, come anche i sassi sanno, viene eseguito in notturna tra mezzanotte e le 5.
Ciao a presto.
marco
20-Nov-2013 3Ciao,grazie mille per i chiarimenti dettagliati! Scusa e a presto!
Francesco
20-Gen-2014 4Ciao, carina come idea e semplice da realizzare.
Volevo sapere, modificando i link dei repository di centos con quelli di debian stable, e’ possibile usare lo script anche con sistemi debian? Grazie
Andrea Lanfranchi
20-Gen-2014 5Ciao Francesco,
certamente è possibile. Ovviamente qualche sintassi è diversa. Puoi trovare un utile tutorial : http://www.unixmen.com/setup-local-repository-with-debian-7/
Francesco
20-Gen-2014 6Grazie per la risposta, ho letto il link ma manca di uno script come il tuo, spero di essere in grado di modificare il tuo. Grazie. Ps altri consigli sono ben accetti 🙂
Categorie
Tag
Copyright © 2007 - bloginfo('name'); ?> - is proudly powered by WordPress
InSense 1.0 Theme by Design Disease hosted by Isiweb S.r.l.