Installare OpenERP su OSX con virtualenv: tutorial

Indipendentemente dalle scelte che si fanno circa l’ambiente in produzione, in fase di sviluppo è molto comodo avere un’istanza locale del server openerp e del client web. Mettere in piedi l’ambiente per OSX 10.5 non è semplice come con l’installer all in one per Windows ma grazie all’ausilio di tools come virtualenv vedremo come l’operazione si possa completare senza troppe difficoltà.

Prerequisiti

Prima di iniziare il tutorial assicuratevi di avere installato i seguenti tools, facendo ricorso magari alle rispettive distribuzioni binarie, reperibili agli url fra parentesi.

L’utilizzo di MacPorts è finalizzato all’installazione di pacchetti e librerie che durante il tutorial dovessero risultare non presenti nel sistema. Inoltre la presenza di MacPorts vi assicura che la toolchain gnu è perfettamente in ordine!

Virtualenv e Virtualenvwrapper

Lo scopo e le potenzialità di virtualenv e dei relativi wrappers meriterebbero un post a parte. Per ora ci basti sapere che il loro utilizzo ci consentirà di costruire un environment virtuale all’interno del quale isolare tutte le dipendenze specifiche di openerp senza che queste vadano ad impattare l’installazione Python di sistema.
easy_install virtualenv
Una volta installato virtualenv avremo a disposizione anche il potente package manager pip.
easy_install virtualenvwrapper
Aggiungete queste due righe al file .bash_profile che trovate nella vostra home directory:
export WORKON_HOME=$HOME/.virtualenvs
source /usr/local/bin/virtualenvwrapper_bashrc
I wrapper ci consentiranno di creare, gestire ed utilizzare in maniera molto semplice i nostri virtual environments, come vedremo fra poco. Partiamo con la creazione del primo (ed unico per questo tutorial) environment:
mkvirtualenv -p python2.6 openerp-5_0_12
openerp-5_0_12 è il nome dell’environment, potete usare la stringa che volete. Una volta terminata la procedura l’environment verrà attivato automaticamente, e da quel momento in poi andremo ad operare in un ambiente isolato dal resto del sistema. Il fatto di essere all’interno del virtual env è evidenziato anche dal prompt:
(openerp-5_0_12)macgiver:~ masci$
Per disattivare l’env virtuale e tornare alla shell di sistema basta digitare
deactivate
per tornare ancora all’interno dell’env virtuale basterà digitare
workon openerp-5_0_12

Installazione di openerp-server e openerp-web

Prima di procedere all’installazione di openerp e delle sue componenti abbiamo bisogno di soddisfare alcuni requisiti: vediamo come pip ci viene in aiuto.

reportlab

pip install reportlab

pydot

pip install pydot

lxml

pip install lxml

pychart

Recuperate il pacchetto con i sorgenti all’indirizzo: http://download.gna.org/pychart/PyChart-1.39.tar.gz, poi

tar xzf PyChart-1.39.tar.gz && cd PyChart-1.39
python setup.py install

psycopg2

PATH=$PATH:/Library/PostgreSQL/8.4/bin/ pip install psycopg2

Attenzione ad aggiustare il path sopra a seconda delle vostre esigenze: la directory specificata deve essere quella dove l’installazione di postgres ha posizionato l’eseguibile pg_config.

mx.DateTime

Questo pacchetto va installato ‘a mano’ dato che il file setup.py patcha in vari punti distutils, andando in conflito con setuptools. La cosa migliore è prendere il pacchetto da egenix stessa: a questo indirizzo, http://www.egenix.com/products/python/mxBase/, cercate la voce “Source Code (for all other platforms):” e premete il pulsante “download”. Una volta scaricato il pacchetto:

tar xzf egenix-mx-base-3.1.3.tar.gz && cd egenix-mx-base-3.1.3
python setup.py install

PIL

pip install PIL

pytz

pip install pytz
Ora recuperiamo i pacchetti della versione stabile di openerp da openerp.com:
http://www.openerp.com/download/stable/source/openerp-server-5.0.12.tar.gz
http://www.openerp.com/download/stable/source/openerp-web-5.0.12.tar.gz
Scompattiamo gli archivi e procediamo con l’installazione:
tar xzf openerp-server-5.0.12.tar.gz && cd openerp-server-5.0.12
python setup.py install
e quindi
tar xzf openerp-web-5.0.12.tar.gz && cd openerp-web-5.0.12
python setup.py install

Setup e avvio

Ora che il nostro ambiente è configurato per l’esecuzione delle componenti web e server di openerp, facciamo un minimo di setup per poi procedere con l’avvio dei servizi. La componente più semplice da configurare è il client web, che allo startup legge un file di configurazione dalla directory di installazione, situata nella directory site-packages del nostro virtual env, che possiamo raggiungere semplicemente con:
cdsitepackages
e poi
cd openerp_web-5.0.12-py2.6.egg/config
dove risiede il file openerp-web.cfg. Il file è ampiamente commentato e personalmente non apporto mai modifiche se sono in fase di sviluppo.
Il file di configurazione del server invece viene caricato solo se presente nella home dell’utente o espressamente indicato con l’apposito flag da riga di comando. Il comando seguente:
openerp-server -s
^C
crea il file .openerp_serverrc nella home, fornendo di fatto un template che possiamo personalizzare in base alla nostra configurazione di sistema. In particolare vanno necessariamente indicati i parametri di connessione al database (le voci con prefisso “db_”). Ricordatevi che la password di amministratore è nel file stesso, alla voce admin_passwd.
Una volta modificato il file ~/.openerp_serverrc possiamo avviare le componenti di openerp:
openerp-web 2&> /dev/null &
openerp-server
Questo mi consente di avere il log del server direttamente sulla shell e di silenziare quello del web client.
Come chicca finale, grazie a virtualenvwrapper possiamo automatizzare gli ultimi due passaggi in modo che vengano eseguiti ogni volta che attiviamo il nostro virtual env. La directory bin/ all’interno del nostro virtualenv contiene infatti degli script che vengono eseguiti durante le varie fasi di attivazione/disattivazione dell’ambiente e che possiamo usare come hooks. In particolare in bin/postactivate possiamo scrivere:
#!/bin/bash
# This hook is run after this virtualenv is activated.
openerp-web 2&> /dev/null &
echo $! > /var/tmp/openerp-web.pid
openerp-server &
echo $! > /var/tmp/openerp-server.pid
e in bin/predeactivate:
#!/bin/bash
# This hook is run before this virtualenv is deactivated.
kill `cat /var/tmp/openerp-web.pid`
kill `cat /var/tmp/openerp-server.pid`
Ovviamente gli script sono piuttosto grezzi ma più che sufficienti per utilizzo personale.