Inside-Informationen über Pokefans: was bei uns so unter der Haube läuft. Kurioses, Interessantes oder auch einfach nur Einblicke in das, was wir so den lieben langen Tag machen.

Zum Inhalt | Zum Menü | Zur Suche

Donnerstag, 20. August 2015

Entwicklung mit monodevelop auf Arch GNU/Linux

Nachdem ich jetzt einige Zeit mit programmieren unter Arch Linux verbracht habe - wie einige aufmerksame Leser vielleicht durch unseren IRC-Channel mitbekommen haben - will ich hier kurz meine Erfahrungen damit niederlegen. Vielleicht kann ja der ein oder andere damit was anfangen - und am besten Nachmachen.

Vorbereitungen

Damit unser Zeug überhaupt unter Linux läuft, braucht man ein aktuelles Mono. Aktuell heißt in dem Fall: mindestens Version 4.3. In den Repositories ist derzeit 4.0.2 - und das ist aus mehreren Gründen zu alt:

  1. Ihm fehlt mein Patch für System.Web
  2. es hat noch nicht das Reference-Source System.Data (und ist damit inkompatibel zu Glimpse)

Was also tun? Die Antwort hierauf ist einfach: ein parallel Mono environment aufsetzen! Leider ist die dazugehörige Anleitung nicht mehr ganz aktuell, daher mag ich das ganz kurz zusammenfassen. Vorausgesetzt wird ein bereits installiertes mono-complete aus den Repositories deiner Linux-Distribution.

mono kompilieren


git clone https://github.com/mono/mono
cd mono
./configure --prefix=/opt/mono
make
sudo make install

Wir holen uns Mono von github, konfigurieren es den Präfix /opt/mono zu verwenden, bauen es und installieren es nach /opt/mono.

Das dauert jetzt seine zeit. Hol dir inzwischen einen Kakao und ein paar Kekse. Alles fertig? Gut. Dann können wir ja weitermachen. Jetzt kompilieren wir xsp, gnome-sharp und gtk-sharp. Dazu wechseln wir zu allererst ins Parallel Mono Environment:


#!/usr/bin/env bash

MONO_PREFIX=/opt/mono
GNOME_PREFIX=/opt/gnome
export DYLD_FALLBACK_LIBRARY_PATH=$MONO_PREFIX/lib:$DYLD_LIBRARY_FALLBACK_PATH
export LD_LIBRARY_PATH=$MONO_PREFIX/lib:$LD_LIBRARY_PATH
export C_INCLUDE_PATH=$MONO_PREFIX/include:$GNOME_PREFIX/include
export ACLOCAL_PATH=$MONO_PREFIX/share/aclocal
export PKG_CONFIG_PATH=$MONO_PREFIX/lib/pkgconfig:$GNOME_PREFIX/lib/pkgconfig
export PATH=$MONO_PREFIX/bin:$PATH

Speichere dieses Skript als mono-parallel.sh ab und source es. Und zwar so (direktes Aufrufen bringt nichts):


source mono-parallel.sh

Mono müsste sich jetzt als Version 4.3 (oder neuer) melden, wenn nicht, hast du etwas falsch gemacht:


mono --version

Passt alles, können wir fortfahren:


git clone https://github.com/mono/gnome-sharp
cd gnome-sharp
git checkout 2.24.1
./bootstrap-2.24 --prefix=/opt/mono
make
sudo make install

Genauso verfahren wir mit gtk-sharp:


git clone https://github.com/mono/gtk-sharp
cd gtk-sharp
git checkout 2.24.1
./bootstrap-2.24.1 --prefix=/opt/mono
make
sudo make install

Zu guter Letzt kommt jetzt noch xsp:


git clone https://github.com/mono/xsp
cd xsp
./configure --prefix=/opt/mono
make
sudo make install

Jetzt sind wir Startklar. Überprüfe, ob monodevelop startet, indem du es direkt in der Kommandozeile aufrufst. Passt alles, kannst du es wieder schließen und dieses Skript nach /usr/bin/monodevelop-gitmono speichern:


#!/usr/bin/env bash

MONO_PREFIX=/opt/mono
GNOME_PREFIX=/opt/gnome
export DYLD_FALLBACK_LIBRARY_PATH=$MONO_PREFIX/lib:$DYLD_LIBRARY_FALLBACK_PATH
export LD_LIBRARY_PATH=$MONO_PREFIX/lib:$LD_LIBRARY_PATH
export C_INCLUDE_PATH=$MONO_PREFIX/include:$GNOME_PREFIX/include
export ACLOCAL_PATH=$MONO_PREFIX/share/aclocal
export PKG_CONFIG_PATH=$MONO_PREFIX/lib/pkgconfig:$GNOME_PREFIX/lib/pkgconfig
export PATH=$MONO_PREFIX/bin:$PATH

monodevelop

Damit startest du monodevelop mit dem guten Mono einfach per Doppelklick auf das Skript oder Aufruf von


monodevelop-gitmono &

aus der Kommandozeile.

Wie arbeitet es sich jetzt mit monodevelop?

Nun, ich bin Visual Studio gewöhnt. Man merkt, dass VS das wesentlich ausgereiftere Produkt ist, aber das ist auch nicht weiter verwunderlich. Monodevelop steht mir aber nicht im Weg herum, nachdem ich alle Keybindings auf meine gewohnten angepasst habe, den Whitespace und Codestyle richtig gestellt hatte, lief alles wie am Schnürchen. Monodevelop kommt mir - bis auf die Tatsache, dass es Swapping noch weniger verträgt als Visual Studio - sogar einen tacken schneller vor. Aber da kann ich mich auch täuschen.

Sehr angenehm ist auch, dass xsp4 sich nicht um irgendwelche Hostnamen schert, wie der IISExpress oder der große IIS. Eine Fehlerquelle weniger.

Etwas nervig ist nur, dass z.B. für die EntityFramework-Migrationen keine direkte Integration gegeben ist. Unser dbtool ist funktional noch nicht gänzlich äquivalent. Migrationen müssen auf eine spezielle Weise im Projekt eingetragen sein, damit alles funktioniert. Ich weiß nicht, wie man das in der GUI macht, daher muss ich bis jetzt immer nach dem Hinzufügen einer Migration den Foo selbst in der Projektdatei ausbessern. Das kann man aber fixen; so kompliziert ist das nicht (das sind alles XML-Dateien). Man müsste es nur implementieren. Falls du helfen willst, melde dich einfach bei mir.

So long, Delirium