To main content

Mumble-Server Murmur auf dem Raspberry Pi

Veröffentlicht von Benjamin Marwell am

In meiner kleinen Serie über Einsatzzwecke des Raspberry Pi möchte ich im folgenden die Installation der beliebten Sprachkonferenzsoftware Mumble erläutern. Genauer genommen heißt die Serverkomponente Murmur, wird aber in Debian unter dem Namen Mumble-Server genannt.

Außerdem reiße ich kurz an, warum die scheinbaren Alternativen Skype, TeamSpeak und Ventrilo weniger geeignet sind - wenigstens für den Raspberry Pi. Leider vergisst man schnell, dass im Raspberry Pi ein ARM-Prozessor steckt. Es laufen also nicht alle Linux-Anwendungen automatisch auf dem Raspberry Pi.


Mumble vs TeamSpeak vs Ventrilo

Zunächst soll die Frage geklärt werden, warum ich mich in diesem Artikel für Mumble und nicht eine der (scheinbaren) Alternativen entschieden habe. Gerade unter Gamern/Spielern hat Teamspeak mit Abstand den größten Marktanteil, dicht gefolgt von Ventrilo. Leider haben TeamSpeak und Ventrilo entscheidende Nachteile.

Der Sprachcodec

Beim Gaming und auch bei normalen Konferenzen möchte man üblicherweise einen schönen, sauberen Klang haben, aber dennoch keine störende Latenz. Mumble ist OpenSource-Software und hat bereits den neuen Audio-Codec OPUS (bestehend aus CELT und SILK) an Bord. Dieser garantiert bei jeder erdenklichen Bandbreite eine besonders geringe Latenz (Verzögerung) und dabei möglichst hohe Qualität - akustisch, wie auch bei Netwerkstörungen (sogenannte Paketverluste).

Inzwischen hat TeamSpeak 3 auch mindestens Silk integriert, so dass hier bei geringer Bandbreite die Latenz und Sprachqualität vergleichbar ist. Leider hat sich TeamSpeak 3 noch nicht überall durchgesetzt und schaltet abwärtskompatible auch ältere Codecs hinzu. Ventrilo hingegen nutzt die älteren Codecs Speex und GSM, die bei gleicher Bandbreite weniger Qualität oder Latenz bieten.

  • Mumble/Murmur Grüner Haken
  • TeamSpeak 3rotes Minus
  • Ventrilo rotes Minusrotes Minus

Serverunterstützung

Mumble ist in den Debian/Raspbian-Repositories - und dadurch auch für den ARM-Chip des Raspberry PI - erhältlich. Es kann also problemlos installiert werden und verfügt darüber hinaus Optimierungen für die FPU des Raspberry Pi.

Ventrilo und Teamspeak hingegen sind (Stand: Januar 2013) nicht für ARM-CPUs kompiliert und können daher auch nicht genutzt werden. Der direkte Einsatz ist hier schlichtweg technisch unmöglich. Die Emulation eines x86-Systems dürfte sich aus Performance-Gründen nicht lohnen und fällt daher auch weg.

  • Mumble/Murmur Grüner HakenGrüner Haken
  • TeamSpeak 3 rotes Minusrotes Minus
  • Ventrilo rotes Minusrotes Minus

Lizenzkosten und -freiheit

Ein wesentlicher Bestandteil dieser Betrachtung ist die Lizenz. Mumble (Murmur) darf von jedermann beliebig oft installiert und beliebig ausgiebig genutzt werden. Man darf Mumble auch für eigene Zwecke anpassen und diese Änderungen verbreiten, wenn diese auch im Quelltext verbreitet werden. Das alles erlaubt die OpenSource-Lizenz von Mumble/Murmur. TeamSpeak steht unter einer proprietären Lizenz. Unregistriert darf nur ein Server betrieben werden, der zudem noch auf 32 Slots begrenzt ist. Möchte man mehr Server betreiben, so muss man sich zuvor registrieren. Damit ist man dann aber ebenfalls beschränkt: Nach 512 Slots auf maximal 10 Server verteilt ist schluss. Wer seine Ausgaben wieder einnehmen möchte, und etwa auf einer Seite Werbung von Google AdSense einblendet, braucht eine kommerzielle Lizenz. Hierfür fallen weitere Gebühren an. Ventrilo steht ebenfalls unter einer proprietären Lizenz. Hier ist man sogar noch weiter eingeschränkt, wie die Deutschsprachige Wikipedia berichtet:
Mit der Veröffentlichung der Version 2.1.2 hat Flagship Industries die Softwarelizenz so geändert, dass die Freeware-Version des Servers maximal acht Benutzer (»Slots«) zur selben Zeit zulässt. Zwar bietet Flagship Industries die Möglichkeit, eine »Pro«-Lizenz zu erwerben, allerdings ist dies großen Hosting-Firmen vorbehalten. Die Vergabe weiterer Pro-Lizenzen ist offenbar durch exklusive Verträge mit verschiedenen Hostern nicht mehr angedacht. Die Nutzung einer älteren Version der Software ist ein Verstoß gegen den Lizenzvertrag.
Quelle: Seite „Ventrilo“. In: Wikipedia, Die freie Enzyklopädie. Bearbeitungsstand: 17. Januar 2012, 12:10 UTC. URL: http://de.wikipedia.org/w/index.php?title=Ventrilo&oldid=98483293 (Abgerufen: 29. Januar 2013, 11:53 UTC). Hierraus ergibt sich für mich folgende Rangfolge im Bereich »Nutzungsfreiheit«:
  • Mumble/Murmur Grüner Haken
  • TeamSpeak 3rotes Minus
  • Ventrilo rotes Minusrotes Minus

Mumble/Murmur installieren

Nachdem das Produkt nun geklärt ist (TeamSpeak und Ventrilo wurden durch fehlende ARM-Unterstützung technisch ausgeschlossen und sind auch lizenztechnisch unattraktiv), kann die Installation auf dem Raspberry Pi erfolgen.

Entfernen der grafischen Oberfläche

Ein Mumble-Server kann ohne grafische Oberfläche betrieben werden. Das ist aber nicht zwingend erforderlich, da eventuell noch Desktop-Widgets genutzt werden können. Eine Desktop-Admin-Oberfläche ist derzeit leider nicht für Linux erhältlich. Andererseits ist das Entfernen des X11- und LXDE-Komponenten sicher auch interessant, da der Raspberry Pi bequem noch weitere Dienste parallel laufen lassen kann. Ein Desktop würde hier nur unnötig Ressourcen zehren. Die Entfernung der Desktop-Komponenten kann hier nachgelesen werden: Headless-Installation.

Installation der Serversoftware

Die Installation von Mumble Server (Mumbled/murmur) ist denkbar einfach, da die Software in den Repositories von Raspbian liegt.
apt-get install mumble-server
dpkg-reconfigure mumble-server
Der zweite Befehl startet gleich die textbasierte Konfiguration von Mumble. Hier kann eingestellt werden:
  • Ob Murmur beim Systemstart gestartet werden soll
  • Ob Murmur eine höhere Netwerk-Priorität erhalten soll (sehr empfohlen)
  • Das Superuser-Passwort für die Erstinstallation

Start-/Stop-Script erstellen

Bei der Installation liegt in einigen Versionen kein Init-Script bei. Die erste Option der Konfiguration (Autostart) bliebe dann vergebens. Das Initscript lässt sich jedoch schnell installieren.
cd /etc/init.d/
sudo wget "https://raw.github.com/mumble-voip/mumble/master/scripts/murmur.init"
sudo mv murmur.init mumble-server
sudo chmod +x mumble-server
sudo update-rc.d mumble-server defaults 90
Damit ist das Mumble-Init-script heruntergeladen, ausführbar gemacht und in den Default-Runlevel eingetragen.

Mumble konfigurieren

Konfiguration anpassen

Die Konfiguration ist die wohl schwerste oder zumindest langwierigste Aufgabe. Je nach Sicherheitswunsch benötigt es ein SSL-Zertifikat - mehr dazu später. Zunächst öffnen wir die Konfigurationsdatei:
sudo nano /etc/mumble-server.ini
Wer möchte, kann den Editor nano durch den Editor seiner Wahl ersetzen - etwa vim.  Zunächst kümmern wir uns um das Logging. Wir wollen bei Fehlern eine hilfreiche Ausgabe in den Logfiles erhalten. Die entsprechenden Zeilen finden sich etwa auf Zeile 60:
# Murmur default to logging to murmur.log. If you leave this blank,
# murmur will log to the console (linux) or through message boxes (win32).
logfile=/var/log/mumble-server/mumble-server.log

# If set, murmur will write its process ID to this file.
pidfile=/var/run/mumble-server/mumble-server.pid

[..]

# Welcome message sent to clients when they connect
welcometext="<br />Welcome to this server running <b>Murmur</b>.<br />Enjoy your stay!<br />"

[..]

# If murmur is started as root, which user should it switch to?
# This option is ignored if murmur isn't started with root privileges.
uname=mumble-server
 

Wichtig ist hier, dass der Server unter seinem eigenen User läuft. Der Welcome-Text kann nach Belieben angepasst werden - HTML-Formatierungen sind erlaubt.

Die weiteren Optionen (maximale Anzahl von Nutzern und maximale Sprachbandbreite) sollten zunächst nicht angefasst werden, wenn man sich über die Folgen nicht im Klaren ist. Einen Test konnte ich leider nicht fahren, aber mehr als 24 Benutzer würde ich für den Raspberry Pi nicht empfehlen. Des weiteren folgen noch Einstellungen für SSL-Zertifikate. die zunächst im Folgenden beschrieben werden.

Zertifikate mit StartSSL

Wer beim Verbindungsaufbau zu seinem Mumble-Server keinen Warnhinweis über ein selbstsigniertes Zertifikat erhalten möchte, kann eines von CACert oder StartSSL nutzen. CACert ist eine tolle Sache, da diese australische Organisation transparent arbeitet - leider ist sie im Gegensatz zu StartSSL mit ihrem Stammzertifikat nicht in allen Browsern und überhaupt in den Standardinstallationen der meisten Betriebssysteme vertreten. Ich entscheide mich also im Beispiel für StartSSL.

Warum ist ein Zertifikat einer großen PKI wichtig? Nun, ist es eigentlich nicht - jedenfalls für die Verschlüsselung des Sprachkanals. Es ist aber viel leichter zu überprüfen, ob man sich auch auf dem richtigen Server verbindet.

Schritt 1: Key und CSR erzeugen

Worum geht es: Der Key ist der eigentliche geheime Schlüssel, der letztendlich auch die Sprachübertragung verschlüsselt. CSR bedeutet Certificate Signing Request, also die Anfrage den öffentlichen Schlüssel digital zu signieren. Um diese zu erzeugen wird folgender Befehl verwendet:

# Als erstes Superuser werden
sudo -s

# Verzeichnis erstellen
mkdir /etc/mumble-server
# Verzeichnis vor anderen Usern sichern
chmod go-rwx /etc/mumble-server
cd /etc/mumble-server

# Key und CSR erzeugen
openssl req -nodes -newkey rsa:2048 -nodes -keyout mumble.key -out server_mumble.csr

Im folgenden Text-basierten Dialog werden nun die abgefragten Werte eingetragen. Etwa:

  • Country Name (2 letter code): DE
  • State or Province Name (full name) [Berkshire]: Lower Saxony
  • Locality Name (eg, city) [Newbury]: Hannover
  • Organization Name (eg, company) [My Company Ltd]: <leer>
  • Organizational Unit Name (eg, section) []: <leer>
  • Common Name (eg, your name or your server's hostname) []: mumble.example.com
Die beiden wichtigen Felder A challenge password sollte man tunlichst leer lassen, da sonst der Mumble-Server nicht starten kann - das Passwort für das SSL-Zertifikat kann ihm nicht übergeben werden. Das ist an dieser Stelle auch nicht weiter problematisch.

Schritt 2: CSR bei StartSSL einfügen

Nachdem wir uns bei StartCom/StartSSL registriert haben und die Domain validiert ist, kann das Webzertfifikat erstellt werden. Wobei der Titel Webserver-Zertifikat eigentlich irreführend ist: SSL/TLS-Zertifikate können auch für andere Protokolle als HTTPS verwendet werden - eben in unserem Fall für Mumble.
StartSSL: Webserver-Zertifikat erstellen (TLS/SSL)
StartSSL: Webserver-Zertifikat erstellen (TLS/SSL)
Die erzeugte Datei server_mumble.csr wird nun mittels des Befehls cat server_mumble.csr  angezeigt und im StartSSL-Assistenten eingetragen. Dazu muss man die Erstellung eines eigenen privaten Keys seitens StartCom überspringen (»skip«).
[StartSSL: Keyerzeugung überspringen
StartSSL: Keyerzeugung überspringen

Im dritten Schritt muss nun der CSR eigentragen werden. Erscheint dieses Feld nicht, so wurde fälschlicherweise ein Key erzeugt (im vorigen Dialog nicht »skip« gewählt). Der CSR beginnt mit den Worten:

-----BEGIN CERTIFICATE REQUEST-----

Sollte er mit anderen Texten beginnen, etwa BEGIN PRIVATE KEY, sollte an dieser Stelle unbedingt abgebrochen werden. Der private Schlüssel darf niemals in fremde Hände gelangen. Also bitte dieses Kapitel noch einmal von vorne beginnen!

Ist dieser Schritt geschafft, so muss nur noch die dazugehörige Domain gewählt werden. Bei mir eben mumble.bmarwell.de. Die Domain ohne angegebene Subdomain wird bei StartSSL-Zertifikaten immer mit aufgenommen. Möchte man also etwa mumble nicht auf einer Subdomain laufen lassen, so trägt man hier etwa "www" ein oder lässt das Feld einfach leer.
StartSSL: Hostnamen wählen
StartSSL: Hostnamen wählen
Ist dieser Schritt geschafft, so erhält man nun das fertige Zertifikat.

Schritt 3: Zertifikat Mumble bekannt machen

Der Text wird nun kopiert (er beginnt mit -----BEGIN CERTIFICATE-----) und in die Datei /etc/mumble-server/ssl_mumble.crt  gespeichert. Für Mumble brauchen wir aber eine Zertifikatskette. Diese erstellt man wie folgt:
# Stamm-Zertifikate von StartSSL herunterladen
wget --no-check-certificate https://www.startssl.com/certs/sub.class1.server.ca.pem
wget --no-check-certificate http://www.startssl.com/certs/ca.pem
cat sub.class1.server.ca.pem ssl_mumble.crt ca.pem > ssl_mumble_concat.crt
Das Stammzertifikat von StartSSL und das signierte Zertifikat für die eigene Domain, wiederum von StartSSL signiert, befinden sich nun in der Datei /etc/mumble_server/ssl_mumble_concat.crt.  Dieses, sowie den Key kann man jetzt mumble bekannt machen. In der Datei /etc/mumble_server.ini ersetzen wir die vorhandenen Zeilen durch:
# If you have a proper SSL certificate, you can provide the filenames here.                                                                                                                         
# Otherwise, Murmur will create it's own certificate automatically.
sslCert=/etc/mumble-server/ssl_mumble_concat.crt
sslKey=/etc/mumble-server/mumble.key

Schritt 4: Mumble neustarten

Nun lässt sich Mumble mittels sudo /etc/init.d/mumble-server restart neu starten. In der Logdatei sollten nun folgender Eintrag auftauchen:

<W>2013-03-08 10:28:24.952 Initializing settings from /etc/mumble-server.ini (basepath /etc)
<C>2013-03-08 10:28:24.983 Adding 1 CA certificates from certificate file.
<W>2013-03-08 10:28:24.984 OpenSSL: OpenSSL 1.0.1c 10 May 2012

Ist der Eintrag vorhanden, ist alles geschafft.

Schritt 5: SSL-Zertifikat prüfen

Überprüfen lässt sich das Zertifikat mittels des folgenden Befehls:

$ openssl s_client -connect mumble.bmarwell.de:64738 -CAfile ca.pem

[..]

CONNECTED(00000003)
---
Certificate chain
 0 s:/description=E23FUotp5Ab4A8hK/C=DE/CN=mumble.bmarwell.de/emailAddress=postmaster@bmarwell.de
   i:/C=IL/O=StartCom Ltd./OU=Secure Digital Certificate Signing/CN=StartCom Class 1 Primary Intermediate Server CA
 1 s:/C=IL/O=StartCom Ltd./OU=Secure Digital Certificate Signing/CN=StartCom Class 1 Primary Intermediate Server CA
   i:/C=IL/O=StartCom Ltd./OU=Secure Digital Certificate Signing/CN=StartCom Certification Authority
 2 s:/C=IL/O=StartCom Ltd./OU=Secure Digital Certificate Signing/CN=StartCom Certification Authority
   i:/C=IL/O=StartCom Ltd./OU=Secure Digital Certificate Signing/CN=StartCom Certification Authority
---
[..]
    Compression: 1 (zlib compression)
    Start Time: 1362738056
    Timeout   : 300 (sec)
    Verify return code: 0 (ok)
---
Linux 3.2.27+^C5b5f5-2.2▒X11"
Steht hier in der letzten Zeile Verify return code: 0 (ok), dann ist alles in Ordnnung. Der häufigste Fehler hierbei heißt Verify return code: 19 (self signed certificate in certificate chain). Steht dieser in der Ausgabe, so wurde wahrscheinlich die Datei ssl_mumble_concat.crt  nicht korrekt erzeugt.

Fazit

Das Einrichten eines Mumble-Servers macht viel Arbeit - auf dem Raspberry Pi genau so wie auf jedem anderen Linux-Server. Großer Zeitfaktor ist dabei oftmals die Erstellung eines Zertifikats. Der Raspberry Pi ist für kleinere Gaming-Sessions aber genau so gut geeignet wie jeder andere Server - nur viel Sparsamer im Verbrauch.

Weblinks