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 fuer Mumble und nicht eine der scheinbaren Alternativen entschieden habe. Gerade unter Gamern und 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 ueblicherweise einen schönen, sauberen Klang haben, aber dennoch keine störende Latenz. Mumble ist Open-Source-Software und hat bereits den neuen Audio-Codec OPUS an Bord, bestehend aus CELT und SILK. Dieser garantiert bei jeder erdenklichen Bandbreite eine besonders geringe Latenz und dabei möglichst hohe Qualität, sowohl akustisch als auch bei Netzwerkstörungen wie Paketverlusten.

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

Mumble/Murmur

klare Empfehlung

TeamSpeak 3

eingeschränkt geeignet

Ventrilo

deutlich schlechter geeignet

Serverunterstützung

Mumble ist in den Debian- und Raspbian-Repositories enthalten und dadurch auch fuer den ARM-Chip des Raspberry Pi verfügbar. Es kann also problemlos installiert werden und verfuegt darüber hinaus ueber Optimierungen für die FPU des Raspberry Pi.

Ventrilo und TeamSpeak hingegen waren zum damaligen Zeitpunkt nicht für ARM-CPUs kompiliert und konnten daher auf dem Raspberry Pi nicht genutzt werden. Der direkte Einsatz war also schlichtweg technisch unmöglich. Die Emulation eines x86-Systems dürfte sich aus Performance-Gründen ebenfalls nicht lohnen.

Mumble/Murmur

läuft auf ARM und ist paketiert

TeamSpeak 3

keine ARM-Unterstützung im damaligen Paketstand

Ventrilo

keine ARM-Unterstützung im damaligen Paketstand

Lizenzkosten und -freiheit

Ein wesentlicher Bestandteil dieser Betrachtung ist die Lizenz.

Mumble darf von jedermann beliebig oft installiert und ausgiebig genutzt werden. Man darf Mumble auch fuer eigene Zwecke anpassen und diese Änderungen verbreiten, wenn diese auch im Quelltext verbreitet werden. Das alles erlaubt die Open-Source-Lizenz von Mumble beziehungsweise 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, 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. Hierfuer 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 damals berichtete:

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.

— Wikipedia zu Ventrilo, Bearbeitungsstand 17. Januar 2012

Hieraus ergibt sich für mich folgende Rangfolge im Bereich »Nutzungsfreiheit«:

Mumble/Murmur

klarer Sieger

TeamSpeak 3

proprietär und beschränkt

Ventrilo

proprietär und noch restriktiver

Mumble/Murmur installieren

Nachdem das Produkt nun geklärt ist, können TeamSpeak und Ventrilo für den Raspberry Pi ausgeschlossen werden. Damit 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 fuer Linux erhältlich. Andererseits ist das Entfernen der X11- und LXDE-Komponenten sicher auch interessant, da der Raspberry Pi bequem noch weitere Dienste parallel laufen lassen kann. Ein Desktop wuerde 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, also 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 Netzwerk-Priorität erhalten soll

  • Das Superuser-Passwort für die Erstinstallation

Start-/Stop-Script erstellen

Bei der Installation lag in einigen Versionen kein Init-Script bei. Die erste Option der Konfiguration, also der Autostart, bliebe dann vergebens. Das Init-Script 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 oeffnen 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 dort erlaubt.

Die weiteren Optionen, also 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 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 ueberhaupt 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? Eigentlich ist es das für die Verschlüsselung des Sprachkanals nicht. Es ist aber viel leichter zu überprüfen, ob man sich auch auf dem richtigen Server verbindet.

Schritt 1: Key und CSR erzeugen

Der Key ist der eigentliche geheime Schlüssel, der letztendlich auch die Sprachübertragung verschluesselt. 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 textbasierten 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. Sonst kann der Mumble-Server nicht starten, weil ihm das Passwort fuer das SSL-Zertifikat nicht übergeben werden kann. Das ist an dieser Stelle auch nicht weiter problematisch.

Schritt 2: CSR bei StartSSL einfügen

Nachdem wir uns bei StartCom beziehungsweise StartSSL registriert haben und die Domain validiert ist, kann das Webzertifikat erstellt werden. Der Titel »Webserver-Zertifikat« ist eigentlich irreführend, denn SSL/TLS-Zertifikate können auch fuer andere Protokolle als HTTPS verwendet werden, eben in unserem Fall fuer Mumble.

StartSSL: Webserver-Zertifikat erstellen (TLS/SSL)
Figure 1. 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
Figure 2. StartSSL: Keyerzeugung überspringen

Im dritten Schritt muss nun der CSR eingetragen werden. Erscheint dieses Feld nicht, so wurde fälschlicherweise ein Key erzeugt, also 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 Schluessel darf niemals in fremde Haende 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 also 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 laesst das Feld einfach leer.

StartSSL: Hostnamen wählen
Figure 3. 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 Murmur 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 sollte 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

Ueberpruefen 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)
---

Steht hier in der letzten Zeile Verify return code: 0 (ok), dann ist alles in Ordnung. Der haeufigste 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. Ein 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.