Virtuelle Maschine auf dem Rootserver für einen Mumble-Musikbot mit dem Jack-Soundserver
Dieses Howto sollte aufgesplittet werden in folgende Teile:
- Headless VM auf einem Server einrichten
- Bot einrichten mit Jack
- Bot einrichten mit PulseAudio
Motivation, Ziel, usw.
Ich wollte ein Linux-System um den Verbund aus Windows+VirtualAudioCable zu ersetzen mit dem man relativ einfach Musik-Bots bereitstellen kann.
Weiterhin wollte ich ein System mit Jack zum Testen :)
Resultat
Für Variante 1 mit PulseAudio
Bei der Wahl von PulseAudio für die Mumble-Eingabe/-Ausgabe hat man zumindest einen Bot. Das liegt daran, dass bei der Verwendung von PulseAudio zusammen mit Jack insgesamt nur ein Ziel und eine Quelle vorhanden ist für alle Programme, die Pulseaudio verwenden.
Für Variante 2 mit JACK
Bei der Wahl von Jack für die Mumble-Eingabe/-Ausgabe hat man beliebig viele unabängige Bots die man auch mit verschiedenen Streams bespielen kann :)
Hier hat nämlich jeder Mumble-Client jeweils einen eigen Quell- und Zielkanal.
Anleitung
VirtualBox installieren und einrichten
Für diesen Abschnitt benötigen wir Root-Rechte.
Zuerst Virtualbox 4.0 auf Squeeze installieren; dazu die Paketquellen von VirtualBox an /etc/apt/sources.list anhängen mit:
echo "deb https://download.virtualbox.org/virtualbox/debian squeeze contrib" >> /etc/apt/sources.list
gefolgt von sudo apt-get update && sudo apt-get install virtualbox-4.0
Damit vrde funktioniert - wir wollen ja auch eine grafische Ausgabe haben - muss das “Oracle VM VirtualBox Extension Pack” installiert sein; dies überprüft man mit:
VBoxManage list extpacks
Extension Packs: 1
Pack no. 0: Oracle VM VirtualBox Extension Pack
Version: 4.0.10
Revision: 72436
Description: USB 2.0 Host Controller, VirtualBox RDP, PXE ROM with E1000 support.
VRDE Module: VBoxVRDP
Usable: true
Why unusable:
Falls es fehlt (Extension Packs: 0), muss man sich das Extension Pack herunterladen und installieren mittels
VBoxManage extpack install /pfad/zu/Oracle_VM_VirtualBox_Extension_Pack-4.0.10-72436.vbox-extpack
Jetzt erstellen wir schon aus Prinzip einen neuen Benutzer, unter dessen Kennung die VM laufen wird. Nennen wir ihn ubuntustudio:
adduser ubuntustudio
Und fügen den neuen Benutzer in die Gruppe vboxusers hinzu:
usermod -a -G vboxusers ubuntustudio
Nun können wir uns im Wirtssystem als Benutzer ubuntustudio anmelden. Für alles weitere reichen die Benutzerrechte aus.
su - ubuntustudio
Virtuelle Maschine erstellen
VBoxManage createvm --name "UbuntuStudio" --register
Festplatte erstellen (10GB):
VBoxManage createhd --filename UbuntuStudio.vdi --size 10000
Nach der Installation meines Systems waren zum Schluss mit eigens installiertem Mumble genau 3.8 GiB belegt.
VBoxManage storagectl "UbuntuStudio" --name "IDE Controller" --add ide
VBoxManage storageattach "UbuntuStudio" --storagectl "IDE Controller" --port 0 --device 0 --type hdd --medium UbuntuStudio.vdi
Und nun passen wir die Einstellungen der VM an:
VBoxManage modifyvm UbuntuStudio --memory 1024 --acpi on --boot1 dvd --nic1 nat --audio null --audiocontroller ac97 --vrde on --vrdeaddress 127.0.0.1 --vrdeauthtype null --cpus 1 --vram 16
Bei meinen Tests bootete das System in der VM gar nicht erst, wenn es zu wenig (4) VideoRAM (–vram) hatte.
Wer plant, RDP offen zugänglich einzustellen, sollte nicht vrdeauthtype null verwenden, da sich sonst jeder mit der virtuellen Maschine verbinden kann!
Bei der Installation und der Konfiguration hilft viel RAM, in der laufenden VM reichen später 512MiB aus.
Zur Kontrolle kann man sich alle Einstellungen ansehen mit:
VBoxManage showvminfo UbuntuStudio | less
UbuntuStudio ins virtuelle Laufwerk einlegen
Nun laden wir uns UbuntuStudio herunter (https://cdimage.ubuntu.com/ubuntustudio/releases/11.04/release/) und “legen” die CD ins virtuelle CD-Laufwerk ein:
VBoxManage storageattach "UbuntuStudio" --storagectl "IDE Controller" --port 1 --device 0 --type dvddrive --medium /pfad/zu/ubuntustudio-11.04-alternate-amd64.iso
Tunnel zum Verbinden zur virtuellen Maschine über Remote-Desktop
Zum Verbinden auf den Server kann man unter Linux z. B. rdesktop verwenden.
Man kann einen SSH-Tunnel verwenden, wenn der Port auf dem Server nur lokal erreichbar bleiben soll:
ssh -p <SSHPORT> -L <lokalerport>:127.0.0.1:<remoteport> username@ip.ip.ip.ip -N
Diesen Befehl gibt man übrigens auf der lokalen Maschine ein, nicht auf dem Server :)
Der Standardport (hier <remoteport>) für RDP ist 3389.
Start der virtuellen Maschine und Installation von UbuntuStudio
Zuerst wird die VM gestartet:
VBoxManage startvm UbuntuStudio --type headless
Dann verbinden wir uns mit rdesktop über den Tunnel zur VM:
rdesktop -z -E -a 8 localhost:<lokalerport> -k de
- -z Schaltet die Komprimierung ein.
- -E Schaltet die Verschlüsselung ab, wir haben ja bereits einen Tunnel.
- -a 8 Farbtiefe (8 Bit).
- -k de Verwendet auf dem Server die de Tastenbelegung.
Nun installieren wir UbuntuStudio und restarten nach der Installation die VM.
<WRAP center round info> Bei der Installation wird gefragt, ob Jack mit als Echtzeitanwendung laufen soll; dies ist für unsere Zwecke unnötig, also mit “Nein” antworten. </WRAP>
Dann anmelden, kurz warten und nach Aufforderung alle Aktualisierungen installieren.
Danach in einem Terminal ausführen: sudo apt-get install lxde mplayer
Jetzt laden wir uns innerhalb der VM von https://download.virtualbox.org/virtualbox/ das Binärpaket mit den Gast-Treibern für die passende Virtualbox-Version herunter (die .run-Dateien oder je nach System auch .rpm) und installieren diese bzw. führen sie in einem Terminal aus:
sudo sh /ort/zum/Download/VBoxLinuxAdditions.run
Damit sind die GuestAdditions installiert.
Durch diese Treiber wird u.a. die Grafikausgabe beschleunigt und z. B. der Mauszeiger in der VM synchron zum echten Mauszeiger gehalten.
Installiertes System in der VM anpassen
Mumble mit aktuellem Codec versorgen
Leider bringt Ubuntu nur den CELT-Codec 0.7.0 mit, der im Gegensatz zum neuen 0.11.x eine etwas schlechtere Qualität hat.
Mumble mit 0.11.x Codec installieren: siehe hier
Variante 1: Mit PulseAudio
PulseAudio so anpassen, dass es auf Jack aufsetzt:
sudo apt-get install pulseaudio-module-jack
und danach wie hier konfigurieren: https://trac.jackaudio.org/wiki/WalkThrough/User/PulseOnJack
Zum Schluss am besten vom Desktop (in der VM) abmelden und wieder anmelden.
Diese Variante hat den Nachteil, dass man nur einen Eingabe- und nur einen Ausgabe-Kanal für PulseAudio-Geräte zur Verfügung hat. Egal wie viele Programme es verwenden. Maximal ist so ein Bot bzw. mehrere Bots mit derselben Musik möglich.
Eine Anleitung, wie man einen oder mehrere Bots auch mit PulseAudio mit mehreren virtuellen Soundkarten versorgt, gibt es hier: Musikbot mit Pulseaudio.
Variante 2: Mit Jack-Patch (schwieriger, da man Mumble patchen muss)
Wie man ein aktuelles Mumble mit dem Jack-Patch ausstattet, steht hier: Mumble mit JACK.
Hier muss man sich nicht ab- und wieder anmelden.
Vorteil dieser Variante ist, dass jede Mumble-Instanz ein eigenes Paar von Eingabe- und Ausgabe-Kanal besitzt; man kann also viele voneinander unabhängige Bots erstellen.
Bildschirmauflösung, Bildschirmschoner
Eventuell Bildschirmauflösung ändern unter LXDE-Startknopf -> Einstellungen -> Bildschirmeinstellungen und den Bildschirmschoner deaktivieren :)
Verwendete Programme
qjackctl - Zur Steuerung und Verbindung der einzelnen “Kanäle” Dieses Programm starten wir nach dem Anmelden am Desktop als erstes, PulseAudio erscheint bei entsprechender Konfiguration automatisch in den Geräten.
Alternativ zu qjackctl kann man auch patchage nutzen, es ist übersichtlicher:
jack-rack - Bereitstellung von Filtern Um z. B. die Lautstärke zu regeln verwende ich das Plugin “Amplitude -> Amplifiers -> Simple Amplifier”.
mplayer - Zum Abspielen eines Live-Streams; mit dem Parameter “-ao jack” starten
mplayer -ao jack -playlist https://listen.di.fm/public3/chiptunes.pls
Mumble :)
Sicherheit
Da die VM für die Netzanbindung NAT verwendet kann man von aussen nicht darauf zugreifen, es sollte also relativ sicher sein. Man sollte aber trotzdem nicht benötigte Dienste deaktivieren.
Der erste Versuch
- Am virtuellen System anmelden
- qjackctl starten und links unten die “Verbindungen” öffnen.
Bei Variante 1 (PulseAudio) sollten automatisch PulseAudio-Geräte angezeigt werden. - Mumble starten, Ein- und Ausgabegeräte auf “Jack Source (PulseAudio JACK Source)” und “Jack Source (PulseAudio JACK Sink)” einstellen
- Mumble beenden um die Einstellungen zu speichern.
- Mumble starten und auf den Server verbinden
- Nun muss man die Geräte nach Belieben verknüpfen und testen :)
Virtuelle Maschine vom Gastsystem aus herunterfahren lassen
Um die VM wieder zu stoppen - und deshalb ist acpi an - verwendet man:
VBoxManage controlvm UbuntuStudio acpipowerbutton
Falls das nicht funktionieren sollte kriegt man es auch gezwungen aus (dies kommt jedoch einem Stromausfall gleich, deshalb meiden):
VBoxManage controlvm UbuntuStudio poweroff
Snapshot von der fertigen VM
VBoxManage snapshot UbuntuStudio take Installiert --description "Installiertes, fertiges System."
Ergebnis
Und der Lohn der Arbeit :) ein schöner Bot in einer VM auf einem Rootserver.
Verbraucht beim Abspielen mit dem Jack-Rack Plugin SimpleAmplifier dauerhaft 25-30 % einer CPU auf dem Wirtssystem.
Man kann noch jede Menge an der VM entschlacken und optimieren … aber für den Anfang bin ich erstmal zufrieden :)