OCS Inventory NG su Mac OS X

Dom, 03 Giugno 2007 - 00:04

Inviato da: padreberta

(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?
Lavoro come amministratore di sistema e di rete, fortunatamente le reti sono di altri. Più di una volta mi è capitato di trovare aziende che hanno la necessità di effettuare uno screening di tutto quello che c'è nella loro rete.
Ebbene, girando in macchina ho sempre un paio di PC scassoni sui quali installo al volo linux e faccio quello che devo fare. Pero', siccome ho lavorato per un po' in uno studio di grafica pubblicitaria dove c'erano solo mac, ho pensato che magari sarebbe bello mettere sto coso su un Mac, senza scassoni tra le sfere. Zompo sul sito degli amici e.... arrrghhh!! non esiste una versione per Mac OS X??!! Ma come???
Altolà, mi dico io, c'è da scrivere un tutorial per Tevac, c'è che è un po' un periodo di stanca, c'è pure un nano in palio.
Vai con la sfida...

OcsInventory NG ( http://www.ocsinventory-ng.org) è un pacchetto, sviluppato da un team francese omonimo, che consente di inventariare tutti gli apparati della rete, siano essi PC, Router, Switch, Stampanti di rete e tutto quello insomma che ha un cavo di rete. OcsInventory NG inoltre consente di analizzare approfonditamente il software installato sui computer appartenenti ad una o più reti (con controllo quindi sui pacchetti e tutto l'hardware installato), e dulcis in fundo ( ma non è un dolce ) il pacchetto è anche in grado di effettuare il deployment di pacchetti, ossia l'installazione remota ( ma non ne parleremo qui ).
Ovviamente è possibile analizzare macchine con a bordo il nostro amato Mac OS X, ma anche tutte le varianti di unix che conoscete.

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)

[page_break]

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:

  1. utilizzare il cpan, ossia utilizzare il servizio standard che perl offre per l'installazione dei propri moduli
  2. utilizzare un servizio già pacchettizzato (darwinports, fink etc.)

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. make test non trova il socket di mysql
  2. make test ha problemi di connessione al socket, per password di root pre-impostate (allora mi state prendendo in giro e una installazione di mysql c'era già)

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

[page_break]

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 GIYF

Il 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.

0 commenti



http://www.tevac.com/article.php/20070603000431944