OpenMosix

From Cobaltopedia

Contents

OpenMosix

Cronologia d'installazione di un cluster OpenMosix su Slackware GNU/Linux

Nella stesura di questa mini-guida, considerero' che il lettore sappia di cosa si parli ed, eventualmente, abbia dipanato gli ultimi dubbi dando un'approfondita occhiata al mitico e ben scritto "OpenMosix HOW-TO", facilmente reperibile in rete anche presso il sito :
http ://www.openmosix.org
dove viene illustrato con chiarezza cosa sia un "cluster" e le diverse tipologie che lo caratterizzano.

Organizzazione generale

Prima di cominciare e' bene organizzare il tutto tenendo presente che serviranno almeno due PC (ma piu' se ne hanno e piu' sara' divertente giocare...) collegabili tra di loro tramite schede ethernet che siano quanto meno 100 base "t" (100 Mb); non che non sia possibile portare a termine la nostra creazione con delle schede meno veloci ma, lato ludo-didattico a parte, si verrebbero a creare delle restrizioni prestazionali dovute appunto alla bassa velocita' alla quale questo tipo di schede lavorano: ci si troverebbe insomma di fronte al cosiddetto "bottle-neck" (collo di bottiglia).
Il progetto e' stato messo in opera, nel caso specifico, utilizzando :

  • 4 PC con CPU AMD (3 Duron ed 1 Athlon)
  • 4 schede audio integrate
  • 4 schede video "AGP" (Accelerated Graphics Port)
  • Circa 1 Gb di memoria distribuita sui 4 computer
  • 4 hard-disk (dei quali si puo' benissimo fare a meno, ma la procedura sarebbe diversa rispetto a quella descritta in questa guida)
  • 4 schede ethernet "Gigabit" (oramai reperibili ad un costo ragionevole)
  • 1 switch "Gigabit" ethernet

Composizione della "squadra"

Come anche l'autorevole "OpenMosix HOW-TO" recita, non e' indispensabile avere un elaboratore che si occupi di comandare ed amministrare l'intero cluster visto che ognuno dei nodi che lo compongono potrebbe svolgere bene questo compito ma, per praticita', ho deciso di considerare uno di loro come tale (che chiamero' nel corso di tutta la guida "head") cosi' da evitare di dover utilizzare un monitor, una tastiera ed un mouse per ognuno di loro tranne nel momento dell'installazione del sistema operativo che ospitera' le varie configurazioni ed i programmi atti a farlo funzionare.
Puramente a titolo informativo, riporto che ho deciso di utilizzare il computer "meno potente" come "head" del mio cluster per poterne apprezzare appieno l'efficacia ma cio', non e' particolarmente importante in quanto sara' sempre possibile decidere quale percentuale di carico di lavoro assegnare ad ogni altro elaboratore che lo compone tramite i tools di "OpenMosix".
Per praticita', d'ora in avanti, stabiliremo che gli altri PC saranno chiamati sequenzialmente "nodo1", "nodo2" e "nodo3". Ovviamente, potrebbe far piacere a tutti poter avere una connessione con la rete esterna alla nostra (in poche parole Internet) ma, per fare questo, ho deciso di utilizzare un quinto computer che ho chiamato "gateway" (un firewall / gateway esterno e non facente parte del cluster) che ho collegato insieme agli altri tramite lo switch ed una scheda di rete con il forwarding dei pacchetti abilitato, ed alla rete esterna tramite un banalissimo modem "56k". Le premesse sono state fatte... diamo inizio alle danze!

Scelta della distribuzione

Senza troppi dubbi, dopo innumerevoli prove, la distribuzione che ha servito meglio a questo scopo per semplicita' e velocita' di configurazione e' stata la mitica e massiccia "Slackware" nella versione "10.2".

ATTENZIONE: la procedura d'installazione del sistema e dei vari pacchetti che vedremo nel corso di questa guida, e' da ripetersi per ogni singolo elaboratore che intendiamo far diventare parte del nostro cluster.

PASSO 1: Partizionamento

Partiamo col collegare al primo computer ("head") un monitor, una tastiera, un mouse e, a meno che non si intenda procedere con un'installazione via NFS (Network File System), un lettore CD-Rom nel quale andremo ad inserire il primo CD d'installazione della distribuzione e dal quale faremo partire la procedura; al prompt (se non abbiamo particolari esigenze), premiamo semplicemente [INVIO]. Al termine del boot del sistema, ci verra' richiesto di selezionare la tastiera adatta alle nostre esigenze (nel nostro caso quella italiana) e poi effettuare il login, quindi digitiamo :

slackware login: root
[INVIO]

Iniziamo ora col partizionare il nostro hard-disk (potete farlo come preferite, io ho semplicemente creato una partizione di swap da 128Mb all'inizio del disco ed ho assegnato lo spazio rimanente a "/") :

#fdisk /dev/hd[x]
[INVIO]

...dove [x] cambia chiaramente a seconda del controller e della posizione che abbiamo dato al nostro hard-disk nel sistema. Poi :

Command (m for help): p
[INVIO]

Se la nostra tabella delle partizioni ci piace cosi' com'e', con un semplice :

Command (m for help): q
[INVIO]

... usciamo ed andiamo oltre, caso contrario, cancelliamo tutte le partizioni come segue :

Command (m for help): d
[INVIO]	
Command (m for help): 1
[INVIO]
Command (m for help): d
[INVIO]
Command (m for help): 2
[INVIO]

... continuando cosi' finche' non avremo ripulito completamente la tabella delle partizioni. A cosa fatta, andiamo a crearci le nostre :

Command (m for help): n
[INVIO]
Partition number (1-4): 1
[INVIO]
First cylinder (1-xxx, default 1):
[INVIO]
Last cylinder or +size or +sizeM (1-xxx, default xxx): +128M
[INVIO]	
Command (m for help): t
[INVIO]
Partition number (1-4): 1
[INVIO]
Hex code (type L to list codes) : 82
[INVIO]
Command (m for help) : n
[INVIO]
Partition number (1-4): 2
[INVIO]
First cylinder (xx-xxx, default xx):
[INVIO]
Last cylinder or +size or +sizeM (xx-xxx, default xxx):
[INVIO]
Command (m for help): a
[INVIO]
Partition number (1-4): 2
[INVIO]
Command (m for help): p
[INVIO]

Controlliamo che tutto sia OK, poi :

Command (m for help): w
[INVIO]

Una volta fatto questo, se abbiamo cambiato la tabella delle partizioni, e' sempre buona norma fare un reboot del sistema; personalmente non ho mai incontrato problemi, ma con dell'hardware un po' piu' datato del mio, ho notato che cio' e' fondamentale. Possiamo quindi riavviare il computer con la pressione di :

[CTRL] + [ALT] + [CANC]

PASSO 2 : Installazione

Dopo l'eventuale e consigliato reboot, ci verra' ripresentato di nuovo il solito prompt :

slackware login: root
[INVIO]

Ci troveremo di nuovo a dover impostare la nostra tastiera dopodiche', al successivo prompt, digiteremo :

#setup
[INVIO]

...ed andiamo al passo dell'installazione che ci permette di aggiungere la partizione di swap che abbiamo creato in precedenza scegliendo, dal menu che ci si presenta, la voce "ADDSWAP".
Selezioniamo ora la partizione adatta (che normalmente ci viene gia' proposta) e la formattiamo per far si che poi il sistema automaticamente la attivi e la monti.
Di seguito, tramite la tab "TARGET", andiamo a selezionare la partizione nella quale vogliamo installare il sistema per poi procedere con il verificare se quella proposta e' quella giusta, scegliere il tipo di filesystem da utilizzare (io personalmente non abbandono mai "reiserfs") ed infine formattarla. Il passo successivo, e' quello di determinare il supporto dal quale ricavare l'installazione per cui, nel nostro caso, avendo un CD-Rom a disposizione, faremo si' che il programma d'installazione imposti automaticamente quest'ultimo come sorgente.
Adesso dobbiamo decidere cosa installare; di default, ci troveremo selezionati tutti i pacchetti di maggior importanza che andranno controllati ed aggiunti e/o tolti a seconda delle nostre necessita'. Per quanto mi riguarda, trovo sia particolarmente importante installare anche il pacchetto "KDEI" che ci permettera', in futuro, di poter scegliere la lingua italiana come lingua predefinita nel desktop environment "KDE" (K Desktop Environment) se intendiamo utilizzare quest'ultimo desktop manager.
Fatto questo, si deve decidere che tipologia d'installazione adottare; personalmente, scelgo sempre la possibilita' di selezionare i pacchetti manualmente tramite la voce "menu" in quanto da' modo di poter avere un quadro abbastanza chiaro dei vari pacchetti che ci vengono proposti e fornisce anche una breve descrizione di questi ultimi senza per questo essere un metodo troppo dispendioso in termini di tempo.
Un attimo di attenzione: non e' scopo di questa guida fornire una spiegazione passo passo sull'installazione di un sistema GNU/Linux, pertanto sarebbe opportuno porre la massima attenzione a cio' che si sceglie di inserire od appoggiarsi a delle guide di riferimento, in quanto ci si potrebbe trovare con qualche pacchetto fonfamentale in meno e, di conseguenza, non riuscire a svolgere tutti i passaggi di seguito illustrati che sono vitali per poter, alla fine, godere di un cluster nuovo fiammante. Consiglierei a chi non si sentisse a suo agio con un'installazione a "menu" di Slackware, di rimandare la decisione di beneficiare di un cluster a giorni futuri, ma per coloro che si sentono particolarmente coraggiosi, posso dare delle linee guida da far rabbrividire i puristi; di seguito alcuni dettagli da includere assolutamente :

  • Tutti i compilatori ("gcc")
  • Tutte le librerie di sistema (anche quelle che non si conoscono)
  • Il sistema grafico "X" (almeno per il PC "head")
  • Tutte le cose che possano permettere un funzionamento impeccabile del protocollo TCP/IP
  • Il server "sshd"
  • KDE

...di seguito invece, alcune cose delle quali possiamo benissimo fare a meno nell'implementazione del nostro cluster o semplicemente servizi che possiamo non attivare :

  • Il sistema di stampa se consideriamo di non dover utilizzare una stampante
  • Il servente DNS
  • Il server DHCP (visto che gli indirizzi verranno assegnati in maniera statica)
  • Tutti i vari server di posta se intendiamo utilizzare quelli offerti da Internet

A questo punto, dopo un'attesa piu' o meno lunga, giungeremo alla fine dell'installazione dei pacchetti e la finestra seguente ci chiedera' quale kernel vogliamo installare per poter far funzionare il sistema; noi, sia per semplicita', sia perche' ci ha servito bene durante la procedura d'installazione, opteremo per quello che si trova nel CD d'installzione (il primo, nel caso in cui durante la procedura si sia dovuto inserire il secondo) e selezioneremo la voce "cdrom" indicandogli di installare il kernel chiamato "bare.i".
Di seguito, ci verra' chiesto se intendiamo creare un floppy di boot (cosa sempre buona da fare), rispondiamo ed andiamo avanti.
Il prossimo passaggio, sara' la configurazione del modem; noi, non ne abbiamo (come detto all'inizio, sarebbe il caso di non accedere ad Internet direttamente per mezzo del cluster ma utilizzare un PC come gateway), per cui selezioneremo la voce "no modem".
Andando oltre, ci vedremo chiedere se intendiamo attivare il sistema di "hotplug": essendo di vitale importanza, decidiamo di farlo rispondendo "yes" e proseguiamo (se si preferisce, si potrà sempre disabilitarlo in seguito, una volta sicuri che tutto funzioni, aggiungendo manualmente i moduli che ci servono agli script di avvio).
La successiva schermata ci propone l'installazione di "LILO" (LInux LOader) e, per ora, selezioniamo la modalita' d'installazione "simple" che va benissimo anche in considerazione del fatto che, in seguito, dovremo andare a modificarlo secondo le nostre esigenze.
Facendo un ulteriore passo avanti, ci verra' chiesto quale risoluzione video adottare durante la visualizzazione del bootstrap del sistema (se vogliamo cioe' attivare il "frame buffer" o meno); direi che la questione in oggetto non ci interessa particolarmente giacche', nell'utilizzo finale, non vedremo a schermo il boot di 3 computer su 4, per cui,selezioniamo semplicemente la voce "standard" ed andiamo oltre (anche quest'ultima impostazione, potra' essere cambiata in seguito tramite un apposito parametro da passare a LILO).
A questo punto, saremo interpellati per quanto riguarda la configurazione minimale di LILO e dovremo fargli sapere se il CD-Rom dal quale stiamo installando il sistema ci servirà in futuro anche come masterizzatore (o, se non questo, quale intendiamo utilizzare se ne abbiamo uno) o se, per esempio, il nostro bus di sistema e' superiore a 33Mhz, per cui dovremo inserire i parametri adatti a tale scopo (es. "hdc=ide-scsi" se mettiamo il masterizzatore come "master" nel secondo controller "IDE" (Integrated Drive Electronics) ecc. ecc. e "idebus=66" se supportato dalla nostra mainboard).
Di seguito, il programma d'installazione, ci chiedera' dove vogliamo installare LILO; personalmente, trovo che la cosa piu' sensata sia installarlo nell'"MBR" (Master Boot Record) in quanto sara' dall'hard-disk che il nostro sistema si dovra' avviare.
Andiamo poi a configurare il mouse e selezioniamo "ps/2" se abbiamo un semplice mouse senza rotellina, "imps/2" se invece disponiamo di un mouse con la rotellina e via dicendo.
Il prossimo passo ci portera' a scegliere se desideriamo o meno avere la possibilita' di effettuare il famoso "copia/incolla" anche dal terminale: siccome puo' tornare spesso comodo, decidiamo di rispondere "yes" ed attivare questa funzione.
Ora passeremo a configurare i servizi di base della rete; in questa fase, dovremo andare a configurare la nostra rete tenendo sempre a mente che tutto cio' che impostiamo in questa fase, potra' sempre essere cambiato in futuro con semplicita' ma che, se lo facciamo bene con un minimo d'attenzione da ora, dovremo lavorare un pochino meno in seguito... per cui, rispondiamo "yes" alla configurazione della rete e successivamente inseriremo il nome che abbiamo deciso di dare all'elaboratore che stiamo installando (abbiamo detto "head" e gli altri di seguito "nodo1", "nodo2" ...) ed andiamo avanti.
A questo punto dovremo scegliere un nome di domino (utilizzeremo come esempio "cluster") al quale far appartenere tutti i computer della nostra rete (a meno che per esigenze particolari non si debbano creare piu' sottoreti) e che dovra' essere uguale per tutti i nodi, compreso l'eventuale PC che ci dovra' fornire l'accesso ad Internet.
Nella schermata successiva dovremo selezionare la voce "static IP" in quanto per semplicita' e sicurezza abbiamo scelto, in precedenza, di assegnare un indirizzo di rete statico ai nostri nodi ed inseriremo quindi un indirizzo valido per una rete privata (es. 192.168.1.100 per "head", 192.168.1.101 per "nodo1", 192.168.1.102 per il "nodo2" e via dicendo) ed andiamo avanti.
Adesso, ci verra' chiesto l'indirizzo del gateway che ci dara' accesso ad Internet per cui, se lo abbiamo gia' predisposto, inseriremo quello, altrimenti ne sceglieremo uno che non intendiamo utilizzare per gli altri nodi del cluster ma che sara' l'indirizzo di rete esclusivo del computer "gateway".
Passiamo ora alla fase successiva; si tratta di attivare i servizi di rete che ci potranno interessare. Tra tutti, a mio riguardo, ho ritenuto utili :

  • "inetd"
  • "smbd"
  • "nfsd"
  • "sshd"

...e, nel caso si stia installando il computer "gateway", anche :

  • "ip_forward"

A questo punto la configurazione di rete e' completata e cio' ci agevolera' non di poco il lavoro futuro.
Nella prossima schermata, dovremo confermare di non voler testare nessun "font" di caratteri, selezionando "no" e procedendo oltre; ancora di seguito, dovremo dire al programma d'installazione che non ci troviamo in corrispondenza del "GMT" (Greenwich Mean Time) e scegliamo la zona geografica adatta ("Europe/Rome") per arrivare infine a decidere quale desktop environment adottare come default; nel mio caso ho scelto KDE.
E' quindi giunto il momento di scegliere una password per l'utente root e ci verra' chiesto di digitarla due volte per poter poi proseguire ed arrivare fino alla... "fine dell'inizio". La strada da percorrere e' ancora molto lunga, ma ora, ci troviamo con un sistema completo che dovrebbe essere in grado di riavviarsi con la pressione dei tasti:

[CTRL] + [ALT] + [CANC]

Scontato ripetere che la procedura appena descritta non e' altro che la semplice (o meno) installazione di Slackware e che va ripetuta per tutti i computer che intendiamo far diventare nodi del nostro cluster; modifichiamo a nostro piacimento soltanto la parte relativa alla configurazione di rete assegnando un nome ed un indirizzo IP (Internet Protocol) differente ad ogni elaboratore e facendo attenzione ad inserire lo stesso nome di dominio e lo stesso indirizzo del computer che fara' da gateway a tutti.
Andiamo per cui ad effettuare il primo reboot della macchina.

PASSO 3 : Configurazione dei servizi di bootstrap

Una volta che il sistema si e' riavviato e ci ha ripresentato il login, dobbiamo andare ad editare i vari file di configurazione e modificarli per poter snellire i futuri processi di bootstrap. Personalmente, ritengo fondamentale poter lavorare con un editor di testi basilare, leggero e veloce quale ad esempio "nano" che pero', purtroppo, non si trova nei CD d'installazione. Se anche voi la pensate come me, scaricate il pacchetto in formato ".tgz" da questo link ed andiamo ad installarlo con :

#installpkg nano-2.0.4-i486-1sl.tgz
[INVIO]

A questo punto siamo pronti; gli script che ci interessa modificare si trovano nella directory "etc/rc.d/" :

#cd /etc/rc.d/
[INVIO]

Diamo un'occhiata ai vari files che ci sono :

#ls
[INVIO]

Andiamo ora ad editare e commentare tutte le linee di codice che permettono l'attivazione di quei servizi che non ci interessa far partire durante il boot del sistema (ad esempio, inutile dirgli di far partire il database "mysql" se non lo abbiamo nemmeno installato cosi' come "Apache" ecc. ecc.) :

#nano rc.S
[INVIO]
#nano rc.6
[INVIO]
#nano rc.K
[INVIO]
#nano rc.M
[INVIO]
#nano rc.inetd2
[INVIO]
#nano rc.inet1
[INVIO]
#nano rc.inetd.conf
[INVIO]

Ovviamente non c'e' una regola precisa nella modifica degli script visti sopra ed esula anche dall'intenzione di questa guida, ma c'e' una considerazione da fare: a parte il nostro "head", sul quale verranno gestite la configurazione e le prestazioni dell'intero cluster e al quale collegheremo i nostri unici monitor, tastiera eccetera, degli altri nodi, una volta configurati a dovere uno per uno, non vedremo nemmeno i messaggi di bootstrap per cui, piu' quest'ultimo sara' snello e veloce, piu' sara' pratico e semplice l'utilizzo del cluster. Assicuriamoci di non aver commesso errori controllando che il sistema si riavvii senza intoppi; nel caso ce ne fossero, aiutiamoci leggendo con attenzione i messaggi che la nostra Slackware ci stampa a schermo e/o con il suo dettagliatissimo manuale.

PASSO 4 : Patching del kernel

Una volta appurato che tutto sia OK, possiamo cominciare con il cercare la versione del kernel che fa al caso nostro ed i pacchetti necessari. Il kernel che ci serve (l'ultima versione disponibile al momento in cui sto scrivendo) e' il "vanilla-kernel" scaricabile dal sito www.kernel.org nominato :

linux-2.4.26.tar.gz

o

linux-2.4.26.tar.bz2

I pacchetti invece che ci interessano, per poter far si' che il nostro sistema diventi un cluster "OpenMosix", sono :

openmosix-2.4.26-1.bz2

...e :

openmosix-tools-0.3.6-2.tar.gz

...con l'aggiunta di :

openmosixview-1.5.tar.gz

Andiamo ora a dare una breve spiegazione di ognuno di loro.
La versione del kernel che ci siamo scaricati e' quella alla quale si deve applicare l'ultima "patch" testata e stabile chiamata"openmosix-2.4.26.bz2" che permette, previa riconfigurazione del kernel stesso, di abilitare tutte quelle voci che rendono possibile avere la piena funzionalita' che un cluster "OpenMosix" offre.
Il secondo pacchetto invece, come anche il nome stesso lascia intuire, "openmosix-tools", serve a fornire tutti quegli strumenti coi quali possiamo amministrare e configurare al meglio, da linea di comando, il nostro cluster. E' grazie a questi infatti, che ci potremo sbizzarrire a far "girare" un determinato processo su di un elaboratore anziche' su un altro o, semplicemente, monitorare cosa stia facendo il nostro super-computer in un determinato momento.
L'ultimo pacchetto che ci siamo procurati, invece, altro non e' che l'interfaccia grafica degli strumenti di amministrazione visti in precedenza grazie al quale ci sara' possibile gestire il cluster anche dai nostri ambienti grafici preferiti (nella fattispecie, "openmosixview" si appoggia alle librerie "QT", le native di KDE) e considerare il tutto come un gioco entusiasmante. Ma passiamo alla pratica.
Portiamoci nella directory che dovra' contenere i sorgenti del kernel con un :

#cd /usr/src/
[INVIO]

Qui, se durante la fase di installazione del sistema abbiamo deciso di metterci anche i sorgenti del kernel "bare.i", troveremo una directory (oltre ad eventuali altre) chiamata "linux-2.4.31" ed un link chiamato "linux" che punta alla directory in questione; controlliamo cio' con un :

#ls -all
[INVIO]

Una volta individuato il link "linux", rimuoviamolo, in quanto avremo bisogno di crearne uno nuovo che dovra' puntare alla directory che si creera' quando andremo a decomprimere l'archivio coi sorgenti del kernel che abbiamo scaricato, quindi :

#rm linux
[INVIO]

Ora, supponendo che ci siamo ritrovati coi pacchetti depositati nella directory "/root/", occorrera' eseguire :

#tar -xvzf /root/linux-2.4.26.tar.gz
[INVIO]

...oppure :

#tar -xvjf /root/linux-2.4.26.tar.bz2
[INVIO]

Una volta fatto cio', bisognera' provvedere a ricreare il link che avevamo tolto in precedenza e lo faremo puntare alla nuova directory che si e' creata :

#ln -s /usr/src/linux-2.4.26 linux
[INVIO]

A questo punto, siamo pronti a fare il passo che ci avvicinera' in maniera irreversibile verso la messa in opera del nostro cluster; dobbiamo "patchare" i sorgenti che abbiamo scompattato e "linkato" con il file "openmosix-2.4.26-1.bz2". Per farlo, procederemo copiando nella directory contenente i sorgenti del kernel in questione, il file di cui sopra :

#cp /root/openmosix-2.4.26-1.bz2
[INVIO]

Dopodiche', per applicare la patch, dovremo entrare nella directory del nostro nuovo kernel digitando :

#cd linux
[INVIO]

...e di seguito opereremo in questo modo :

#bzcat openmosix-2.4.26-1.bz2 | patch -Np1
[INVIO]

Il gioco e' fatto; ora, non dobbiamo fare altro che andarci a ricompilare a dovere il nostro bel kernel; la patch che abbiamo appena applicato, sara' presente nel menu della riconfigurazione come prima voce della lista (chiamata, ovviamente, "OpenMosix").
Procediamo con la normale ricompilazione con :

#make mrproper
[INVIO]

...poi :

#make menuconfig
[INVIO]

Successivamente, entriamo all'interno della voce che ci interessa ed abilitiamo le seguenti opzioni :

[ * ] openMosix process migration support
[   ] Support clusters with a complex network technology
[   ] Stricter security on openMosix ports
( 3 ) Level of process-identity disclosure (0-3)
[ * ] Poll/Select exceptions on pipes
[   ] Disable OOM killer
[ * ] Enable Extension: Local Time

FATE ATTENZIONE! Le opzioni attivate sotto la voce "openMosix" devono tassativamente essere le stesse per tutti i nodi che compongono il cluster !!!

Ovviamente, quelle riportate sopra, sono le opzioni che ho attivato io, in base alle mie esigenze; purtroppo, anche per quanto riguarda la scelta delle opzioni per "OpenMosix", vale la stessa regola che vale in generale quando si va a ricompilare un kernel, ossia la conoscenza del proprio hardware, la propria rete, la consapevolezza delle proprie esigenze eccetera, per cui e' impossibile stabilire una linea guida generale che possa andare bene a tutti indistintamente.
Una volta esserci assicurati di aver eseguito tutto a dovere usciremo dal "menuconfig" rispondendo "yes" alla richiesta di salvataggio della configurazione e procederemo come da manuale con :

#make dep
[INVIO]

...poi :

#make clean
[INVIO]

...quindi :

#make bzImage
[INVIO]

Di seguito creeremo i moduli (se abbiamo scelto di abilitarli) :

#make modules
[INVIO]

...ed andremo ad installarli con :

#make modules_install
[INVIO]

A questo punto, copiamo l'immagine creatasi nella directory di boot ("/boot/") :

#cp arch/i386/boot/bzImage /boot/cluster
[INVIO]

...e successivamente, controlliamo che nella directory "/boot/" non ci sia gia' un file od un link chiamato "system.map" :

#ls -all /boot/
[INVIO]

Nel caso fosse un semplice link, possiamo rimuoverlo con :

#rm /boot/system.map
[INVIO]

Se al contrario si trattasse di un file vero e proprio, sarebbe bene non liberarsene definitivamente ma rinominarlo in qualcosa di differente (diciamo "old_system.map" ad esempio) :

#mv /boot/system.map /boot/old_system.map
[INVIO]

A questo punto siamo pronti a copiarci il nostro :

#cp system.map /boot/
[INVIO]

Fatto cio', andiamo ad editare il file di configurazione d'avvio per aggiungerci la possibilita' di avviare il kernel "OpenMosix" che abbiamo appena creato :

#nano /etc/lilo.conf
[INVIO]

...e alla fine, ci aggiungeremo le seguenti linee :

...
image = /boot/cluster
root = /dev/hdX
append = "hdX=ide-scsi idebus=66"
label = kernel_mosix
read-only

Usciamo dall'editor controllando di non aver fatto alcun danno con :

#lilo -t
[INVIO]

...e se l'output del precedente comando non ha dato errori, procediamo con :

#lilo -v
[INVIO]

...seguito da un incrocio di mani a mo' di preghierina e da un bel :

#reboot
[INVIO]

Il computer, con immensa paura da parte nostra, si riavviera', noi selezioneremo al prompt di LILO il nostro kernel che abbiamo chiamato "kernel_mosix" nuovo fiammante e, visto che la compilazione e' stata perfetta, ci ritroveremo al prompt di login in me che non si dica!

PASSO 5 : Installazione di OpenMosix

Effettuiamo il login come root ed andiamo ad installare ora i tools precedentemente scaricati che ci permetteranno di amministrare il cluster. Faremo :

#cd /usr/src/
[INVIO]

...ed una volta li' :

#tar -xvzf openmosix-tools-0.3.6-2.tar.gz
[INVIO]

...dopodiche', come da prassi, per l'installazione di un semplice programma procederemo con lo spostarci all'interno della directory che il precedente comando ha creato con :

#cd openmosix-tools
[INVIO]

...ed impartiremo :

#./configure --with-kerneldir=/usr/src/linux-2.4.26
[INVIO]

...creeremo l'eseguibile :

#make
[INVIO]

...e lo installeremo con :

#make install
[INVIO]

...e, visto che non fa mai male aggiornare le librerie di sistema dopo aver installato qualche pacchetto, lanceremo :

#ldconfig
[INVIO]

PASSO 6 : Configurazione di OpenMosix

Se tutto e' andato bene fin qui, dobbiamo fare gli ultimi ritocchi ai vari file di configurazione.
Tenendo conto che la procedura d'installazione del sistema, del kernel "OpenMosix" e dei tools di amministrazione fin qui visti e' la medesima per ogni nodo del cluster, dobbiamo andare a modificare il file "/etc/hosts" in modo che risulti uguale in tutti i nodi; per farlo, procederemo cosi' :

#nano /etc/hosts
[INVIO]

...ed il file (sempre considerando che durante l'installazione dei sistemi abbiate tenuto conto di questa guida) dovra' contenere le seguenti linee :

...
127.0.0.1       localhost
192.168.1.100	head.cluster head
192.168.1.101	nodo1.cluster nodo1
192.168.1.102	nodo2.cluster nodo2
192.168.1.103	nodo3.cluster nodo3
...

Ora, per avere una visione d'insieme, portiamoci nella directory "/etc/" :

#cd /etc/
[INVIO]

...e quindi :

#ls
[INVIO]

Come possiamo vedere, troveremo nella directory un file chiamato "openmosix.map" ed, editandolo, andremo ad aggiungervi alla fine della parte commentata, le seguenti righe di configurazione :

...
1       head    1
2	nodo1	1
3	nodo2	1
4	nodo3	1
...

Chiudiamo l'editor salvando il file e ricordiamoci che questo file, come anche il precedente, dovra' essere identico per tutti i nodi.
A questo punto, andiamo ad editare anche l'ultimo file di configurazione per fare in modo che automaticamente, all'avvio, ogni singolo elaboratore, entri a far parte del nostro cluster; per fare questo, aggiungeremo il comando corrispondente allo script "/etc/rc.d/rc.local" :

#nano rc.d/rc.local
[INVIO]

...ed inseriamoci il comando :

...
setpe -w -f /etc/openmosix
...

OK, a questo punto possiamo riavviare tutti i computer e, se tutto e' stato fatto a dovere, il nostro cluster sara' gia' funzionante appieno ed i processi liberi di migrare da un nodo all'altro.

PASSO 7 : Testiamo il cluster

Grazie agli "openmosix-tools" precedentemente installati, possiamo gia' cominciare a giocare con la nostra nuova fiammante "cluster-mega-linux-box". Ad esempio, lanciando in locale il comando "mosmon" :

#mosmon
[INVIO]

...potremo visualizzare una schermata che ci tiene aggiornati sul carico del nostro cluster, permettendoci di visualizzare il dettaglio di ogni nodo appartenente ad esso sull'ascissa del grafico ed il relativo carico sull'ordinata; altro simpatico strumento di gioco e' il comando che permette di far migrare una determinata applicazione su di un nodo differente rispetto a quello in cui sta girando in questo momento, ad esempio :

#migrate [xxx] nodo3
[INVIO]

...dove "[xxx]" sta per il "pid" (Process Identification Number) del processo che si vuole far migrare. Da notare che non tutti i processi, ovviamente, hanno la possibilita' di migrare. Ad esempio, l'applicativo "Grip" che permette di codificare i CD audio in "MP3", non potra' migrare in quanto ha bisogno di interagire con il lettore CD/DVD per poter estrarre le tracce. Al contrario, migrera' "LAME" che e' appunto l'applicazione che effettua la codifica da traccia audio ad "MP3"!.
Felici ed entusiasti di aver ottenuto cio', c'e', pero', un appunto da fare; tutto questo e' gia' molto bello di per se, ma le impostazioni di default non e' detto che conoscano ed abbiano settato al meglio tutti i nodi (anche se probabilmente sara' cosi'). Nel caso in cui, ad esempio, avessimo un nodo molto piu' potente rispetto al nostro "head" (sul quale mettiamo si stia lavorando) quanto a quantitativo di memoria e velocita' della CPU, potremmo desiderare che la maggior parte dei processi che andremo a lanciare, migrino sul nodo in questione almeno fino al suo utilizzo massimo. Per fare questo, ci affideremo ancora una volta ai tools "OpenMosix" :

#mosctl getspeed
[INVIO]

...che, se lanciato in locale, ci dara' come output un valore numerico rappresentante la "velocita'" che "OpenMosix" ha stabilito per l'elaboratore sul quale stiamo lavorando.
N.b.: questa "velocita'" non e' una vera e propria velocita' ne' di rete, ne' di elaborazione, ma semplicemente un valore che permette di impostare la priorita' di un nodo rispetto agli altri.
Se non ci piace, possiamo variarla settando un valore piu' alto o piu' basso, dopo aver analizzato anche gli altri, con il comando :

#mosctl setspeed [n]
[INVIO]

...dove [n], sara' appunto il valore in questione che sceglieremo.

PASSO 8 : Configurazione mediante interfaccia grafica

Allora, se tutto cio' ci ha reso felici a sufficienza, interrompiamo il momento di svago e passiamo adesso a configurare un sistema di gestione dei settaggi del nostro cluster con il supporto dell'interfaccia grafica. Non che non sia abbastanza efficiente tutto quello che abbiamo visto fin qui, ma poterlo fare semplicemente spostando delle levette (proprio come se fosse un mixer audio) oppure cliccando su un bottone, e' certamente piu' comodo, pratico e soprattutto bello.
Per fare questo, dovremo ritornare dove abbiamo precedentemente deciso di scompattare i sorgenti che installiamo; per cui procederemo cosi':

#cd /usr/src/
[INVIO]

...e lanceremo di nuovo :

#tar -xvzf /root/openmosixview-1.5.tar.gz
[INVIO]

Al solito, il precedente comando avra' creato la directory corrispondente al pacchetto da installare e noi dovremo portarci al suo interno per poter intanto configurare i sorgenti nel solito seguente modo :

#cd openmosixview-1.5
[INVIO]

...e di seguito :

#./configure
[INVIO]

Dovrebbe essere andato tutto per il meglio, per cui insistiamo con un :

#make
[INVIO]

...ed ancora :

#make install
[INVIO]

Per rifinire e concludere il tutto :

#ldconfig
[INVIO]

A questo punto, se tutto e' andato bene (e mi auguro che lo sia), dovremmo poter lanciare il programma con un semplicissimo comando :

#openmosixview &
[INVIO]

Impressionante vero? Purtroppo pero' (c'e' sempre un pero'!), ci accorgeremo ben presto che, se tentassimo di impostare la famosa "velocita'" vista in precedenza in maniera da settare la priorita' di un nodo rispetto ad un altro a nostro piacimento, ci apparira', in basso a sinistra nella finestra, una dicitura del tipo "cannot set speed on 192.168.1.101" e la levetta, di cui sopra, tornera' impietosamente indietro... questo non e' buono, per cui decidiamo di chiudere il programma.
Il problema che si viene a creare e' dovuto al fatto che quest'ultimo, di default, ha bisogno di sapere "come" deve comunicare con gli altri nodi. Per ragioni di sicurezza e per praticita' (visto che in rete c'e' abbondante documentazione a riguardo) decidiamo che lo scambio di informazioni con gli altri computer, debba avvenire tramite il famosissimo "SSH".
Per fare questo, la procedura piu' semplice (non l'unica, non la migliore) e' di impartire il seguente comando :

#ssh-keygen -t rsa
[INVIO]

Il programma "ssh-keygen", ci chiedera' una passphrase; digitiamola correttamente e ripetiamola se preferiamo, altrimenti facciamo semplicemente due volte [INVIO] senza inserirne alcuna. Quest'ultimo comando ci permette di creare una "chiave" (una sorta diciamo di "file di riconoscimento") che, una volta salvata in locale e copiata in remoto nei vari nodi, garantisce che l'identita' di chi sta cercando di comunicare da un nodo all'altro, sia la nostra, per cui non ci verra' richiesta nessuna password per l'autenticazione (anche in considerazione del fatto che tramite il programma non potremmo fornirla).
Per far cio', procederemo con :

#scp /root/.ssh/id_rsa.pub nodo1:/root/.ssh/authorized_keys2
[INVIO]

...e ripetere il commando dato sopra per ogni singolo nodo. Andremo quindi a farlo anche per l'"head" stesso con :

#cp /root/.ssh/id_rsa.pub /root/.ssh/authorized_keys2
[INVIO]

...ed il gioco e' fatto! Controlliamo che tutto vada come dovrebbe tentando di effettuare un login in remoto o semplicemente rilanciando :

#openmosixview &
[INVIO]

Ora, dovremmo poter settare le differenti velocita' di ogni nodo (ivi compreso il nostro) e tante altre cose tramite interfaccia grafica.
Preciso a questo punto che l'installazione del pacchetto "openmosixview", non sara' necessaria su quei nodi che intendiamo utilizzare senza il server grafico "X".

PASSO 9 : Considerazioni finali

Le considerazioni che potremmo fare sulle ottimizzazioni da apportare al nostro cluster "OpenMosix" sono molteplici: a partire dagli applicativi da utilizzare per sfruttarlo al meglio, fino ad arrivare alle varie configurazioni di rete che potremmo implementare. Leggevo proprio l'altro giorno documentazione che prendeva in esame proprio quest'ultimo punto. A quanto pare (ed e' anche facilmente immaginabile) un cluster che abbia i vari nodi connessi in modalita' "P2P" (peer-to-peer), rende molto di piu' in termini di migrazione dei processi (e quindi di resa generale delle elaborazioni) rispetto ad un cluster configurato tramite switch soprattutto se la rete in oggetto e' a 100Mb. E' chiaro che la configurazione "P2P" comporta dei limiti quali, ad esempio, il numero massimo di dispositivi ethernet configurabili in ciascuno dei nodi che dipende direttamente dal numero di slots PCI disponibili sulle mainboards (sebbene esistano in commercio delle meravigliose schede ethetrnet con 4 o piu' porte anche "Gigabit").
Se fate esperimenti in proposito fatemi sapere, sarebbe interessante scambiarci informazioni ed esperienze a riguardo!

Buon divertimento!

Versione in PDF

Autore : Juri Carlini

e-mail : eth0@slacky.it

Altri link

Wake On LAN

Personal tools