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

Virtuelle Maschine auf dem Rootserver mit laufendem Jack, darauf aufsetzendem PulseAudio und Mumble als Musikbot …
Virtuelle Maschine auf dem Rootserver mit laufendem Jack, darauf aufsetzendem PulseAudio und Mumble als Musikbot …

Zuletzt geändert: 2023-10-28 11:58:12 +0200 CEST: remove import status