2011-09-10

VTP (settima parte) - Ricompilare per Linux


"Bene.  Mi hai convinto.  Mi serve VTP.  Però io uso solo Linux. "

Questa è la frase tipica dell'utente GIS, recentemente.  Ebbene, è vero: il sito web di  VTerrain.org  dichiara più volte che VTP esiste anche per Linux e MacOSX.  Però, contrariamente a quello che accade per Windows, Virtual Terrain Project non distribuisce un installatore per le altre piattaforme.
Come possiamo risolvere il problema ?   Rimboccandosi le maniche e ricompilando tutto, a partire dai sorgenti.  Impresa impossibile ?  Noi ci siamo riusciti, e vi descriveremo come.

Prima di tutto, scegliamo una versione di Linux.  Ci siamo informati, ed abbiamo scoperto che i programmatori di VTP usano Ubuntu Linux 10.04 32 bit.  

Perfetto.  Come per la frase tipica che abbiamo visto prima, "Io uso solo MacOSX".  Quindi, per fare l'impresa ancora più impossibile, mi installo una VirtualBOX, con una macchina virtuale Linux Ubuntu 10.04 32 bit, con un disco virtuale da 20 giga, dinamico.  Più Virtuale di così...!



Nella macchina Virtuale sul nostro Mac mini ricompileremo Virtual Terrain per Linux.  Comunque, è meglio chiarire che VirtualBox (o un altro tipo di macchina virtuale) è necessaria soltanto per rendermi disponibile Linux in una finestra del mio sistema MacOSX, senza dover "spianare un computer" e formattare un disco reale.  I possessori di un computer Linux non devono installare VirtualBox (o simili) per ricompilare VTP.

Comunque, cominciamo.  Ci colleghiamo alla pagina  unix_build  di VTerrain.org, per studiarci le istruzioni di compilazione.  Sappiamo, comunque, che non sempre le istruzioni sono aggiornate all'ultima versione dei sorgenti e che, quindi, molto facilmente potranno uscir fuori errori.


VTP è costituito essenzialmente da due programmi, come abbiamo più volte visto in questa serie di articoli:  VTBuilder e Enviro.
Entrambi i programmi utilizzano una serie di librerie software, che in gran parte sono le stesse utilizzate da tutti i programmi Gis OpenSource, come ad esempio QuantumGIS.
Queste librerie sono:

GDAL
PROJ.4
LIBPNG

e poi molte altre...

In più, il rendering 3D di VTP Enviro è basato su OpenSceneGraph, che è una formidabile libreria per la visualizzazione territoriale in tempo reale, utilizzata anche in simulatori di volo.



Riassumendo, in questa pagina di VTerrain.org sono descritte tutte le librerie necessarie.



Ma prima di iniziare a procurarci le librerie, scaricandole dalla rete, conviene descrivere cosa si intende per "ricompilare" un'applicazione su Linux Ubuntu, o comunque in un ambiente Open Source.

"Open Source" sta a significare che i listati originali del programma sono disponibili per essere adattati alle proprie esigenze, o più semplicemente per essere "portati" su una "piattaforma" non ancora prevista.

Come prima cosa, occorre assicurarci di avere il complilatore installato sulla nostra macchina.  Se abbiamo dubbi, probabilmente non lo abbiamo.  Per procurarcelo, scriviamo, nella finestra del terminale:

sudo apt-get install g++


Questa istruzione ci richiederà la password di amministratore, e dopo qualche tempo troveremo installato il compilatore C++ sulla macchina, pronto per l'uso.

Senza volerci dilungare troppo, una volta ottenuti i "sorgenti" di un programma, per ottenere il file eseguibile occorre aprire un terminale del sistema operativo, posizionarsi nella directory dei sorgenti e occorre scrivere:

./configure

Questa istruzione preparerà una serie di file, contenenti variabili di ambiente specifiche per la propria macchina.  Una volta terminata la configurazione, occorre scrivere:

make

Questa operazione "compila" tutti i sorgenti del programma, creando file contenenti istruzioni in linguaggio macchina, che poi verranno montati dal "Linker" insieme alle librerie necessarie.

Alla fine occorre scrivere:

sudo make install

che costituisce la fase di installazione del programma (o della libreria).

Per queste operazioni non è necessario essere un programmatore, anche se, chiaramente, questo non guasta. Per prima cosa, quindi, impariamo a trovare il "terminale" su Linux Ubuntu (mi ripeto: versione 10.04) .   Troviamo "Terminale" nel menu "Applicazioni", sotto "Accessori".






Nella finestra del terminale, che si aprirà nella directory base della propria utenza, andiamo a scrivere:

svn checkout http://vtp.googlecode.com/svn/trunk/ vtp

per procurarci l'ultima versione dei sorgenti del programma.  Se non siamo dei programmatori, molto probabilmente questa istruzione ci darà errore, perché non è installato sul nostro computer il necessario programma. Comunque, sul terminale sarà indicato cosa dobbiamo fare per installare "svn".

Se vogliamo semplificare il problema, scarichiamo i sorgenti con un file ZIP che ne contiene la versione da noi provata :

http://vterrain.org/dist/vtp-src-111016.zip

Creiamo una directory chiamata "vtp" sotto la nostra "/home".  Poi inseriamo il contenuto dello ZIP al di sotto della nostra "vtp".


La struttura gerarchica delle directory di sviluppo di VTP è composta da due gruppi principali:  TerrainSDK, contenente le librerie del programma e TerrainApps, con le applicazioni vere e proprie.

Noi abbiamo aggiunto una ulteriore directory, "deps", in cui andremo ad inserire le librerie esterne che andremo a scaricare, con l'istruzione:

svn checkout http://vtp.googlecode.com/svn/deps/ deps

Ottenute così alcune delle altre librerie necessarie (ma non tutte...) possiamo iniziare a "ricompilare".
Per farlo, ci occorrono alcune componenti:  CMake ed il compilatore vero e proprio.

Possiamo scaricare CMake tramite questo link:

http://www.cmake.org/files/v2.8/cmake-2.8.6-Linux-i386.tar.gz

Troveremo "cmake-gui" nella directory "bin" all'interno di "cmake-2.8.6-Linux-i386".


Lanciando "cmake-gui" ci troveremo davanti la finestra di CMake, che ci permette di configurare il progetto di ricompilazione di VTP, e delle altre componenti che andremo a sviluppare.



CMake usa dei file di configurazione ("CMakeList.txt") rilasciati con i sorgenti, contenenti la lista delle librerie e le variabili necessarie.  Nell'immagine che segue vediamo un esempio del contenuto di un file "CMakeList.txt" di VTP.  Non sarà necessario per noi mai modificare questo file, quindi, chiudiamolo lasciandolo invariato, e andiamolo, invece, ad utilizzare con CMake.




Come prima cosa dobbiamo indicare a CMake la directory dei sorgenti, selezionando il bottone "Browse Source".   Allo stesso modo, dobbiamo indicare la directory di uscita, con il bottone "Browse Build".   Noi abbiamo scelto di posizionare il prodotto di uscita nella directory che abbiamo chiamato "build", che abbiamo posto direttamente al di sotto della directory "vtp".

A questo punto premiamo il bottone "Configure".  Dopo qualche tempo di elaborazione, molte delle righe (se non tutte) della tabella centrale della finestra di CMake diventeranno rosse.  Questo significa che è stato riscontrato un errore. Questo è perfettamente normale, in CMake.  E', potremmo dire, la ragione principale dell'esistenza stessa di CMake.

Infatti, CMake-gui serve a portare gli errori di configurazione progressivamente a zero, evidenziando le componenti mancanti, ovvero, in genere, le librerie non trovate. 

Il primo "trucco" per (iniziare a) ridurre i problemi di CMake è di andare a compilare prima le librerie esterne.  Infatti, se andiamo a vedere alcune delle righe rosse della tabella CMake, vedremo marcate con "_NOTFOUND, ad esempio," proprio le librerie "mini", "quikgrid" e "squish", che abbiamo già scaricato da VTP e che sono poste sotto la nostra directory "deps".

Qui di seguito indichiamo le operazioni (ripetitive) da compiere nel terminale per ricompilare queste tre librerie.

cd   vtp/deps/mini
mkdir  build

Lanciamo Cmake-gui e indichiamo le directory sorgente e destinazione della configurazione. 
Premiamo "Configure".  Probabilmente Cmake ci segnalerà "Could NOT find OpenGL".  In questo caso occorre installare le librerie FreeOpenGL e Glut.
Probabilmente, poi, ci occorrerà anche installare le librerie "Curl", "Jpeg", "Png" e "Zlib".


Per queste ultime librerie conviene anteporre a qualunque altra cosa l'installazione delle dipendenze di OpenSceneGraph, con l'istruzione:


sudo apt-get build-dep openscenegraph


che provvede da sola ad installare le librerie necessarie (anche se l'attesa sarà piuttosto lunga). Sarà necessaria la password di amministratore.


Nel caso in cui queste siano installate ed il "Configure" di CMake non torni altri errori, si può premere "Generate".  Questo scrivera' i file necessari all'interno della directory "mini/build".  Spostiamoci nella directory "build" e lanciamo "make". Scriviamo quindi:

cd build
make

Al termine di una elaborazione abbastanza lunga, avremo di nuovo il controllo del terminale.  Scriviamo quindi:

sudo make install   

ed inseriamo la nostra password di sistema.

Questa operazione installa gli include di Mini in    "/usr/local/include/mini/"
ed installa la libreria di Mini in    "/usr/local/lib/libMini.a"

Ripetiamo le stesse operazioni per le altre librerie:

cd   vtp/deps/quikgrid/core
mkdir  build

Cmake   ...

make

"sudo make install"   installa gli include di quikgrid in    "/usr/local/include/quikgrid/"
"sudo make install"   installa la libreria di quikgrid in    "/usr/local/lib/libquikgrid.a"


cd   vtp/deps/quikgrid
mkdir  build

Cmake   ...

make

"sudo make install"   installa gli include di squish in    "/usr/local/include/"
ed installa la libreria di squish  in   "/usr/local/lib/libsquish.a"


---- CONTINUA ---


Ricompilazione BobMaX su Linux Ubuntu 10.04 32bit.
Lista librerie necessarie:

http://curl.haxx.se/download/curl-7.22.0.tar.gz

Dipendenze OpenScenegraph:

apt-get build-dep openscenegraph


Sorgenti OpenSceneGraph:
http://www.openscenegraph.org/downloads/stable_releases/OpenSceneGraph-2.8.5/source/OpenSceneGraph-2.8.5.zip

Sorgenti VTP:
http://vterrain.org/dist/vtp-src-111016.zip

inoltre, molto importante queste (soprattutto la mini, nella versione di Ben):





BobMaX