Mumble

Kürzlich hatte ich Gelegenheit, einen Mumble Server (aka „Murmur“) unter CentOS 6 aufzusetzen. Als Datenbank verwende ich MySQL und als Verwaltungsoberfläche das „MyMumb Panel“ (s. https://github.com/dieonar/MyMumb-Panel).

Nach der sehr einfachen Installation hat es beim Einrichten des init.d Scripts angefangen zu haken, weshalb meine Dokumentation (noch) etwas dünn ist. Ergänzungen folgen.

Vorbereitung

Murmur verwendet das nicht per default unter CentOS verfügbare „lsb“ Kommando beim starten des Dienstes. Da wir eine lästige Fehlermeldung und einen als „*defunct*“ markierten Prozess vermeiden wollen installieren wir das „redhat-lsb-core“ Paket:

yum install redhat-lsb-core

Installation & Konfiguration

Da ich erst mal keine Lust hatte, Murmur selbst zu kompilieren hab ich auf die „stable“ Binaries (s. http://sourceforge.net/projects/mumble/files/Mumble/) zurückgegriffen.

  • Entpacken & Verzeichnisse erstellen
  • MySQL Datenbank anlegen (oder die mitgelieferte .sqlite Datenbank verwenden)
  • IPtables Portfreigabe: # Allow Mumble connections to Murmur server iptables -A INPUT -p udp –dport 64738 -j ACCEPT iptables -A INPUT -p tcp –dport 64738 -j ACCEPT
  • Murmur.ini anpassen, dh. Zugangsdaten für die MySQL Datenbank hinterlegen, dBus deaktivieren, Pfade für Log- und PID-Dateien anpassen, etc.
  • Ein init.d Startscript anlegen. (Beispiel weiter unten)

Bonus: MyMumb Management-Oberfläche mit ZeroC Ice einrichten

  • (An dieser Stelle musste ich ZeroC Ice kompilieren, da keine passenden Binaries verfügbar waren – Anleitung folgt…)
  • Aus dem Murmur Ice „slice“ die entsprechende php-Datei für MyMumb erzeugen… /opt/Ice-3.5.1/bin/slice2php -I/opt/Ice-3.5.1/slice Murmur.ice
  • …und im MyMumb Verzeichnis ablegen mv Murmur.php /srv/www/mumble/htdocs/inc/

Beispiel fürs CentOS init.d Startup Script

#!/bin/bash
#
# /etc/rc.d/init.d/murmurd
#
# Murmur VoIP Server
#
# chkconfig: 345 70 30
# description: Murmur VoIP Server
# processname: murmur.x86
# config: /etc/murmur.ini
# pidfile: /var/run/murmur/murmur.pid

# Source function library.
. /etc/init.d/functions

RETVAL=0
NAME=murmurd
DESC="Murmur VoIP Server"
PIDDIR=/var/run/$NAME
PIDFILE=$PIDDIR/$NAME.pid
INIFILE=/etc/murmur.ini
LOCKFILE=/var/lock/subsys/murmur
DAEMON=/usr/local/murmur/murmur.x86
DAEMON_OPTS="-ini $INIFILE"
USER=murmur
GROUP=murmur

start() {
echo -n "Starting $NAME: "
daemon --user $USER $DAEMON $DAEMON_OPTS
RETVAL=$?
[ $RETVAL -eq 0 ] && touch $LOCKFILE
echo
return $RETVAL
}

stop() {
echo -n "Shutting down $NAME: "
killproc $DAEMON
RETVAL=$?
[ $RETVAL -eq 0 ] && rm -f $LOCKFILE
echo
return $RETVAL
}

case "$1" in
start)
start
;;
stop)
stop
;;
status)
status murmur
;;
restart|reload|condrestart)
stop
start
;;
*)
echo "Usage: $NAME {start|stop|status|reload|restart[|probe]"
exit 1
;;
esac

exit $RETVAL