jueves, 28 de abril de 2011

Compilar e instalar MonoDevelop y ASP.NET desde código fuente en Ubuntu y Debian. Otros aspectos de interés

En este artículo continuaremos con la instalación de Mono desde código fuente en Ubuntu y Debian, ahora enfocando el ambiente de desarrollo MonoDevelop y ASP.NET. Posteriormente, veremos algunos aspectos de configuración que nos permitirán trabajar de forma cómoda con aplicaciones de Mono y hablaremos un poco sobre la portabilidad y compatibilidad de marcos de trabajo y aplicaciones.
Prerrequisitos
Vimos en el artículo anterior una descripción de las bibliotecas principales y paquetes de Mono, además de los vínculos desde donde pueden descargarse. Recomendamos, para realizar una instalación minimal, la descarga de los siguientes paquetes:
Por supuesto, antes de compilar debemos tener correctamente instalado Mono, versión 2.6.7 o superior, además de los prerrequisitos vistos en el artículo anterior. Para que cuando se configure la compilación no se produzcan errores en las dependencias de librerías de desarrollo, debemos ejecutar la siguiente línea desde bash:
sudo aptitude install xulrunner-dev libgtk2.0-dev libglade2-dev \
libgnome2-dev libgnomecanvas2-dev libgnomeui-dev librsvg2-dev \
libgtksourceview2.0-dev libgtkhtml3.14-dev libvte-dev \
libpanel-applet2-dev libwebkit-dev libwnck-dev apache2-threaded-dev
Tampoco debemos olvidar que, para el caso de ASP.NET, es necesario el servidor web Apache2:
sudo aptitude install apache2
Compruebe que la variable PKG_CONFIG_PATH incluye el directorio donde está la configuración de paquetes del último Mono instalado, por ejemplo /opt/mono/lib/pkgconfig, si no, incluya en .bashrc la línea siguiente:
export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/opt/mono/lib/pkgconfig
Configuración, compilación e instalación
Los pasos ya los conocemos, normalmente no llevan variaciones, y deben realizarse en los correspondientes directorios después de descompactar los paquetes de código fuente. Ahora, el orden sí es importante, ya que, por ejemplo, el paquete monodevelop-2.4.2 depende de mono-addins-0.5. El orden ya lo definimos en el epígrafe de Prerrequisitos. Y como memento, esto es lo que debemos ejecutar:
./configure --prefix=/opt/mono
make -j 4
sudo make install
Es posible que alguno de los paquetes produzca algún error en la compilación. No se asuste, eso sucede en las mejores familias. He aquí un listado de los errores más comunes:
  • Faltan dependencian. Se produce a veces cuando se utiliza la opción -j n en el primer make.
    Solución: Ejecute make sin la opción mencionada.
  • Error, no encuentra el ensamblado Mono.GetOptions. Por lo general, se produce en códigos de pruebas o ejemplos que utilizan versiones más antiguas de Mono.
    Solución: Debe localizarse el archivo para la compilación automática, Makefile, en el directorio donde está el archivo .cs que provocó el error. Dentro de Makefile, buscar el nombre del fichero que dio problemas, y comentar consecuentemente con # las líneas en las que aparezca. Por último, vuelva a ejecutar make.
  • Error en PrintSample.cs. Este es un archivo de pruebas que utiliza una API vieja.
    Solución: Localice el archivo y comente todo el código con /* y */.
Así luce MonoDevelop:

Configuración de mod_mono
mod_mono es el paquete de código fuente que genera el módulo de Apache mod_mono.mod, el cual se ejecuta cuando los sitios web se marcan como manejados por Mono. Una vez compilado e instalado, se coloca en el directorio /etc/apache2 un archivo mod_mono.conf, que contiene la configuración básica para las aplicaciones ASP.NET, carga el módulo y registra las extensiones de los archivos a manejar. Para estar a tono con el modo en que se configura Apache en Ubuntu o Debian,  podemos ejecutar este pequeño script, que registrará automáticamente el módulo:
sudo mv /etc/apache2/mod_mono.conf /etc/apache2/mods-available
sudo ln -s /etc/apache2/mods-available/mod_mono.conf \
  /etc/apache2/mods-enabled/mod_mono.conf
sudo /etc/init.d/apache2 restart
Luego, en el archivo /etc/apache2/httpd.conf podemos registrar tantos sitios de ASP.NET como queramos usando un fragmento similar al siguiente:
Alias /demo "/opt/mono/lib/xsp/test"
AddMonoApplications "/demo:/opt/mono/lib/xsp/test"
<Location /demo>
         SetHandler mono
</Location>
En este caso, hemos registrado un sitio de ejemplos de ASP.NET que viene con XSP una vez que este último se ha instalado. En el sitio de Mono, hay una página dedicada a la configuración de mod_mono que ofrece muchos más detalles.

Ejecutar aplicaciones de Mono como archivos ejecutables
Primeramente, debemos colocar un archivo run_mono.sh como el siguiente en /etc/rc.local:
#!/bin/bash
/usr/sbin/update-binfmts --disable cli
/usr/sbin/update-binfmts --disable CLR
if [ ! -e /proc/sys/fs/binfmt_misc/register ]; then
        /sbin/modprobe binfmt_misc
        mount -t binfmt_misc none /proc/sys/fs/binfmt_misc
fi

if [ -e /proc/sys/fs/binfmt_misc/register ]; then
        echo ':CLR:M::MZ::/opt/mono/bin/mono:' \
             > /proc/sys/fs/binfmt_misc/register
else
        echo "No binfmt_misc support"
        exit 1
fi
Después comprobamos, como se indica a continuación, que el enlace suave /etc/alternatives/cli apunta a la última aplicación mono instalada:
ls -l /etc/alternatives/cli
lrwxrwxrwx 1 root root 13 2010-11-19 07:58 /etc/alternatives/cli 
  -> /opt/mono/bin/mono
Si no es así, ejecutamos lo siguiente:
sudo ln -s /opt/mono/bin/mono /etc/alternatives/cli
Por último, cambiamos los permisos de la aplicación Mono para permitir la ejecución y la corremos:
chmod a+x App.exe
./App.exe
Portabilidad y compatibilidad
Para comprobar que un ensamblado compilado con Microsoft .NET Framework es compatible con Mono, determinando en qué estado de implementación se hallan las dependencias, puede usarse la herramienta Mono Migration Analyzer MoMA. También en http://go-mono.com/status/ podemos encontrar de manera exhaustiva e intuitiva el estado en la implementación de las clases de la BCL.

Estas son algunas de las bibliotecas que he comprobado que funcionan:

No hay comentarios:

Publicar un comentario