Tempo de leitura: 5 minutos

Update: Este artigo foi escrito em uma época onde a única opção para rodar .NET no linux era o MONO, hoje em dia o .NET tem suporte nativo ao linux através do .NET Core.

Acredito que a essa altura do campeonato você, meu nobre leitor,  já conheça o mono, já que eu sou um entusiasta do sistema e vira e mexe posto algo a respeito dele por aqui.

Para quem ainda não conhece, o mono é uma plataforma que possibilita rodar aplicações desenvolvidas no Framework .NET no linux, na sua versão mais atual que no momento é a 3.2.7, ele já roda com sucesso código desenvolvido com C# 5.0, o mono está em constante desenvolvimento, isso significa que você  ainda pode encontrar alguns problemas, mas a correção desses problemas é bem rápida, visto que a comunidade é bem ativa, caso você queira dar uma conferida no que o mono não faz, basta dar uma olhadinha na lista de compatibilidade do mono.

Hoje eu vou explicar como ter a última versão do mono na sua máquina rodando o CentOS, no meu caso a VPS está rodando uma instalação zerada do CentOS 6.5, na teoria deveria ser muito fácil instalar a última versão do mono, é só baixar o tarball, compilar e está tudo certo não?

Bem, não exatamente… temos disponíveis nos fontes oficiais os seguintes build’s

Mono: 3.2.5

LibGDIPlus: 2.10

XSP: 2.10

Mod_Mono: 2.10

Primeiro será necessário instalar as bibliotecas, basta utilizar o seguinte comando

[code language=”bash”]yum -y install httpd httpd-devel make glib2-devel libpng-devel libjpeg-devel giflib-devel libtiff-devel libX11-devel gcc* fontconfig-devel bison gettext bzip2 libtool automake autoconf wget unzip[/code]

depois de tudo instalado é necessário entrar no diretório tmp e baixar todos os tarballs

[code language=”bash”]

cd /tmp

wget http://download.mono-project.com/sources/mono/mono-3.2.5.tar.bz2
wget http://download.mono-project.com/sources/xsp/xsp-2.10.2.tar.bz2
wget http://download.mono-project.com/sources/mod_mono/mod_mono-2.10.tar.bz2
wget http://download.mono-project.com/sources/libgdiplus/libgdiplus-2.10.tar.bz2

[/code]

Agora será necessário descompactar os arquivos.

[code language=”bash”]

tar -xjf mono-3.2.5.tar.bz2
tar -xjf xsp-2.10.2.tar.bz2
tar -xjf mod_mono-2.10.tar.bz2
tar -xjf libgdiplus-2.10.tar.bz2[/code]

Feito isso, será necessário compilar e instalar o libgdiplus

[code language=”bash”]cd libgdiplus-2.10
./configure –prefix=/usr/local
make ; make install[/code]

Agora vamos compilar e instalar o mono

[code language=”bash”]

cd ../mono-3.2.5
./configure –prefix=/usr/local –with-libgdiplus=/usr/local
make ; make install

[/code]

Ao dar o make no mono possivelmente você vai ser presenteado com a seguinte mensagem de erro.

[code language=”bash”]

/bin/sh: line 4: cd: System.Collections.Concurrent: No such file or directory

make[1]: *** [all-recursive] Error 1

[/code]

Esse problema já é conhecido da equipe do mono, conforme relato aqui, mas, até o presente momento ainda não foi liberado nenhum tarball com a correção, o que nos deixa apenas com a opção de instalar direto do repositório do mono no github, não é?

Antes de instalar direto do repositório do GitHub será necessário ter uma instalação do mono funcionando, caso contrário irá ocorrer um novo erro, vamos então instalar a versão 2.10.2 e depois iremos atualizar para a versão mais recente…

como a máquina está com uma instalação limpa do CentOS será necessário instalar o git para poder baixar os fontes.

[code language=”bash”]yum install git[/code]

Agora vamos clonar os repositórios do Mono, XSP, Mod_Mono e Libgdiplus.

[code language=”bash”]

git clone git://github.com/mono/mono.git

git clone git://github.com/mono/xsp.git

git clone git://github.com/mono/mod_mono.git

git clone git://github.com/mono/libgdiplus.git

[/code]

Vamos começar a compilação dos fontes e a instalação…

[code language=”bash”]

cd libgdiplus

./autogen.sh –prefix=/usr/local

make ; make install

[/code]

Ao fazer esse processo possivelmente irá ocorrer o seguinte erro.

[code language=”bash”]libtool: Version mismatch error. This is libtool 2.4.2, but the
libtool: definition of this LT_INIT comes from libtool 2.2.6b.
libtool: You should recreate aclocal.m4 with macros from libtool 2.4.2[/code]

Esse erro ocorre devido à versão do libtool disponível no mono estar mais avançada que a versão do libtool que instalamos com o YUM,

Então será necessário reconfigurar o pacote, faremos isso com o comando abaixo.

[code language=”bash”]

autoreconf -fvi

[/code]

Após isso vamos rodar o comando para compilar e instalar novamente.

[code language=”bash”]

./autogen.sh –prefix=/usr/local

make ; make install

[/code]

Dessa vez acredito que correu tudo bem com a instalação do libgdiplus, então vamos baixar e instalar o mono 2.10.2.

[code language=”bash”]

wget http://download.mono-project.com/sources/mono/mono-2.10.2.tar.bz2
tar -xjf mono-2.10.2.tar.bz2

cd ../mono-2.10.2
./configure –prefix=/usr/local –with-libgdiplus=/usr/local
make ; make install

[/code]

Depois disso será necessário setar as variáveis de ambiente

[code language=”bash”]

export PATH=$PATH:/usr/local/bin
export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig[/code]

vamos nos certificar que está tudo certo, usando o comando abaixo:

[code language=”bash”]mono –version[/code]

versao_mono

Agora podemos atualizar o mono.

[code language=”bash”]

cd ../mono

git submodule init

git submodule update

./autogen.sh –prefix=/usr/local –with-libgdiplus=/usr/local

./configure –prefix=/usr/local –with-libgdiplus=/usr/local
make ; make install

[/code]

depois disso vamos conferir qual versão do mono foi instalada (pelo menos a versão mais atual no momento que este post foi escrito)

[code language=”bash”]mono –version[/code]

versao_mono_2

Já estamos com a última versão! agora vamos instalar o XSP e o Mod_Mono que é o módulo do mono para o apache…

[code language=”bash”]

cd ../xsp
./autogen.sh –prefix=/usr/local
make ; make install

cd ../mod_mono
./autogen.sh –prefix=/usr/local –with-mono-prefix=/usr/local
make ; make install

[/code]

Após isso temos que copiar o arquivo de configuração para um diretório que o apache consiga enxergar.

[code language=”bash”]mv /etc/httpd/conf/mod_mono.conf /etc/httpd/conf.d/[/code]

Agora vamos testar subindo um site simples feito em ASP.NET, caso esteja com preguiça pode baixar um que eu fiz, clicando aqui.

No caso de uma instalação do CentOS sem nenhum painel de controle, com acesso pelo IP, os arquivos tem que ser colocados no diretório /var/www/html, após subir os arquivos por via das dúvidas vamos reiniciar o apache.

[code language=”bash”]service httpd restart[/code]

ao abrir o site  deverá ocorrer um erro

erro_site

Como pode ser visto no rodapé, a versão do ASP.NET que está sendo utilizada é a versão 2.0, precisamos alterar para que seja utilizada a versão mais recente, para isso temos que incluir uma linha no httpd.conf.

[code language=”bash”]vi /etc/httpd/conf/httpd.conf[/code]

Inclua na última linha o seguinte trecho de código

[code language=”bash”]MonoServerPath /usr/local/bin/mod-mono-server4[/code]

salve e reinicie o apache, agora ao atualizar a página, você deve ver os dados do ambiente e mais o trace da página

tela_dotnet

Show de boleta, mono rodando na última versão!!! 8)

Lembrando que o mono tem um recurso chamado AutoConfiguration que já é ativado por padrão ou seja, exceto se você for trabalhar com páginas ASP.NET MVC, é só pegar copiar o site pro FTP sem precisar configurar nada, é deploy & enjoy.

Se este post te ajudou ou caso tenha ocorrido algum erro não descrito aqui, deixe um comentário. eu respondo o mais rápido possível… ou não.

VN:F [1.9.22_1171]
Rating: 0.0/10 (0 votes cast)
VN:F [1.9.22_1171]
Rating: +2 (from 2 votes)