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
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
depois de tudo instalado é necessário entrar no diretório tmp e baixar todos os tarballs
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
Agora será necessário descompactar os arquivos.
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
Feito isso, será necessário compilar e instalar o libgdiplus
cd libgdiplus-2.10 ./configure --prefix=/usr/local make ; make install
Agora vamos compilar e instalar o mono
cd ../mono-3.2.5 ./configure --prefix=/usr/local --with-libgdiplus=/usr/local make ; make install
Ao dar o make no mono possivelmente você vai ser presenteado com a seguinte mensagem de erro.
/bin/sh: line 4: cd: System.Collections.Concurrent: No such file or directory make[1]: *** [all-recursive] Error 1
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.
yum install git
Agora vamos clonar os repositórios do Mono, XSP, Mod_Mono e Libgdiplus.
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
Vamos começar a compilação dos fontes e a instalação…
cd libgdiplus ./autogen.sh --prefix=/usr/local make ; make install
Ao fazer esse processo possivelmente irá ocorrer o seguinte erro.
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
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.
autoreconf -fvi
Após isso vamos rodar o comando para compilar e instalar novamente.
./autogen.sh --prefix=/usr/local make ; make install
Dessa vez acredito que correu tudo bem com a instalação do libgdiplus, então vamos baixar e instalar o mono 2.10.2.
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
Depois disso será necessário setar as variáveis de ambiente
export PATH=$PATH:/usr/local/bin export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig
vamos nos certificar que está tudo certo, usando o comando abaixo:
mono --version
Agora podemos atualizar o mono.
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
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)
mono --version
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…
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
Após isso temos que copiar o arquivo de configuração para um diretório que o apache consiga enxergar.
mv /etc/httpd/conf/mod_mono.conf /etc/httpd/conf.d/
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.
service httpd restart
ao abrir o site deverá ocorrer um erro
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.
vi /etc/httpd/conf/httpd.conf
Inclua na última linha o seguinte trecho de código
MonoServerPath /usr/local/bin/mod-mono-server4
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
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.