Tenho tido cada vez mais gente a perguntar-me como instalar o Mono no Linux. Principalmente colegas do ISEL, que começam agora com as cadeiras de .NET, e que querem fazer os trabalhos no Linux. Também tenho outras pessoas que são mais curiosas, que apenas querem experimentar para ver como é. Basicamente há duas maneiras de instalar o mono e todas as ferramentas associadas: através de RPM's ou compilando o código. Além do Mono e do mcs (compilador de C#), também são necessários vários outros pacotes para que se tenha tudo a funcionar bem, como:
GTK#: Permite correr aplicações gráficas em .NET, com o gtk-sharp; XSP/mod_mono: Permite correr as ASP.NET no Linux. O XSP é um mini servidor web independente, o mod_mono serve para ligar ao Apache;
MonoDoc: Género de MSDN, é o projecto de documentação do Mono. Contudo não está tãoc ompleto como a MSDN (nem pouco mais ou menos);
MonoDevelop: A IDE! Está aqui um screenshoot na minha máquina;
Isto é a base. Ambos estes pacotes têm várias dependências.
Mas vale a pena instalar o Mono? Vou poder correr as minhas aplicações em .NET?
O Mono ainda não está completo. Por exemplo, as SWF (System.Windows.Forms) não estão disponíveis. Pode-se no entanto fazer aplicações gráficas com o GTK#, QT#, wxWindows.NET, entre outras. Fora este pormenor, está quase tudo pronto. As ASP .NET já estão completamente funcionais, o compilador de C# também já está a 100%, e namespaces como as System.Collections, System.IO, System.Xml, System.Emit, etc... já estão prontas. Sem ser as SWF, não tenho conhecimento de algo mais que falte ao Mono (se bem que o haja).
Instalar apartir de RPM's
Instalar apartir de RPM's deve ser sempre a primeira escolha, pois poupa muito trabalho. Principalmente para aqueles que só querem experimentar. Para esses, sugiro que escolham uma distro que tenha RPMs disponíveis. Uma forma muito fácil de instalar é usar o Red Carpet da Ximian. Sublinho que é preferível usar RPMs! Só devem continuar a seguir este artigo quem não tiver RPMs para a sua distro, ou quem for mais curioso.
Compilar e Instalar o Mono
Para começar, toca a ir ao site do Mono, à secção de downloads, e sacar na parte de Source Code o pacote do Mono (algo do tipo mono-XXX.tar.gz). Neste momento a última versão seria: mono-0.31.tar.gz. Nota que este pacote já trás o runtime, o compilador de C#, e as class libraries, como o System.dll, System.Xml.dll, etc.
O Mono tem como dependência opcional o ICU, que basicamente trata da internacionalização. Se não compilarem o Mono com o ICU instalado, não poderão correr o NAnt, o MonoDevelop, etc.
Para compilar o Mono, são precisos obrigatoriamente dois componentes: pkg-config e glib 2.0. Provavelmente a vossas distribuição já vêm com eles, mas se der erro a pedir estes pacotes já sabem... Para começar, primeiro situem-se na directoria para onde fizeram download do pacote mono-XXX.tar.gz. Depois:
tar xzvf mono-X.XX.tar.gz
cd mono-X.XX
Agora os comandos do costume. Nota que devem instalar todos os pacotes no prefixo /usr/local (directoria onde será instalado). Muitos pacotes usam este prefixo por defeito, e se não estiver tudo no mesmo prefixo vai dar problemas. Pode-se usar outro, mas sempre que instalarem algo não se esqueçam de fazer o autogen.sh/configure com esse prefixo.
./configure --prefix=/usr/local
make
su -c "make install"
Aquele su é para passar para root (modo priviligiado). Isto porque não é qualquer user que tem premissões para mexer no sistema. Naturalmente, se já estiverem como root, basta fazer o make install. Se tudo correu bem, então já se pode chamar os comandos mono e mcs. A esta altura sugiro que compilem e corram um pequeno programa de teste, do género do "Hello World":
mcs hello.cs
mono hello.exe
Nota que é necessário usar o mono para invocar o a VM do Mono, tal como se usa o java. Há formas para configurar o kernel para correr automaticamente .exe, mas deixo isso para os mais curiosos.
Importante: ao instalar é criado um ficheiro de configuração para o pkg-config. Se por ventura ao instalar outros pacotes quaisquer, os scripts de instalação derem erro a indicar que não encontram o mono e pedirem para exportar o sítio onde está o ficheiro mono.pc, então têm de o fazer!

export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig/
E de seguida chamar novamente os ficheiros de configuração. Se não souberem onde está o ficheiro, fazer um find.
Compilar e Instalar o XSP
Agora é fácil. Basta is aos downloads e sacar o xsp-X.X.tar.gz. Descompactar e correr os comandos do costume:
tar xzvf xsp-X.X.tar.gz
cd xsp-X.X
./configure --prefix=/usr/local
make
su -c "make install"
O XSP é muito fácil de utilizar, basta por o programa a correr na directoria onde têm a vossa aplicação web. Por defeito ele coloca-se no porto 8080. Depois é só irem ao browser e: http://localhost:8080/. Nota que todos os assemblies de code behind têm de estar numa directoria bin da vossa aplicação web, tal como é com o IIS. Ver o readme e os exemplos.
Compilar e Instalar o GTK#
O primeiro passo é ir fazer o download ao site do GTK#.
Este é que é mais complicado. Isto porque pouca gente olha com olhos de ver ao resultado do script de configuração. Conforme um certo número de bibliotecas estejam disponíveis, vão ser criados/instaldos os wrappers dessas bibliotecas para .NET. Por exemplo o gtk-sharp.dll, o gnome-sharp.dll ou o glade-sharp.dll. Ao correr o autogen.sh, é dada a informação de quais bibliotecas foram encontradas:
./autogen.sh --prefix=/usr/local
(...)
Configuration summary
* Installation prefix = /usr/local
Optional assemblies included in the build:
* gnome-sharp.dll: yes
* glade-sharp.dll: yes
* gda-sharp.dll: no
* gnomedb-sharp.dll: no
* rsvg-sharp.dll: no
* gtkhtml-sharp.dll: yes
* vte-sharp.dll: no
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.
Basta instalar as bibliotecas de desenvolvimento do pacote pretendido, voltar a correr o autogen.sh, compilar e instalar para que estas estejam disponíveis. Pelo menos aquelas que eu tenho como 'yes', vocês também têm de ter. Estas bibliotecas normalmente vêm nos CDs da vossa distribuição -- por exemplo instalar qualquer coisa como gnome-devel... para obter o gnome-sharp.dll.
Assim que estiverem a postos podem compilar e instalar:
make
su -c "make install"
Compilar e Instalar o MonoDevelop
O primeiro passo é ir fazer o download da última release do MonoDevelop. Esta IDE também tem várias dependências que têm de ser instaladas para que tudo funcione bem:
* Mono >= 0.30 com ICU
* gtkmozembed (incluído no código do MonoDevelop)
* Gtk# >= 0.17
* ORBit2-2.8.3 or newer (opcional)
* GtkSourceView#
O MonoDevelop usa o configure em vez do autogen. E também dá um sumários das dependências disponíveis:
./configure --prefix=/usr/local
(...)
Configuration summary
* Installation prefix = /usr/local/
* GNOME prefix = /usr
* gnomevfs 2.0: yes
* gtk-sharp 0.17: yes
* gtkmozembed 1.2: no
* gtksourceview 0.7: yes
* gtksourceview-sharp 0.1: yes
* mono 0.30: yes
NOTE: if any of the above say 'no' you may install the
corresponding development packages for them, and
rerun autogen.sh. If you are sure the proper
libraries are installed, use PKG_CONFIG_PATH to
point to their .pc files
Depois de tudo o que já falei das dependências e do pkg-config, acho que não terão problemas em instalar o necessário para que se possa compilar o MonoDevelop. De todas aquelas dependências, a mais chata é o gtksourceview-sharp, que até agora só encontrei no CVS. Por isso temos de sacar:
export CVSROOT=:pserver:anonymous@anoncvs.go-mono.com:/mono
cvs login
cvs -z3 co gtksourceview-sharp
cd gtksourceview-sharp
./autogen.sh --prefix=/usr/local
make
su -c "make install"
Após ter instalado este pacote, já se pode chamar de novo o script de configuração. Todos aquelas dependências que têm o 'yes' são obrigatórias, se vocês também tiverem o 'yes' então tudo bem. Compilar e instalar como de costume:
./configure --prefix=/usr/local
make
su -c "make install"
Aquela dependência do gtkmozembebed, é para ter o Gecko (motor do Mozilla) disponível no MonoDevelop. Isso permite por exemplo estar a fazer uma página HTML na IDE, com uma janela ao lado a fazer automaticamente o preview, como se pode ver nesta imagem. Também já está a ser preparado a integração do debugger no MonoDevelop. Provavelmente virá na release 0.2. Aqui está uma imagem do debugger em acção. Isto tudo, junto com o intelisense, faz com que o MonoDevelop já dê para programar sem grandes precalços.
Em jeito de Conclusão
Qualquer problema, deixem em comentário, que eu tentarei ajudar. Nota que se pode secar todo o código do Mono do CVS, o que é bom, para os curiosos que querem ver como se fazem certas classes. Na minha página(psantos.net) também vou pondo novidades sobre o Mono, entre outras coisas. E estarei disponível para quem quiser tirar dúvidas.

http://go-mono.com/
http://www.go-mono.com/monologue/