(NdR: questa volta è il turno di Maurizio Bertadoni, che ringrazio, a scendere in campo con il suo tutorial per la sfida del mese con tanto di iPod in palio.
Maurizio, nella mail che accompagna questo tutorial, mi scriveva che l'argomento trattato, decisamente complesso oltre la semplice installazione di un software, meriterebbe ulteriori approfondimenti. Ovviamente non posso che essere d'accordo, sarebbero i benvenuti, e non credo di essere l'unico a pensarla così! :-)
La sfida per l'iPod nano continua...
rob
OCS Inventory NG su Mac OS X - Cosa è sta roba?In figura, il mio Mac, inventariato:
Ocs inventory è composto da 2 parti, una parte server e una parte agent. La parte server di Ocs Inventory è strutturata a 3 tier (ossia è spezzabile in 3 pezzi).
Un pezzo è il communication server, che scambia i dati con l'agent (installato su ogni apparato).
Il communcation server concentra i dati sulla macchina e li inserisce in un database
Un altro pezzo è il deployment server,ossia una macchina che può avere un repository di files che si possono installare nella propria rete.
L'ultimo pezzo è l'application server, ossia l'interfacccia di Management di questo prodotto.
Sono tre ? si.
Vedi figura per chiarimenti

Il prodotto è un'accoppiata di apache, perl, php e mysql.
L'agent, disponibile anche per Macosx, è un pacchetto che analizza la macchina e invia i dati al server.
Su macchine windows è disponibile sotto forma di agent stand-alone, o in formato services. (ovviamente la parte win non la cureremo, ma è d'obbligo segnalare che il prodotto si integra perfettamente con Active Directory e Gpo, documentazione sul sito ufficiale)
Ufficialmente, come ho in scritto poco sopra, la parte server di OcsInventory NG NON funziona su MacOSX.
Siccome spesso e volentieri vivo in una realtà dove l'interoperabilità sembra
una chimera, mi sono messo qui e oggi vi racconto come ho fatto a far funzionare
questo prodotto sul mio Mac.
Ecco che qui entriamo noi, con il nostro tutorial.
**** Attenzione il tutorial è stato scritto e testato su piattaforma intel, tuttavia non vedo problemi ad effettuare la stessa installazione su piattaforma powerpc ****
Requisiti mentali:
Requisiti software:
Analisi del problema
Al primo sguardo potremmo dire che OCS Inventory ng è un prodotto basato in
architettura AMP (Apache, Mysql,Php) e che quindi con una liscia installazione
di MAMP possa funzionare, tuttavia non è così.
Il validissimo prodotto (MAMP) ha purtroppo gravi problem di compatibilità con
alcuni moduli perl, inoltre non viene distribuito apache con mod_perl configurato.
Quindi dobbiamo ricorrere al metodo Tafazzi (vedi figura)

Ossia,
Peccato per MAMP
Beh, MAMP è stra-utilizzato per ragioni di comodità, certo è che dovremo andare
ad effettuare delle modifiche su alcuni file, il pacchetto però è separato dal
sistema operativo quindi garantisce di non andare ad intaccare alcun file.
Problema cruciale: MAMP non ha mod_perl quindi siamo costretti al metodo tafazzoso.
Sto però testando la possibilità di farlo funzionare con XAAMP per macosx, che
invece supporta perl, in caso andremo ad integrare questa breve (???) guida.
Realizzazione del progetto
Fase 1: Creazione ambiente appropriato
Alcune note "tecniche", quando il carattere è in stile "Terminale", significa
che bisogna digitare queste righe in terminale.( e in questa riga, si riassumono
tanti concetti della vita).
Va da sè che ad ogni fine riga ci sia un "invio".
Apriamo terminale, o una console e digitiamo:
cd /etc/httpd/
poi digitiamo
sudo mkdir conf.d
se ci viene chiesta la password inseriamola, e a questo punto digitiamo
sudo chmod 755 conf.d
Cosa abbiamo fatto ?
Abbiamo creato la possibilità per il sistema di aggiungere file di configurazione
ad apache.
Cioè abbiamo creato una cartella che il server web leggerà per caricare eventuali
altri file di configurazione, che vogliamo tenere separati dal classico httpd.conf
Fase 2: Modifiche a httpd.conf
Adesso apriamo con diritti di root il file httpd.conf (io uso vi), sempre da Terminale digitiamo
sudo vi httpd.conf
innanzitutto andiamo a commentare php (se abilitato) di sistema, quindi commentiamo,
mettendo dei cancelletti in questo modo le linee 240 e 284.
Su vi, sarà sufficiente premere il tasto i (di insert) e inserire le modifiche,
poi schiacciare "esc"
#LoadModule phnormale_module libexec/httpd/libphnormale.so
#AddModule mod_phnormale.c

e decommentiamo, togliendo i cancelletti la 239 e la 283
Su vi, sarà sufficiente premere una x, sul cancelletto
LoadModule perl_module libexec/httpd/libperl.so
AddModule mod_perl.c

poi andiamo infondo al file, scorrendo e aggiungiamo in fondo al file la seguente
riga.
Su vi, sarà sufficiente premere il tasto i (di insert), aggiungere la linea,
poi schiacchiare "esc"
Include /etc/httpd/conf.d/

salviamo e usciamo.
Su vi, si digita
:wq!
Molto bene. Cosa abbiamo fatto?
Abbiamo disabilitato il php di sistema, perchè ha dei problemi a funzionare
con questa versione del pacchetto. Inoltre abbiamo specificato che vogliamo
attivare il mod_perl, ossia un modulo che interfaccia direttamente degli script
in perl con il server web.
Infine abbiamo aggiunto una riga di Include che specifica dove ci sono altri
file di configurazione da leggere (questa riga è in simbiosi con la fase 1)
Fase 3: Download e installazione di Mysql + smandruppamenti
Ci scarichiamo dal sito di Mysql, l'ultima versione di mysql per Mac in formato pkg (http://dev.mysql.com/downloads/mysql/5.0.html#macosx) come in figura, sono solo 60mega, in fondo. :D
installiamo Mysql, via pkg.
Io a questo punto utilizzo molto MysqlAdministrator, che è un pacchetto che
si può scaricare da qui http://dev.mysql.com/downloads/gui-tools/5.0.html
Modifiche
a Mysql
Apriamo Terminale e digitiamo
cd /usr/local/mysql/lib
sudo mkdir mysql
Se viene richiesta la password,digitarla e premere invio
sudo cp ../* .
Dobbiamo effettuare questa operazione per un bug che sbaglia i percorsi delle librerie...come dire, lo freghiamo di brutto.
Cosa abbiamo fatto?
Abbiamo installato una versione aggiornata di Mysql, e abbiamo copiato le librerie
di mysql, in un'altra directory perchè un modulo di perl ha un bug nella gestione
dei percorsi.
Fase 4: Download di Ocsinventory-ng
Evviva, potete andare a cenare. Oppure continuare.
A sto punto ci scarichiamo il prodotto OCS, ovviamente la versione per linux
http://prdownloads.sourceforge.net/ocsinventory/OCSNG_LINUX_SERVER_1.01.tar.gz?download
Il pacchetto è in formato tar.gz
Decomprimiamo il pacchetto di OCS, anche sulla scrivania e a questo punto
dobbiamo modificare lo script setup.sh
Per chi ha un po' di conoscenza di bash, questo è uno script abbastanza semplice,
andiamo a vedere.
Fase 5: Correzione di setup.sh
Lo script setup.sh si preoccupa di andare a verificare se il sistema è in grado
di supportare il prodotto, ed effettua alcune modifiche ai file di apache, inoltre
installa l'administration console e il communication server.
Lo modifichiamo con un editor di testo un po' avanzato, almeno con la sintassi
colorata: io propendo per smultron, che è pure opensource ,oppure textwrangler,
oppure pico, oppure vi,o quello che volete.
Andiamo a modificare le linee 91 e 92 dove viene specificato mysql.
Ovviamente Mysql non esiste nel path principale di sistema, ma il suo binario
è in una cartella diversa cioè /usr/local/mysql/, quindi andiamo a specificarlo
come in figura.
A questo punto rimane da commentare solamente altre righe, che vanno a modificare
il logrotate, che a noi non interessa.
Commentiamo quindi in stile bash ( con un cancelletto ) le righe dalla 795 alla
818 come in figura.
salviamo e chiudiamo setup.sh
[page_break]Fase 6: Compilazione moduli perl
A questo punto possiamo iniziare a compilare i moduli di perl che ci interessano.
Anche qui ci sono 2 strade possibili:
io ho adottato la prima soluzione.
Spieghiamo:
cpan è una utility che consente di installare i moduli di perl, essenzialmente
si connette ad un repository di moduli, prende la versione più aggiornata di
un modulo, la scarica, la compila e la installa.
Noi dobbiamo installare un po' di moduli.
Ad eventuali domande di pacchetti che richiedono dipendenze rispondiamo di sì,
oppure premiamo invio, su questi pacchetti non abbiamo bisogno di condizioni
speciali.
Nota su darwinports,fink e varie:
non ho scelto questo modo, perchè non sono sicuro che questi pacchetti si integrino
con il perl di sistema, anzi, spesso creano in /opt/local/ le proprie versioni
di perl, inoltre almeno un modulo necessita di compilazione manuale.
Andiamo quindi ad installare in questo modo:
- Apriamo Terminale
Se avete già utilizzato cpan, non dovrebbero esserci problemi, altrimenti il
sistema di cpan, potrebbe farvi alcune domande, rispondete alle domande che
vi vengono poste, per il setup iniziale.
digitiamo:
sudo cpan -i Compress::Zlib
se il pacchetto non dà errori, procediamo con
sudo cpan -i DBI
se il pacchetto non dà errori, procediamo con
sudo cpan -i Net::IP
se il pacchetto non dà errori, procediamo con
sudo cpan -i Apache::DBI
se il pacchetto non dà errori, procediamo con
sudo cpan -i XML::Simple
XML chiederà di installare anche XML::Namespaces, XML::Sax, XML::Sax-Expat,
XML::Parser
Bene, siamo a metà del lavoro.
Adesso arriva la parte difficile, sono 2 moduli un po' ostici, uno è SOAP::Lite,
mentre l'altro è DBD::Mysql
Iniziamo da SOAP::Lite
sudo cpan -i SOAP::Lite
Il sistema lavorerà per un po', se va tutto bene,meglio, è facile però che
il sistema si fermi sul make-test perchè trova alcune incongruenze.
Per risolvere la cosa, forziamo un po' il sistema.
Digitiamo
sudo su
inseriamo la nostra password
**** Ora state lavorando come root quindi occhio a cosa fate ****
Ci spostiamo nella cartella /var/root/.cpan/build/
cd /var/root/.cpan/build/
cerchiamo una cartella che si chiamerà SOAP-Lite-x.xx ed entriamo
cd SOAP-Lite*
a questo punto diamo un
make
seguito da
make install
Non dovrebbero esserci errori, quindi digitiamo
exit
Fase 7: Installazione di DBD::mysql
Io a questo punto andrei a dormire.
Comunque vediamo l'ostacolo più duro, DBD::mysql
Scarichiamo manualmente il modulo da qui http://search.cpan.org/CPAN/authors/id/C/CA/CAPTTOFU/DBD-mysql-4.004.tar.gz
Torniamo su terminale e digitiamo
sudo su
inseriamo la nostra password
**** State lavorando come root quindi occhio a cosa fate ***
Ci spostiamo nella cartella /var/root/.cpan/build/
cd /var/root/.cpan/build/
ci copiamo dalla scrivania il file
cp /Users//Desktop/DBD-mysql-4.004.tar.gz .
a questo punto decomprimiamo
tar fxvz DBD-mysql-4.004.tar.gz
cerchiamo una cartella che si chiamerà DBD-mysql-x.xx ed entriamo
cd DBD-mysql*
capiamo cosa stiamo facendo: stiamo configurando a mano il pacchetto, andando a specificare dove si trovano le librerie di mysql, che cpan cercherebbe da altre parti.
digitiamo quindi
perl MakeFile.PL --mysql_config=/usr/local/mysql/bin/mysql_config
seguito da
make
a questo punto effettuiamo un bel
make test
Fase 8 : Possibili errori in fase di compilazione di DBD::mysql
nel dare make test, gli errori comuni sono 2:
1) Soluzione a "non trova il socket di mysql" , errore Can't connect to local MySQL server through socket '/tmp/mysql.sock'
Un po' incasinato da risolvere, per un sacco di problemi. Allora, io ho risolto
così.
Innanzitutto, il file di sock, è un file che utilizzano sia php che perl che
altri programmi per collegarsi all'istanza del database, quindi una sorta di
"device di database", il sock ci dice che il pacchetto sta funzionando ed è
attivo e possiamo connetterci a lui tramite questo file.
Dal 10.4 c'è un po' di casino sul "DOVE deve stare sto cavolo di mysql.sock"
?
Alcuni l'hanno sempre visto in /var/mysql/mysql.sock , altri sostengono che
debba stare in /tmp/mysql.sock
Io sono di derivazione *nix, quindi l'ho messo al suo posto ossia in /var/mysql/mysql.sock,
poi, per non saper nè leggere nè scrivere ho inserito un bel soft-link tra i
due.
C'è anche un articolo di Tevac su questo problema: http://www.tevac.com/article.php/2006012513085364
cd /etc/
sudo vi my.cnf
e inserisco in my.cnf
[mysqld]
socket=/var/mysql/mysql.sock
salvo ed esco.
A questo punto:
sudo mkdir /var/mysql/
chmod 755 /var/mysql/
a sto punto abbiamo detto a mysql, che il suo socket è in /var/mysql/. Questo
serve per OCS, però non possiamo scontentare nessuno in fatto di socket, quindi
andiamo nella cartella /tmp
R avviamo mysql, io utilizzo MySQL Administrator
cd /tmp
sudo ln -s /var/mysql/mysql.sock mysql.sock
2 ) Soluzione a "ha problemi di connesione"
make test vuole che ci sia un utente root senza password, grazie.
Quindi provvediamo a resettare temporaneamente la pwd di root su mysql, io uso
MySQL Administrator
Se il make test passa senza problemi potete dare un bel
make install
se il make non dovesse andare a buon fine, segnate l'errore e segnalatemelo.
se invece va tutto a buon fine dovremmo esserci, da adesso in poi la strada
è decisamente in discesa.
digitiamo
exit
Fase 9 : Installazione del pacchetto
Sempre da terminale digitiamo
cd ~/Desktop/OCS*
ed ora facciamo partire il famoso setup.sh che abbiamo modificato inizialmente
potrebbe chiedervi dove si trova il binario di apache digitate
/usr/sbin/httpd
potrebbe chiedervi dove si trova il file di configurazione di apache digitate
/etc/httpd/httpd.conf
quando vi verrà richiesto quale utente utilizza, digitate www, e per il gruppo
digitate www
Se vi chiede dove si trova l'include rispondete digitando
/etc/httpd/conf.d/
A questo punto lo script controlla se mancano moduli perl, se si ferma annotate il pacchetto che manca ed installatelo sempre nella solita modalità
sudo cpan -i
Alle domande rispondiamo sempre yes, quando ci viene chiesta la DocumentRoot, digitiamo
/Library/WebServer/Documents
e dovreste esserci, viene richiesto un riavvio di apache.
A questo punto, installiamo il pacchetto php che Marc ci ha preparato gentilmente http://www2.entropy.ch/download/entropy-php-5.2.2-1.tar.gz
Fermiamo Apache, fermiamo mysql, riavviamo il tutto
Fase 10: Primo pezzo di console amministrativa
Apriamo Safari, digitiamo http://localhost/ocsreports/ ed iniziamo la configurazione del servizio.
***Ricordatevi di rimettere la password a root nelle utenze di mysql***
Inseriamo nome utente e password, il sistema genera le tabelle, premiamo invio.
** Possibili Errori:
non trova /var/mysql/mysql.sock
verificare che esista il socket, in caso verificare alla voce "Risoluzione a "non trova il socket di mysql""non ha i permessi per entrare sul socket
verificare i permessi di /var/mysql/mysql.sock
Ed ecco la nostra Console di Amministrazione ( user: admin pass: admin )
Qui vi rimando alla documentazione sul sito ufficiale del prodotto
Fase 11 : Primo inventario
Adesso ci installiamo un agent per MACOSX
Ringraziamo codejanitor, che ha scritto un agent per macosx, e lo ha pacchettizzato.
Questo agent funziona solo con 10.3 e superiori: http://codejanitor.com/wp/apps/ocs-mac-agent/
Installiamo il pkg come sempre e terminata l'installazione, ci spostiamo con terminale nella cartella /etc/ocsinventory-client/
cd /etc/ocsinventory-client/
a questo punto digitiamo
sudo vi ocsinv.conf
e modifichiamo il file alla riga OCSFSERVER, andando a sostituire ocsinventory-ng con l'indirizzo ip o il nome della macchina che ha installato il server nel nostro caso, potremmo anche scrivere così
localhost
oppure
192.168.0.1
o cmq l'indirizzo ip del server.
Il pacchetto va ad inserire Ocsinventory negli startupagent, quindi all'avvio
di un mac, verrà fatto partire il programma ( un oscript in php) programma che
si trova in /usr/local/sbin/
Noi lo forziamo per verificare il funzionamento del pacchett,o quindi da terminale
digitiamo
sudo php /usr/local/sbin/ocs_mac_agent.php
L'agent deve dare un messaggio 200, seguito dall'inventario della macchina.
*** Possibili Errori
Il server risponde con un errore 500
Verificare /var/log/httpd/error.log
Probabilmente è un problema di DBI , o DBD, consultarmi o GIYFIl server da problemi di permessi
Verificare di aver lanciato lo script con sudo.
Fase 12: Risultati
Se invece va tutto bene:
1) battevi una pacca sulla spalla
2) digitate http://localhost/ocsreports e vederete inventariato il vostro Mac
Ahr.
Appendice.
Altri approcci:
Ci sono ovviamente altri approcci alla situazione.
Potete infatti scaricare mysql da entropy, oppure una versione pre-pacchettizata.
L'essenziale da ricordare è questo.
* Ci vuole Apache con mod_perl installato, oppure ci si compila mod_perl (ci vogliono i sorgenti di apache)
* Ci vuole Mysql, con la cartella "include", per la compilazione corretta di DBD::mysql
* Ci vuole Php, possibilmente quello di entropy.
Debug.
I file da tenere d'occhio in caso di problemi sono:
/var/log/httpd/error.log
/var/log/ocsinventory-ng/ocsinventory-ng.log
Ringraziamenti.
Scrivere queste righe è costato tempo e fatica.
Non vi dico poi, prima far funzionare la cosa, che non è documentata da nessuna
parte, poi ri-pulire, e poi documentare come si è fatto (non ho un esercito
di mac dove effettuare i test)
Se qualcosa va storto, sentitevi liberi di scrivermi.
Ringrazio anche mia moglie, che porta in grembo Sofia, una nuova mac-lover e
che ha pazientemente sopportato il sottoscritto in fase di elaborazione.
Ringrazio Tevac, perchè la conoscenza passa anche da qui.