My status    

hoops... forse ho dimenticato di pettinarmi :-)

 

CONTENUTI


Installare mono su Linux Centos

Autore: Francesco Catania
E-Mail dell'autore: ctfranco@fcservice.com
Sito web dell'autore: http://www.fcservice.com



Quelle che seguono, rappresentano le linee guida da seguire per installare mono 2.4.2 su Linux Centos 5.3 senza grossi problemi.

Prima di proseguire con l'installazione, conviene preparare un ambiente di programmazione di Linux che può venire utile anche in altre installazioni.

Ovviamente assumiamo che Apache 2.2 sia già correttamente installato e configurato, altrimenti vi rimando all'articolo che sto scrivendo e che publicherò al più presto. 

Da questo momento lavoreremo all'interno di una finestra terminal se non si è già in modalità console, ricordatevi che bisogna accedere come root quindi eventualmente eseguire il comando: "su" dalla riga di comando.

Installiamo il repository di rpmforge, che aggiunge la possibilità di avere dei pacchetti aggiuntivi non ancora esistenti nei repository standard di Centos, sgegliere il link x86_64 per macchine a 64 bit altrimenti i386:



Assumiamo che la macchina sia a 64 bit e in una finestra terminal digitiamo le seguenti righe:


cd /root

wget http://packages.sw.be/rpmforge-release/rpmforge-release-0.3.6-1.el5.rf.x86_64.rpm

rpm --install rpmforge-release-0.3.6-1.el5.rf.x86_64.rpm


Il passo successivo è quello di installare alcune librerie di sviluppo utilizzate dai package di installazione di mono.
Per esempio provando ad installare libgdiplus, il programma configure avrà un output che finisce con qualcosa di simile:


Configuration summary
* Installation prefix = /opt/mono-2.4
* Cairo = 1.6.4 (internal)
* Text = cairo
* EXIF tags = No. Get it from http://libexif.sourceforge.net/
* Codecs supported:

- TIFF: no (Get it from http://www.libtiff.org/)
- JPEG: no (Get it from http://freshmeat.net/projects/libjpeg)
- GIF: no (See http://sourceforge.net/projects/libgif)
- PNG: yes
NOTE: if any of the above say 'no' you may install the
corresponding development packages for them, rerun
autogen.sh to include them in the build. 


Il fatto che non siano state trovate alcune librerie, non vuol dire che le librerie non siano presenti nel sistema ma sicuramente non lo sono i relativi package di sviluppo quindi bisogna installarli, in questo caso sono necessari i package di sviluppo delle librerie come elencato.

yum install esegue l'installazione del package o, se questi esiste, il relativo upgrade, altrimenti ci comunica che non ha intrapreso nessuna azione (package esistente ed aggiornato oppure non ha trovato il package da nessuna parte).
 
Se vogliamo ridurre al minimo le possibilità di insuccesso, installando uno dei package successivi, abbiamo due scelte:

  1. la macchina è stata installata come server senza le librerie X
    digitare i seguenti comandi per installare tutte le librerie di sviluppo
    (soluzione, a mio avviso, consigliata anche per la scelta 2, installa le stesse librerie che avremmo installato se al momento dell'installazione del sistema avessimo scelto di installare le librerie di sviluppo, questa scelta installa un centinaio di package che comunque non consuma risorse a runtime ma solo circa 200MB di hard disk, risolvendo futuri problemi di dipendenza, ricordatevi che su Linux avremo spesso la necessità di compilare dei pacchetti di tipo sorgente)


    yum groupinstall "Development Tools"

    yum groupinstall "X Software Development"



  2. la macchina è stata installata come desktop con le librerie X
    in questo caso il sistema dovrebbe aver installato molte delle librerie precedenti quindi la sequenza di comandi successiva dovrebbe coprire la totalità dei casi, personalmente consiglio di lanciare comunque i due comandi precedenti 


    yum install automake

    yum install libexif-devel

    yum install libtiff-devel

    yum install libjpeg-devel

    yum install libpng-devel

    yum install giflib-devel

    yum install httpd-devel

    yum install apr-devel

    yum install xulrunner-devel

    yum install xulrunner-devel-unstable

    yum install bison-devel

    yum install flex

    yum install fontconfig-devel

    yum install libXt-devel

    yum install libXrender-devel





Oltre alle librerie precedenti, bisogna installare le tre utility seguenti che, per non impazzire nella loro ricerca, potete scaricare direttamente da qui:

m4-1.4.10-3.fc9.i386.rpm
automake17-1.7.9-7.noarch.rpm
autoconf-2.61-10.fc9.noarch.rpm
autoconf-2.63-1.fc9.noarch.rpm



wget http://www.fcservice.com/m4-1.4.10-3.fc9.i386.rpm

rpm --install m4-1.4.10-3.fc9.i386.rpm --force

wget http://www.fcservice.com/automake17-1.7.9-7.noarch.rpm

rpm --install automake17-1.7.9-7.noarch.rpm

wget http://www.fcservice.com/autoconf-2.63-1.fc9.noarch.rpm

rpm --install autoconf-2.63-1.fc9.noarch.rpm



Nell'eventualità che rpm si rifiuti di installare perchè esiste già uno dei package con versione minore disinstallare il package incriminato è riprovare:

"rpm -e --nodeps nomepackage_incriminato"

A questo punto siamo pronti per eseguire l'installazione, creiamo quindi la direcotory source dentro la directory root e, all'interno di source, le directory mono e monodevelop all'interno delle quali scaricheremo i package occorrenti:


cd /root

mkdir source

mkdir source/mono

mkdir source/monodevelop

cd source/mono


Se avete già installato in precedenza le librerie di sviluppo probabilmente avrete già nel sistema la libreria glib-2.20 quindi saltate al passo successivo, altrimenti eseguite l'installazione :


wget http://ftp.gnome.org/pub/gnome/sources/glib/2.20/glib-2.20.4.tar.bz2

tar -jxf glib-2.20.4.tar.bz2

cd
glib-2.20.4

autoconf

./configure --prefix=/opt/mono-2.4

make

make install

cd ..


Il parametro --prefix=/opt/mono-2.4 serve a fissare il path dove verra installato il tutto, ovviamente se scegliete un altro path questo si dovrà ripetere per ogni package da installare.

Inseriamo le seguenti righe nel file "/etc/profile" prima dell'ultima riga che inizia con export


if [ "$PKG_CONFIG_PATH" = "" ]; then
    PKG_CONFIG_PATH=/opt/mono-2.4/lib/pkgconfig:/usr/lib/pkgconfig
else
    PKG_CONFIG_PATH=/opt/mono-2.4/lib/pkgconfig:/usr/lib/pkgconfig:$PKG_CONFIG_PATH
fi

if [ "$MANPATH" = "" ]; then
    MANPATH="/opt/mono-2.4/share/man"
else
    MANPATH="/opt/mono-2.4/share/man:$MANPATH"
fi

PATH=/opt/mono-2.4/bin:/opt/mono-2.4/share:$PATH


e accodiamo alla fine della riga export " PKG_CONFIG_PATH MANPATH"

avremo del codice simile a questo:


if [ "$PKG_CONFIG_PATH" = "" ]; then
    PKG_CONFIG_PATH=/opt/mono-2.4/lib/pkgconfig
else
    PKG_CONFIG_PATH=/opt/mono-2.4/lib/pkgconfig:$PKG_CONFIG_PATH
fi

if [ "$MANPATH" = "" ]; then
    MANPATH="/opt/mono-2.4/share/man"
else
    MANPATH="/opt/mono-2.4/share/man:$MANPATH"
fi

PATH=/opt/mono-2.4/bin:/opt/mono-2.4/share:$PATH

export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE INPUTRC PKG_CONFIG_PATH MANPATH


modifichiamo quindi il file "/root/.bashrc" aggiungendo alla fine del file le seguenti righe:


if [ "$LD_LIBRARY_PATH" = "" ]; then
    LD_LIBRARY_PATH="/opt/mono-2.4/lib:/usr/lib/xulrunner-1.9"
else
    LD_LIBRARY_PATH="/opt/mono-2.4/lib:/usr/lib/xulrunner-1.9:$LD_LIBRARY_PATH"
fi

export LD_LIBRARY_PATH
export MOZILLA_FIVE_HOME=/usr/lib/xulrunner-1.9


attenzione nella vostra macchina al posto della directory "/usr/lib/xulrunner-1.9" potreste avere "/usr/lib/xulrunner-1.8" oppure "/usr/lib/xulrunner" a seconda della versione di firefox installata. La riga dell'esempio si riferisce a Centos 5.3 con installato firefox 3.0.11.

A questo punto conviene riavviare la macchina per aggiornare le variabili d'ambiente in modo corretto.

Dopo il riavvio apriamo la finestra terminal e ci posizioniamo di nuovo nella directory mono con il comando
"cd /root/source/mono"
e procediamo all'installazione dei rimanenti pacchetti.

Non stupitevi se tra una compilazione e l'altra alterniamo l'installazione di autoconf-2.61 e autoconf-2.63, purtroppo i vari package, provenendo da diverse fonti, utilizzano sia l'uno che l'altro e la sequenza con cui installiamo i pacchetti è importante.

Il gruppo di istruzioni seguenti è simile per ogni package:
 

wget http://ftp.gnome.org/pub/gnome/sources/atk/1.12/atk-1.12.4.tar.bz2

tar -jxf
atk-1.12.4.tar.bz2

cd
atk-1.12.4

./configure --prefix=/opt/mono-2.4

make

make install

cd ..

rpm -e --nodeps autoconf-2.63

rpm --install autoconf-2.61-10.fc9.noarch.rpm

wget
http://cairographics.org/releases/pixman-0.10.0.tar.gz

tar -zxf pixman-0.10.0.tar.gz

cd
pixman-0.10.0.tar

autoconf

./configure --prefix=/opt/mono-2.4

make

make install

cd ..

wget http://cairographics.org/releases/cairo-1.6.0.tar.gz

tar -zxf
cairo-1.6.0.tar.gz

cd
cairo-1.6.0

autoconf

./configure --prefix=/opt/mono-2.4

make

make install

cd ..

wget http://ftp.gnome.org/pub/gnome/sources/pango/1.20/pango-1.20.5.tar.bz2

tar -jxf
pango-1.20.5.tar.bz2

cd
pango-1.20.5

autoconf

./configure --prefix=/opt/mono-2.4

make

make install

cd ..

wget http://ftp.gnome.org/pub/gnome/sources/gtk+/2.12/gtk+-2.12.12.tar.bz2

tar -jxf
gtk+-2.12.12.tar.bz2

cd
gtk+-2.12.12

autoconf

./configure --prefix=/opt/mono-2.4

make

make install

cd ..

wget http://ftp.novell.com/pub/mono/sources/libgdiplus/libgdiplus-2.4.2.tar.bz2

tar -jxf libgdiplus-2.4.2.tar.bz2

cd libgdiplus-2.4.2

autoconf

./configure --prefix=/opt/mono-2.4

make

make install

cd ..

wget http://ftp.novell.com/pub/mono/sources/mono/mono-2.4.2.3.tar.bz2

tar -jxf mono-2.4.2.3.tar.bz2

cd mono-2.4.2.3

autoconf

./configure --prefix=/opt/mono-2.4 --with-libgdiplus=installed

make

make install

cd ..

wget http://ftp.novell.com/pub/mono/sources/mono-basic/mono-basic-2.4.2.tar.bz2

tar -jxf mono-basic-2.4.2.tar.bz2

cd mono-basic-2.4.2

./configure --prefix=/opt/mono-2.4

make

make install

cd ..

wget http://ftp.novell.com/pub/mono/sources/gtk-sharp210/gtk-sharp-2.10.4.tar.bz2

tar -jxf
gtk-sharp-2.10.4.tar.bz2

cd 
gtk-sharp-2.10.4

autoconf

./configure --prefix=/opt/mono-2.4

make

make install

cd ..

wget http://ftp.novell.com/pub/mono/sources/gluezilla/gluezilla-2.4.2.tar.bz2

tar -jxf gluezilla-2.4.2.tar.bz2

cd gluezilla-2.4.2

autoconf

./configure --prefix=/opt/mono-2.4

make

make install

cd ..

wget http://ftp.novell.com/pub/mono/sources/xsp/xsp-2.4.2.tar.bz2

tar -jxf xsp-2.4.2.tar.bz2

cd xsp-2.4.2

autoconf

./configure --prefix=/opt/mono-2.4

make

make install

cd ..

wget http://ftp.novell.com/pub/mono/sources/mod_mono/mod_mono-2.4.2.tar.bz2

tar -jxf mod_mono-2.4.2.tar.bz2

cd mod_mono-2.4.2

autoconf

./configure --prefix=/opt/mono-2.4

make

make install

cd ..

wget http://ftp.novell.com/pub/mono/sources/mono-addins/mono-addins-0.4.zip

unzip -x mono-addins-0.4

cd mono-addins-0.4

autoconf

./configure --prefix=/opt/mono-2.4

make

make install


A questo punto dovremmo ritrovarci con mono-2.4.2 correttamente installato.
 
Nella directory "/usr/lib/httpd/modules" di Apache sarà stato copiato "mod_mono.so" e nella directory "/etc/httpd/conf" troveremo il file di configurazione "mod_mono.conf" .
 
Nel mio caso, realizzo le web application in Windows utilizzando il pacchetto di programmazione VisualStudio 2008, quando tutto è testato e deployato correttamente, copio la directory contenente il sito in Linux è tutto funziona correttamente, ovviamente, non posso utilizzare funzionalità peculiari dell'ambiente Microsoft ma, fino ad ora non mi è mai capitato di averne bisogno.

Guardate questa pagina "default.aspx", all'apparenza semplice contiene due dll compilate con VisualStudio 2008 e sta funzionando su Apache 2.2 sotto Linux Centos 5.3.

Per chi invece non vuole lavorare in Windows, bisognerà installare monodevelop 2.0, vedi articolo
Installare MonoDevelop su Linux Centos.


Leggete inoltre gli articoli:
Creare una applicazione web ASP.NET con VisualStudio 2008
Agiungere un controllo di tipo Html Container in una applicazione web ASP.NET
Publicare una applicazione web ASP.NET su Apache 2.2


Ovviamente, prima di copiare il sito in Linux è possibile testare il tutto con Moma, un applicativo di mono che esegue un test di compatibilità, vedremo come in un successivo articolo compatibilmente con i miei impegni di lavoro.




Chi volesse, per richieste di aiuto o consigli, puo contattarmi all'indirizzo:
ctfranco@fcservice.com