mercoledì 22 luglio 2009

Compilare GNU Octave 3.2.2

Nota: all'indirizzo http://elubuntu.blogspot.com/2011/02/compilare-gnu-octave-340.html trovate una guida su come compilare GNU Octave 3.4.0.

In Ubuntu 9.04 è presente ancora una versione non nuovissima di GNU Octave e avrei voluto scrivere come ho compilato GNU Octave 3.2, ma proprio oggi è uscita la più recente versione del programma di analisi numerica, ottimo sostituto open-source di Matlab, e quindi spiegherò come ho compilato GNU Octave 3.2.2 (l'ho testato su Ubuntu Jaunty Jackalope, su versioni precedenti del sistema potrebbero mancare troppi pacchetti necessari all'installazione del programma).

Avviso già da adesso, che ci non vuole provare l'"ebbrezza" di compilare da solo questo programma ma preferisce installare direttamente i pacchetti .deb, può scaricare da qui un archivio contenente tutto ciò che serve (sono presenti i pacchetti di Octave 3.2, dell'interfaccia grafica QtOctave e le varie dipendenze che sono necessarie). L'archivio l'ho trovato a questo indirizzo. http://tobal.cymaho.com/?p=920. Questa soluzione potrebbe essere preferita anche da chi non ha intenzione o la possibilità di scaricare diversi megabyte (credo poche centinaia) di pacchetti assortititi che occuperanno molto spazio sull'hard disk dopo l'installazione.

Per prima cosa, ovviamente, serve il sorgente: lo trovate nella pagina dei download di Octave, l'indirizzo del sorgente è ftp://ftp.octave.org/pub/octave/octave-3.2.2.tar.gz. Scaricate l'archivio e scompattatelo in una cartella (ricordatevi per bene il nome della cartella in cui l'avete salvato). Da questo momento in poi sarà necessario usare (quasi) sempre il terminale, quindi apritene uno (ApplicazioniAccessoriTerminale) e spostatevi (nel terminale con il comando cd) nella cartella in cui avete scompattato il sorgente. Se per esempio è la cartella ~/Scrivania/octave-3.2.2 (ricordo che la tilde ~ è l'abbreviazione della home dell'utente corrente) dovete dare il comando
cd ~/Scrivania/octave-3.2.2
Come per ogni compilazione, è necessario installare i compilatore, che si ottengono installando il pacchetto build-essential. Questo può essere installato da Synaptic, oppure da terminale con il comando
sudo apt-get install build-essential
Dopo di ciò bisogna installare i pacchetti necessari per la compilazione di Octave: il comando
sudo apt-get build-dep octave3.0
installerà la maggior parte dei pacchetti che serviranno, ma non tutti (il comando build-dep di apt-get recupera i pacchetti necessari per la compilazione del pacchetto specificato ma qualcuno potrebbe sfuggire, come in questo caso). L'usuale procedura per la compilazione del sorgente di un programma prevedere che a questo punto venga dato il comando
./configure
(esegue il programma configure, quindi assicuratevi di essere nella cartella corretta). La prima volta che ho eseguito il configure, alla fine ho ricevuto questo elenco di avvisi:
configure: WARNING: I didn't find bison, but it's only a problem if you need to reconstruct parse.cc
configure: WARNING: qrupdate not found. The QR & Cholesky updating functions will be slow.
configure: WARNING: arpack not found. This will result in a lack of the eigs function.
configure: WARNING: GraphicsMagick++ config script not found. Assuming GraphicsMagic++ library and header files are missing, so imread will not be fully functional
configure: WARNING: "FLTK config script not found. Native graphics will be disabled."
configure: WARNING:
configure: WARNING: I didn't find the necessary libraries to compile native
configure: WARNING: graphics. It isn't necessary to have native graphics
configure: WARNING: but you will have to use gnuplot or you won't be able
configure: WARNING: to use any of Octave's plotting commands
configure: WARNING:
configure:

NOTE: libraries may be skipped if a library is not found OR
if the library on your system is missing required features.

Per rimediare a questi avvisi ho dovuto installare un po' di pacchetti (come al solito, questi possono essere installati da Synaptic o da terminale, come preferite).
· Per bison è necessario il pacchetto bison.
· Per arpack ho installato i pacchetti libarpack2 libarpack2-dev libibverbs1 libopenmpi1 libopenmpi-dev openmpi-common.
· Per GraphicsMagick++ ho installati i pacchetti libbz2-dev libexif-dev libexpat1-dev libfreetype6-dev libgraphicsmagick++1 libgraphicsmagick++1-dev libgraphicsmagick1 libgraphicsmagick1-dev libice-dev libjasper-dev liblcms1-dev libpng12-dev libpthread-stubs0 libpthread-stubs0-dev libsm-dev libtiff4-dev libtiffxx0c2 libwmf-dev libx11-dev libxau-dev libxcb1-dev libxdmcp-dev libxext-dev libxml2-dev x11proto-core-dev x11proto-input-dev x11proto-kb-dev x11proto-xext-dev xtrans-dev.
· Per FLTK ho installato i pacchetti libfltk1.1 libfltk1.1-dev libgl1-mesa-dev mesa-common-dev
· Per qrupdate ho dovuto scaricare dei pacchetti dagli archivi di Karmic, la versione di Ubuntu che deve ancora essere rilasciata. I pacchetti necessari sono stati libqrupdate1 libqrupdate-dev mpi-default-dev. Facendo clic su ciascuno dei nomi dei pacchetti qui indicati potete scegliere l'architettura del vostro sistema (amd64 o i386) e scaricare i pacchetti deb che potrete installare normalmente.

Dopo aver installato tutti i pacchetti ho nuovamente dato il comando
./configure
che però questa volta non mi ha dato alcun avviso, quindi ho proceduto con il
make
Durante il make, però, ho ricevuto un messaggio di errore:
./DLD-FUNCTIONS/fltk_backend.cc: In member function ‘virtual void OpenGL_fltk::draw_overlay()’:
./DLD-FUNCTIONS/fltk_backend.cc:145: error: ‘gluOrtho2D’ was not declared in this scope
make[2]: *** [pic/fltk_backend.o] Errore 1
make[2]: uscita dalla directory «/home/luke/octave-3.2.2/src»
make[1]: *** [src] Errore 2
make[1]: uscita dalla directory «/home/luke/octave-3.2.2»
make: *** [all] Errore 2

La soluzione a questo problema l'ho trovata su questo sito: installare il pacchetto libglu1-mesa-dev. Ho ricominciato daccapo dal ./configure, che però mi ha dato un nuovo avviso (prima gli sarà sfuggito?):
configure: WARNING: "FTGL headers not found. Native renderer will not have on-screen text"
configure: WARNING:
configure: WARNING: I didn't find the necessary libraries to compile native
configure: WARNING: graphics. It isn't necessary to have native graphics
configure: WARNING: but you will have to use gnuplot or you won't be able
configure: WARNING: to use any of Octave's plotting commands
configure: WARNING:
configure:

NOTE: libraries may be skipped if a library is not found OR
if the library on your system is missing required features.

Per risolvere quest'altro problema ho installato i pacchetti libftgl-dev libftgl2. Dopo di ciò ho dato nuovamente i comandi
./configure
(fortunatamente anche questa volta senza avvisi) e poi
make
Dopo un po' di tempo (credo che a me abbia impiegato circa 2 ore, ma la compilazione potrebbe richiedere anche più tempo (o di meno se siete fortunati)), il processo è terminato ed è comparso il messaggio
Octave successfully built. Now choose from the following:

./run-octave - to run in place to test before installing
make check - to run the tests
make install - to install (PREFIX=/usr/local)

make[1]: uscita dalla directory «/home/luke/octave-3.2.2»

a segnalare (come si può leggere), la fine della compilazione di GNU Octave. A questo punto si può scegliere una delle operazioni suggerite. Per installare il programma si dovrebbe dare, come consigliato, il comando
sudo make install
(il sudo è necessario poiché verranno eseguite delle operazioni in cartelle protetta in scrittura), io però ho preferito creare un pacchetto .deb, in modo da non dover in seguito ricompilare tutto il programma. Per fare ciò, il metodo più semplice (non il migliore, ma per chi non ha bisogno di distribuire i pacchetti questo dovrebbe essere più che sufficiente) è usare checkinstall. Per creare il pacchetto, senza installarlo, bisogna dare il comando
sudo checkinstall --install=no
L'installazione potrà poi essere fatta successivamente, come per tutti i pacchetti deb.


Per compilare l'interfaccia grafica QtOctave 0.8.2 potete leggere qui.


Aggiornamento del 18/08/2009: oggi ho visto che nei repository della prossima versione di Ubuntu (Karmic Koala che uscirà a ottobre) è presente il pacchetto octave-3.2 (però alla versione 3.2.0, non la 3.2.2 la versione adesso è proprio la 3.2.2), quindi chi non ha fretta di installare subito la 3.2 potrebbe aspettare per l'installazione il rilascio di Ubuntu 9.10 per poterlo installare comodamente dal gestore pacchetti.

16 commenti:

  1. grazie per la guida.... funziona !!!

    RispondiElimina
  2. ok. ottimo.
    Volevo segnalare questo nuovo sito su Octave:

    http://www.octave.netsons.org/

    Ciao

    RispondiElimina
  3. Grazie a entrambi e grazie per la segnalazione del sito, ho scoperto l'esistenza di Xoctave, un'interfaccia grafica che funziona meglio di QtOctave (anche se forse offre meno possibilità di quest'ultima). Qualche giorno fa, infatti, avevo provato QtOctave su Ubuntu Karmic con LXDE come ambiente desktop ma il risultato è stato pessimo: i pulsanti non si vedono :(

    Ciao!

    RispondiElimina
  4. Vorrei solo segnalare che è uscita la 3.2.3 che ha risolto alcuni bachi della 3.2.2 (ad esempio il sistema di debug).
    La sto compilando non senza difficoltà (suggerirei di aggiungere alla guida quanto riportato in
    http://old.nabble.com/F77-vs-gfotran-p24357934.html
    sito segnalato dallo stesso autore nel blog di ubuntu).
    Domanda: una volta compilata qual'è il modo più semplice per creare e mettere a disposizione un pacchetto deb?

    RispondiElimina
  5. Per creare un pacchetto deb, come ho detto anche nel post, il sistema più semplice è quello di usare checkinstall. È semplicissimo da usare (puoi leggere il suo manuale o la guida linkata nel post), essenzialmente basta usare il comando

    sudo checkinstall --install=no

    al posto dell'usuale `make install'. Questo metodo non è molto usato per la distribuzione, non so spiegarti bene il perché in quanto non me ne intendo di pacchettizzazione, comunque c'è un utente che distribuisce pacchetti deb di maxima creati con checkinstall e funzionano benissimo.

    Ciao!

    RispondiElimina
  6. consiglio su KARMIC di cercare direttamente le dipendenze della versione 3.2, col configure è andato tutto liscio al primo colpo, a breve farò pure il make e vi farò sapere.....ciao ;)

    RispondiElimina
  7. Sì, su Karmic non dovrebbero esserci problemi con le dipendenze, su Jaunty invece ho dovuto combattere un po' di più (anche, tutto sommato, si trattava solo di warning e non di error). In genere i "guai" arrivano al make. Fammi sapere se sei riuscito a compilare o hai incontrato qualche nuovo problema (e anche come l'hai risolto magari, così amplio la guida :) ).

    Ciao!

    RispondiElimina
  8. primo errore (forse):

    ./oop.texi:1: I can't find file `polynomial.m'.
    @doverbatiminclude ...tim @indexnofonts @input #1
    @afterenvbreak }
    l.3 ...l}/@xeatspaces {@xeatspaces {polynomial.m}}

    @scanmacro ...ceisspace @scantokens {#1@endinput }
    @endgroup
    @classfilexxx ...{#2}^^M@end group^^M@end example}
    @egroup
    l.1 ...le{@@polynomial,@xeatspaces {polynomial.m}}
    @endinput
    @scanmacro ...ceisspace @scantokens {#1@endinput }
    @endgroup
    ...
    l.109 @polynomialfile{polynomial.m}

    (Press Enter to retry, or Control-D to exit)
    Please type another input file name:


    il file c'è !

    RispondiElimina
  9. dimenticavo, la versione è la 3.2.3. su jaunty ho seguito la guida ma non ho avuto alcun problema ! anche con chekinstall dà lo stesso problema ! ! ! sembra che i problemi siano anche nella generazione della documentanzione octave-a4.pdf.....

    RispondiElimina
  10. Ho provato ora a compilare la 3.2.3 su Karmic: anche a me dà un errore nella generazione del documento octave-a4.pdf, però la compilazione di octave è terminata e a conferma di ciò è uscito scritto

    [...]
    Octave successfully built. Now choose from the following:
    [...]

    RispondiElimina
  11. infatti, lo stesso a me e poi con checkinstall creo il pacchetto .deb, quindi pensi che sia tutto ok a parte questa cosa della documentazione ? ma soprattutto l'errore del file polynomial.m viene dato perchè non riesce ad includerlo nella documentazione ?

    RispondiElimina
  12. ho visto che è uscita la 3.2.4, oggi provo a compilarla. Mi ero scordato di chiederti un'altra cosa. Perchè quando faccio checkinstall mi crea un solo pacchetto .deb ? quando scarico la versione già pacchettizzata dal link che hai messo, ci sono diversi pacchetti ognuno differente, programma, doc, dbg eccetera....come faccio a ricreare gli stessi pacchetti ma con l'ultima versione ?

    RispondiElimina
  13. Sì, l'errore te lo dà perché c'è un problema con il file polynomial.m (forse è stato indicato un percorso sbagliato nel manuale, ma non ne sono sicuro). Se ti è uscito il messaggio «Octave successfully built.» significa che è andato tutto bene per quanto riguarda il programma, solo la documentazione ha avuto quel piccolo problema ma questo non pregiudica il funzionamento di Octave.

    Per quanto riguarda la suddivisione del programma in pacchetti differenti non so aiutarti, non me ne intendo di pacchettizzazione e per questo uso checkinstall che è uno degli strumenti più semplici per creare i deb, ma di certo non è "professionale". Se l'importante per te è che Octave sia rilevato come installato da apt, basta che quando generi il pacchetto con checkinstall specifichi come nome `octave3.2' (che è lo stesso nome usato nei repository di Ubuntu), per il resto non dovresti avere problemi (o almeno, per quanto utilizzo io Octave non ho mai avuto problemi).

    RispondiElimina
  14. forse non ci sarà + bisogno di compilare, anche se può essere utile come esercizio :D. Ho trovato i link dei POOL debian con i pacchetti già pronti da installare aggiornati alle ultimissime versioni :

    http://ftp.debian.org/pool/main/o/octave3.2/

    http://ftp.debian.org/pool/main/q/qtoctave/

    ovviamente si installano se tutte le dipendenze sono soddisfatte (su jaunty ce ne sono un bel pò - come vedi sono già presenti tutte le architetture). Inoltre ci sono pure i file .diff .dsc e .tar.gz per chi volesse provare a fare i pacchetti per esercizio con i passaggi

    dpkg-source -x .*dsc

    e poi

    debuild -us -uc -b

    nella nuova cartella generata. Ecco allora il perchè degli otto pacchetti nel tuo link segnalato, probabilmente il tizio spagnolo li ha presi da qui ;) vedi se il tutto torna. Scusa ancora per il disturbo :D. Penso che possa essere utile pure per gli altri ;)

    RispondiElimina
  15. Volevo avvisare che la procedura di installazione descritta sopra per la versione 3.2.3 funziona perfettamente anche con la 3.2.4.
    Ciao
    Simo2777

    RispondiElimina
  16. Grazie per la segnalazione, immagino che potrà servire a qualcun altro :-)
    Ciao!

    RispondiElimina

I commenti inseriti vengono lasciati dall'autore degli stessi accettandone ogni eventuale responsabilità civile e penale.
Il curatore del blog si riserva la possibilità di eliminare messaggi contenenti frasi offensive o spam.