lunes, 18 de mayo de 2009

Instalando Mono2.4 en Ubuntu

Hacía mucho tiempo que no escribía, y en parte es porque he tenido una crisis tecnológica, provocada por una temporada de programación en Silverlight 2.0.
No voy a entrar en detalles pero para que os hagaís una idea sólo os diré que echaba de menos la programación en el Cobol Microfocus con Dialog System, prefería el Cobol antes que seguir programando en el bicho ese.
Me sentía como el señor Fuckowski en el Proyecto Porsche, intentando hacer un Porsche de una bicicleta, con un destornillador y cubo de pintura.
Resumiendo, Silverlight es eso un destornillador, un cubo de pintura, y una pregunta :
¿A quién c...o se le ha ocurrido sacar esto al mercado?
No negaré que en mis sueños lo he estrangulado varios "cienes y cienes" de veces.
Pero como nunca llueve eternamente, un día descubrí algo que llamo mi atención: ¿qué cosa es esa de un Runtime compatible con .NET, que se programa en C# y que se ejecuta en cualquier plataforma?
No me podréis negar que a priori no es interensate, por suerte para nosotros ese Runtime existe y se llamaMono.
Como no tenía ni idea, pues empecé por el principio, me instalé Ubuntu en una máquina virtual. No me costó mucho tiempo acostumbrarme al Ubuntu, la verdad es que acostumbrarte a un sistema operativo, que no tarda tres telediarios en abrir un explorador de carpertas, no cuesta.
Así que con un poco de paciencia y con el tito Google, pronto aprendí a utilizar un poquito un sistema operativo con cara y ojos. Mi siguiente paso fue instalar la última versió de Mono, Ubuntu trae una versión pero no es la última.
A continuació explicaremos como instalar Mono 2.4 en Ubuntu 9.04.


1. Instalado los prerequisitos.

Primero necesitamos configurar la herramientas para compilar el código fuente. Estas se puede instalar desde el Synaptic o bien desde la consola.
Abrimos una consola y escribimos los siguiente para instalar el software y las cabeceras necesarias para la compilación.


sergiob@sergiob-mono:~$ sudo apt-get update sergiob@sergiob-mono:~$ sudo apt-get install build-essential autoconf automake \ bison flex gtk-sharp2-gapi boo gdb valac libfontconfig1-dev \ libcairo2-dev libpango1.0-dev libfreetype6-dev libexif-dev \ libjpeg62-dev libtiff4-dev libgif-dev zlib1g-dev libatk1.0-dev \ libglib2.0-dev libgtk2.0-dev libglade2-dev libart-2.0-dev \ libgnomevfs2-dev libgnome-desktop-dev libgnome2-dev libgnomecanvas2-dev \ libgnomeui-dev libgnomeprint2.2-dev libgnomeprintui2.2-dev \ libpanel-applet2-dev libnautilus-burn-dev librsvg2-dev \ libgtkhtml3.14-dev libgtksourceview2.0-dev libgtksourceview-dev \ libvte-dev libwnck-dev libnspr4-dev libnss3-dev libxul-dev \ libwebkit-dev libvala-dev

2. Descargar los fuentes de Mono.
De Mono Project nos descargaremos los siguientes archivos fuentes, en el ftp encontraréis más pero no es necesario que los descargéis todos.

mono-2.4.tar.bz2
libgdiplus-2.4.tar.bz2
gluezilla-2.4.tar.bz2
xsp-2.4.tar.bz2
mono-tools-2.4.tar.bz2
gecko-sharp-2.0-0.13.tar.bz2
mono-debugger-2.4.tar.bz2
mono-addins-0.4.zip
gtk-sharp-2.12.8.tar.bz2
gnome-sharp-2.20.1.tar.bz2
gnome-desktop-sharp-2.20.1.tar.bz2
webkit-sharp-0.2.tar.bz2

A continuación descargaremos los fuentes de Monodevelop 2.0

monodevelop-2.0
monodevelop-debugger-mdb-2.0
monodevelop-debugger-gdb-2.0
monodevelop-database-2.0
monodevelop-java-2.0
monodevelop-vala-2.0

Ahora ya sólo nos queda extraer los fuentes de los ficheros que hemos descargado en un direcotorio, por ejemplo src/mono-2.4

sergiob@sergiob-mono:~$ mkdir -p src/mono-2.4; cd src/mono-2.4

Extraemos todos los archivos en este directorio.

3. Instalar libgdiplus.

Antes de compilar el fuente de mono tenemos que compilar libgdiplus para poder tener una implementación de System.Drawing.

sergiob@sergiob-mono:~$ cd libgdiplus-2.4
sergiob@sergiob-mono:~/src/mono-2.4/libgdiplus-2.4$ ./configure --with-pango

Si la configuración a funcionado correctamente nos aparecerá algo como esto.

--- Configuration summary * Installation prefix = /usr/local * Cairo = 1.8.6 (system) * Text = pango * EXIF tags = yes * Codecs supported: - TIFF: yes - JPEG: yes - GIF: yes - 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. ---
Si no es así y nos falta alguna dependencia podemos usar Synaptic para instalar el paquete.

Ahora ya podemos compilar e instalar el fuente.
sergiob@sergiob-mono:~/src/mono-2.4/libgdiplus-2.4$ make
sergiob@sergiob-mono:~/src/mono-2.4/libgdiplus-2.4$ sudo make install

4. Instalar mono-2.4.

Ha llegado el momento de compilar Mono, esto producirá los compiladores de C# y el Framwork de Mono, vamos manos a la obra.

sergiob@sergiob-mono:~/src/mono-2.4/mono-2.4$ ./configure
sergiob@sergiob-mono:~/src/mono-2.4/mono-2.4$ make
sergiob@sergiob-mono:~/src/mono-2.4/mono-2.4$ sudo make install

sergiob@sergiob-mono:~/src/mono-2.4/mono-2.4$ mono --version Mono JIT compiler version 2.4 (tarball lun may 18 13:20:54 CEST 2009) Copyright (C) 2002-2008 Novell, Inc and Contributors. www.mono-project.com TLS: __thread GC: Included Boehm (with typed GC) SIGSEGV: altstack Notifications: epoll Architecture: x86 Disabled: none

5. Gtk+ y Gnome.

A continuación instalaremos las librerias necesarias para las aplicaciones de escritorio, gtk-sharp, gnome-sharp, gnome-desktop-sharp, gtksourceview-sharp.

sergiob@sergiob-mono:~/src/mono-2.4/gtk-sharp-2.12.8$ ./configure
sergiob@sergiob-mono:~/src/mono-2.4/gtk-sharp-2.12.8$ make
sergiob@sergiob-mono:~/src/mono-2.4/gtk-sharp-2.12.8$ sudo make install
sergiob@sergiob-mono:~/src/mono-2.4/gnome-sharp-2.20.1$ ./configure
sergiob@sergiob-mono:~/src/mono-2.4/gnome-sharp-2.20.1$ make
sergiob@sergiob-mono:~/src/mono-2.4/gnome-sharp-2.20.1$ sudo make install
sergiob@sergiob-mono:~/src/mono-2.4/gnome-desktop-sharp-2.20.1$ ./configure
sergiob@sergiob-mono:~/src/mono-2.4/gnome-desktop-sharp-2.20.1$ make
sergiob@sergiob-mono:~/src/mono-2.4/gnome-desktop-sharp-2.20.1$ sudo make install
sergiob@sergiob-mono:~/src/mono-2.4/gtksourceview-sharp-2.0-0.12$ ./configure
sergiob@sergiob-mono:~/src/mono-2.4/gtksourceview-sharp-2.0-0.12$ make
sergiob@sergiob-mono:~/src/mono-2.4/gtksourceview-sharp-2.0-0.12$ sudo make install

6. Gluezilla, Gecko-Sharp y Webkit-Sharp.


sergiob@sergiob-mono:~/src/mono-2.4/gluezilla-2.4$ ./configure
sergiob@sergiob-mono:~/src/mono-2.4/gluezilla-2.4$ make
sergiob@sergiob-mono:~/src/mono-2.4/gluezilla-2.4$ sudo make install
sergiob@sergiob-mono:~/src/mono-2.4/gecko-sharp-2.0-0.13$ ./configure
sergiob@sergiob-mono:~/src/mono-2.4/gecko-sharp-2.0-0.13$ make
sergiob@sergiob-mono:~/src/mono-2.4/gecko-sharp-2.0-0.13$ sudo make install
sergiob@sergiob-mono:~/src/mono-2.4/webkit-sharp-0.2$ ./configure
sergiob@sergiob-mono:~/src/mono-2.4/webkit-sharp-0.2$ make
sergiob@sergiob-mono:~/src/mono-2.4/webkit-sharp-0.2$ sudo make install

7. Mono-Addins, Mono-Tools.

Ahora instalaremos los addins y la colección de herramientas de Mono que incluyen Gendarme y GSharp(consola de C#).
sergiob@sergiob-mono:~/src/mono-2.4/mono-addins-0.4$ ./configure
sergiob@sergiob-mono:~/src/mono-2.4/mono-addins-0.4$ make
sergiob@sergiob-mono:~/src/mono-2.4/mono-addins-0.4$ sudo make install
sergiob@sergiob-mono:~/src/mono-2.4/mono-tools-2.4$ ./configure
sergiob@sergiob-mono:~/src/mono-2.4/mono-tools-2.4$ make
sergiob@sergiob-mono:~/src/mono-2.4/mono-tools-2.4$ sudo make install

Para comprobar que las herramientas se ha instalado podemos realizar el siguiente test, en el que aparecera la consola de C#.
sergiob@sergiob-mono:~$ gsharp

8. Mono XSP y Mono Debugger.

Por último, antes de instalar MonoDevelop, instalaremos XSP, que es un web server desarrollado en C#. Y el Debugger que nos permitirá depurar el código escrito.
sergiob@sergiob-mono:~/src/mono-2.4/xsp-2.4$ ./configure
sergiob@sergiob-mono:~/src/mono-2.4/xsp-2.4$ make
sergiob@sergiob-mono:~/src/mono-2.4/xsp-2.4$ sudo make install
sergiob@sergiob-mono:~/src/mono-2.4/mono-debugger-2.4$ ./configure
sergiob@sergiob-mono:~/src/mono-2.4/mono-debugger-2.4$ make
sergiob@sergiob-mono:~/src/mono-2.4/mono-debugger-2.4$ sudo make install

9. MonoDevelop.

Ahora ya estamos listos para instalar MonoDevelop.
sergiob@sergiob-mono:~/src/mono-2.4/monodevelop-2.0$ ./configure
sergiob@sergiob-mono:~/src/mono-2.4/monodevelop-2.0$ make
sergiob@sergiob-mono:~/src/mono-2.4/monodevelop-2.0$ sudo make install
sergiob@sergiob-mono:~/src/mono-2.4/monodevelop-debugger-mdb-2.0$ ./configure
sergiob@sergiob-mono:~/src/mono-2.4/monodevelop-debugger-mdb-2.0$ make
sergiob@sergiob-mono:~/src/mono-2.4/monodevelop-debugger-mdb-2.0$ sudo make install
sergiob@sergiob-mono:~/src/mono-2.4/monodevelop-debugger-gdb-2.0$ ./configure
sergiob@sergiob-mono:~/src/mono-2.4/monodevelop-debugger-gdb-2.0$ make
sergiob@sergiob-mono:~/src/mono-2.4/monodevelop-debugger-gdb-2.0$ sudo make install
sergiob@sergiob-mono:~/src/mono-2.4/monodevelop-database-2.0$ ./configure
sergiob@sergiob-mono:~/src/mono-2.4/monodevelop-database-2.0$ make
sergiob@sergiob-mono:~/src/mono-2.4/monodevelop-database-2.0$ sudo make install
sergiob@sergiob-mono:~/src/mono-2.4/monodevelop-java-2.0$ ./configure
sergiob@sergiob-mono:~/src/mono-2.4/monodevelop-java-2.0$ make
sergiob@sergiob-mono:~/src/mono-2.4/monodevelop-java-2.0$ sudo make install
sergiob@sergiob-mono:~/src/mono-2.4/monodevelop-vala-2.0$ ./configure
sergiob@sergiob-mono:~/src/mono-2.4/monodevelop-vala-2.0$ make
sergiob@sergiob-mono:~/src/mono-2.4/monodevelop-vala-2.0$ sudo make install

Llegados a este punto, ya deberiamos tener instalado el Mono 2.4 y el MonoDevelop 2.0 sin muchos problemas. No desesperéis si yo lo he podido hacer, entonces lo puede hacer hasta un mono debidamente entrenado o certificado.
Espero que os haya sido de ayuda.