Inhaltsverzeichnis
Musikbot für Mumble mit Mumble-Ruby und MPD
Der in dieser Anleitung verwendete Bot wird nicht mehr weiterentwickelt und es kann sein, dass die Anleitung nicht mehr funktioniert.
Es wird empfohlen, den Nachfolder des Bots zu verwenden. Eine Installationsanleitung dafür gibt es unter http://mumble-ruby-pluginbot.readthedocs.io/en/master/installation_howto.html.
Ziel dieser Anleitung
- Einen oder mehrere voneinander unabhängige Audiobots, die Musik auf einen Mumble-Server streamen
Übersicht
Pro Mumble-Bot laufen je eine Instanz des MPD (Music Player Daemon), die Musik an eine Named Pipe schickt und ein Mumble-Ruby-Bot, der diesen Stream an den Mumble-Server sendet.
Das großartige daran ist, dass Mumble-Ruby seit kurzem Opus verwendet.
MPD spielt dabei eine definierte Playlist ab, die einzelne Stücke oder auch Radiosender enthalten kann.
Mit dem Programm mpc kann man MPD steuern.
Alternativ lässt sic zum Steuern von MPD z. B. der Web-Client Rompr verwenden, diese wird jedoch hier nicht behandelt.
Vorteile dieser Lösung im Vergleich zu bisherigen Audiobots mit echtem Mumble-Client
- Kein X-Server notwendig, nicht einmal ein virtueller X-Server, wie z. B. bei dieser Variante.
- RAM-Verbrauch ist geringer als mit normalen Mumble-Clienten.
- Weniger CPU-Verbrauch, da kein PulseAudio oder Jack notwendig.
- Auch wenn man MPD komplett beendet und wieder startet, so spielt er nach dem Start sofort bei Dateien dort ab, wo er aufgehört hat und bei Streams startet er diesen automatisch wieder.
- Es lässt sich komplett automatisieren; auch nach einem Restart des ganzen vServers laufen alle Bots :) – dies geht zwar auch mit normalen Mumble-Clienten, jedoch nicht ganz so einfach.
- Wenn man die Ruby-Scripte im Hintergrund mit & startet, läuft die Musik nicht, daher werden sie in eine tmux-session eingebettet.
Schema für die einzelnen Bots
Um direkt die Möglichkeit zu haben, mehrere Bots laufen zu lassen, läuft die Konfiguration nach folgendem Schema ab:
- Alle Bots laufen unter demselben Benuzteraccount namens „botmaster“ und auch innerhalb dessen Heimatverzeichnisses.
- Die Musik landet in Verzeichnis „/home/botmaster/music/“, auf das alle Bots Zugriff erhalten.
- Der Port für MPD ist 770<botid>, z. B. 7701 für den Bot 1.
- Jeder Bot erhält einen eigenen Ordner, in dem sich die komplette Konfiguration für MPD befindet, nach dem Muster „/home/botmaster/mpd<botid>/“, z. B. „/home/botmaster/mpd1/“ für Bot 1.
- Darin befindet sich immer die Konfigurationsdatei mpd.conf.
- Auch die named pipe (FiFo-Datei), die per audio_output der mpd.conf angegeben werden muss, liegt in diesem Verzeichnis, z. B. „/home/botmaster/mpd1/mpd.fifo“ für Bot 1.
Verzeichnisstruktur
Folgende Verzeichnisstruktur wird es am Ende dieser Anleitung geben:
/home/botmaster/ ├── mpd1 │ ├── playlists │ ├── mpd1.log │ ├── mpd.conf │ ├── mpd.fifo │ ├── pid │ ├── state │ ├── sticker.sql │ └── tag_cache ├── mumble-ruby │ └── [...] ├── music ├── scripts │ ├── mumble-ruby-mpd-bot.rb │ ├── start-all-mpd.sh │ └── start-all-mumble-ruby-bots.sh ├── user_certificates │ └── bot1_test_cert [...]
Abhängigkeiten installieren
Pakete installieren
Unter Debian müssen folgende Abhängigkeiten als root oder mit sudo installiert werden:
apt-get install mpd mpc tmux bzip2 patch
Die Meldung am Ende über die fehlende Datenbank „/var/lib/mpd/tag_cache“ kann man ignorieren, diese wird später automatisch angelegt.
Da der System-weit installierte MPD nicht benötigt wird, deaktiviert man ihn, indem man als root oder mittels sudo in in der Datei /etc/default/mpd
die Variable START_MPD
von true nach false ändert; somit wird der Dienst beim nächsten Systemstart nicht mehr gestartet.
Installation von Mumble-Ruby
Siehe unter Mumble-Ruby installieren.
Benötigte Ruby-Bibliotheken installieren
Ausgehend von der oben genannten Anleitung zur Installation von Mumble-Ruby führt man noch folgende Kommandos zur Vorbereitung aus:
- Einloggen als botmaster (entfällt, wenn man bereits mit diesem Benutzer eingeloggt ist):
su - botmaster
- RVM verwenden:
source ~/.rvm/scripts/rvm
- Ruby-Umgebung festlegen:
rvm use @bots
Nun installiert man die benötigte Ruby-Bibliothek, damit Mumble-Ruby mpd steuern kann:
rvm @bots do gem install ruby-mpd
Benötigte Verzeichnisse erstellen
- Verzeichnis für die Scripte erstellen:
mkdir /home/botmaster/scripts
- Verzeichnis für Musik erstellen:
mkdir /home/botmaster/music
- Verzeichnis für die Zertifikate ertellen:
mkdir /home/botmaster/user_certificates
MPD einrichten - am Beispiel von Bot 1
Verzeichnis erstellen
Verzeichnisse für Bot 1 erstellen:
mkdir -p /home/botmaster/mpd1/playlists
Konfiguration für MPD (Bot 1)
Konfiguration für Bot 1 herunterladen und an den richtigen Ort ablegen:
wget https://github.com/Natenom/mumble-ruby-related/raw/master/configs/mpd.conf -O ~/mpd1/mpd.conf
Für Bot 1 sind keine Anpassungen notwendig, für jeden weiteren Bot muss jedes Vorkommen der Zahl „1“ durch „2“, usw. ersetzt werden.
Ruby-Script zum allgemeinen Starten eines Bots – am Beispiel von Bot 1
Das folgende Script wird verwendet, um einen Bot auf den Server zu bringen und automatisch Musik von einer MPD-Instanz senden zu lassen.
Script herunterladen und am passenden Ort ablegen:
wget https://github.com/Natenom/mumble-ruby-related/raw/master/scripts/mumble-ruby-mpd-bot.rb -O ~/scripts/mumble-ruby-mpd-bot.rb
Das Script kann man hier ansehen. Es ist eine angepasste Version von einem der SuperTux's bots, die zusätzlich Parameter kennt.
Die Tastenkombination Strg+C beendet den Bot.
Syntax für das Script:
mumbleserver_host mumbleserver_port mumbleserver_username mumbleserver_userpassword mumbleserver_targetchannel quality_bitrate mpd_fifopath mpd_path mpd_host mpd_port
Für Bot 1:
ruby /home/botmaster/scripts/mumble-ruby-mpd-bot.rb mumble.natenom.com 64738 Bot1_Test "" "Sitzecke" 96000 /home/botmaster/mpd1/mpd.fifo localhost 7701
Ein Start würde jetzt natürlich noch nicht funktionieren, da MPD nicht läuft.
Vorsicht bei der Qualitätsangabe:
Wenn der Server nur eine beschränkte Bandbreite erlaubt 1), dann darf hier maximal die vom Mumble-Server erlaubte Qualität verwendet werden, denn Mumble-Ruby hält sich nicht an angegebene Beschränkungen und sendet mit eingestellter Bandbreite, was dann auf solchen Server dazu führt, dass die Bots beginnen zu stottern.
Erzeugtes Zertifikat:
Für jeden Benutzernamen wird beim Start des Scripts im aktuellen Arbeitspfad ein neues Verzeichnis namens BOTNAME_cert erstellt, welches das automatisch erstellte Client-Zertifikat des Bots enthält. Dieses Verzeichnis kann man nach dem Test löschen.
Bash-Scripte zum Starten aller MPD-Instanzen
In die folgende Datei werden alle MPD-Instanzen eingetragen und dann gestartet:
Script herunterladen und am passenden Ort ablegen:
wget https://github.com/Natenom/mumble-ruby-related/raw/master/scripts/start-all-mpd.sh -O ~/scripts/start-all-mpd.sh
Dann muss man es noch ausführbar machen:
chmod u+x /home/botmaster/scripts/start-all-mpd.sh
Bash-Script zum Starten aller Mumble-Ruby-Bots
Das folgende Bash-Script dient zum Starten aller Mumble-Ruby-Bots. Aufgrund der anfangs genannten Problematik, dass im Hintergrund gestartete Ruby-Scripte keine Musik senden, wird jeder Bot in einer eigenen TMUX-Sesssion gestartet.
Das Script herunterladen und am passenden Ort ablegen:
wget https://github.com/Natenom/mumble-ruby-related/raw/master/scripts/start-all-mumble-ruby-bots.sh -O /home/botmaster/scripts/start-all-mumble-ruby-bots.sh
Ansehen kann man das Script hier.
Es startet nur unseren ersten Bot 1; für weitere Bots einfach das Script entsprechend anpassen.
Das Script muss noch ausführbar gemacht werden:
chmod u+x /home/botmaster/scripts/start-all-mumble-ruby-bots.sh
Testen
Nun kann man alles testen, indem man beide Script nacheinander startet:
/home/botmaster/scripts/start-all-mpd.sh
/home/botmaster/scripts/start-all-mumble-ruby-bots.sh
Jetzt sollte sich auf dem Mumble-Server ein Bot befinden, der Musik von TheRadio.cc abspielt.
Vergiss nicht, im script „/home/botmaster/scripts/start-all-mumble-ruby-bots.sh“ die Daten für den Mumble-Server anzupassen, auch den Kanalnamen.
Alles Automatisch starten lassen
Damit bei einem Reboot alles automatisch startet, trägt man als root Folgendes in die /etc/rc.local ein:
su - botmaster -c "/home/botmaster/scripts/start-all-mpd.sh" & su - botmaster -c "/home/botmaster/scripts/start-all-mumble-ruby-bots.sh" &
Problemlösungen
SSL-Fehler
- https://github.com/perrym5/mumble-ruby/issues/2
aus „context = OpenSSL::SSL::SSLContext.new“ mach „context = OpenSSL::SSL::SSLContext.new(:TLSv1)“
Streamabbrüche
Die Streams sind immer wieder abgebrochen, dies ist allerdings ein Problem von mpd; es hilft, wenn man in regelmäßigen Abständen per Cron einfach folgendes ausführt:
- refreshmpd.sh
#!/bin/bash for i in $(seq 1 9); do mpc -p 770${i} play; done
In die crontab fügt man einfach folgende Zeile ein:
*/10 * * * * ./refreshmpd.sh
Keine Sorge, der Stream wird nicht neu gestartet, wenn man play ausführt, während der MPD sendet.