SPAWNPUNKT

◆ COMMUNITY / Server-Administration & Linux /// SPAWNPUNKT COMMUNITY

Sinusbot unter Linux installieren

Ein ausführlicher Spawnpunkt Guide.

Fortgeschritten 19 Min. Lesezeit
Linux · SinusBot · TeamSpeak

SinusBot auf Linux installieren: kompletter Guide mit Autostart & Auto-Update

In dieser Anleitung installieren wir SinusBot sauber auf einem Ubuntu- oder Debian-Server. Wir richten einen eigenen Linux-Benutzer, den benötigten TeamSpeak-Client, das Webinterface, einen automatischen Start über systemd sowie ein optionales Update-System mit Backup und Rollback ein.

Ubuntu Debian SinusBot TeamSpeak 3 systemd Autostart Auto-Update

Was ist SinusBot?

SinusBot ist ein Music- und Automation-Bot, der unter anderem für TeamSpeak und Discord verwendet werden kann.

Auf einem eigenen Linux-Server kann SinusBot dauerhaft laufen, ohne dass auf einem privaten PC ein TeamSpeak-Client geöffnet bleiben muss.

Die Verwaltung erfolgt bequem über ein eigenes Webinterface. Dort können später Instanzen eingerichtet, Musik hochgeladen, Wiedergabelisten erstellt, Benutzer angelegt und Scripts verwaltet werden.

In diesem Guide installieren wir den Bot nicht einfach irgendwie, sondern möglichst sauber getrennt vom restlichen System.

  • eigener Linux-Benutzer für SinusBot
  • Installation unter /opt/sinusbot
  • kompatibler TeamSpeak-Client
  • Webinterface
  • systemd-Autostart
  • automatischer Neustart bei Fehlern
  • Update-System
  • automatische Backups vor Updates
  • Rollback bei einem fehlgeschlagenen Update
Wichtig für TeamSpeak 6 Die offizielle SinusBot-Version arbeitet derzeit weiterhin mit dem TeamSpeak-3-Client. Wenn dein Voice-Server bereits vollständig auf TeamSpeak 6 setzt, solltest du vorher prüfen, ob deine gewünschte Kombination tatsächlich unterstützt wird. Dieser Guide verwendet bewusst die offizielle SinusBot- und TeamSpeak-3-Client-Konfiguration und keine inoffiziell gepatchte TS6-Version.
Vorbereitung

Voraussetzungen

Für die Installation benötigst du einen Linux-Server mit Root- beziehungsweise sudo-Zugriff.

Empfehlenswert ist ein aktuelles Debian- oder Ubuntu-System.

Der SinusBot selbst benötigt vergleichsweise wenig Leistung. Der größte Teil des Speicherverbrauchs entsteht normalerweise durch die gestarteten TeamSpeak-Client-Instanzen.

System überprüfen

Systeminformationen
cat /etc/os-release
uname -m
uname -r
free -h
df -h /

Damit sehen wir Betriebssystem, Prozessorarchitektur, Kernel-Version, verfügbaren Arbeitsspeicher und freien Speicherplatz.

Schritt 1

System aktualisieren

Bevor wir neue Software installieren, aktualisieren wir zuerst die Paketlisten und bereits vorhandene Pakete.

Linux aktualisieren
sudo apt update
sudo apt upgrade -y
Schritt 2

SinusBot-Abhängigkeiten installieren

SinusBot benötigt für die TeamSpeak-Funktion einen vollständigen TeamSpeak-Client.

Da der Client normalerweise eine grafische Oberfläche erwartet, verwenden wir unter Linux unter anderem Xvfb. Dadurch kann der TeamSpeak-Client auf einem Server ohne echten Monitor und ohne Desktop-Umgebung ausgeführt werden.

Abhängigkeiten installieren
sudo apt install -y \
curl \
wget \
ca-certificates \
bzip2 \
tar \
rsync \
xvfb \
x11vnc \
x11-xkb-utils \
libxcursor1 \
libnss3 \
libegl1 \
libpci3 \
libxslt1.1 \
libxkbcommon0 \
libxss1 \
libxcomposite1 \
libxi6 \
libfontconfig1 \
libxtst6 \
libglib2.0-0 \
dbus \
psmisc \
util-linux

Audio-Bibliothek installieren

Neuere Debian- und Ubuntu-Versionen verwenden teilweise libasound2t64, während ältere Systeme weiterhin libasound2 bereitstellen.

Der folgende Befehl erkennt automatisch, welches Paket auf deinem System vorhanden ist:

ALSA installieren
if apt-cache show libasound2t64 >/dev/null 2>&1; then
    sudo apt install -y libasound2t64
else
    sudo apt install -y libasound2
fi
Warum nicht libegl1-mesa? Viele ältere SinusBot-Anleitungen nennen noch libegl1-mesa. Auf neueren Distributionen ist dieses Paket teilweise nicht mehr vorhanden. Deshalb verwenden wir hier das aktuelle Paket libegl1.
Schritt 3

Eigenen SinusBot-Benutzer anlegen

Ein öffentlich erreichbarer Dienst sollte nicht unnötig als Root laufen.

Deshalb erstellen wir einen eigenen Systembenutzer namens sinusbot.

Benutzer erstellen
sudo useradd \
--system \
--create-home \
--home-dir /opt/sinusbot \
--shell /usr/sbin/nologin \
sinusbot

Anschließend stellen wir sicher, dass das Verzeichnis existiert und dem richtigen Benutzer gehört.

Verzeichnis vorbereiten
sudo install \
-d \
-o sinusbot \
-g sinusbot \
-m 0750 \
/opt/sinusbot
Schritt 4

SinusBot herunterladen und installieren

Für den Download verwenden wir den offiziellen sinusbot.current.tar.bz2-Download.

SinusBot herunterladen
cd /opt/sinusbot

sudo -u sinusbot curl \
-fL \
https://www.sinusbot.com/dl/sinusbot.current.tar.bz2 \
-o sinusbot.current.tar.bz2

Paket entpacken

Archiv entpacken
sudo -u sinusbot tar \
-xjf /opt/sinusbot/sinusbot.current.tar.bz2 \
-C /opt/sinusbot

Paket-Prüfsumme speichern

Die Prüfsumme brauchen wir später für unser automatisches Update-System.

Prüfsumme speichern
sudo -u sinusbot bash -c '
sha256sum /opt/sinusbot/sinusbot.current.tar.bz2 |
awk "{print \$1}" > /opt/sinusbot/.sinusbot-package.sha256
'

Konfigurationsdatei erstellen

config.ini erstellen
sudo -u sinusbot cp \
/opt/sinusbot/config.ini.dist \
/opt/sinusbot/config.ini

SinusBot ausführbar machen

Berechtigungen
sudo chmod 0755 /opt/sinusbot/sinusbot
sudo chown -R sinusbot:sinusbot /opt/sinusbot
Schritt 5

TeamSpeak-Client installieren

SinusBot verbindet sich nicht wie ein klassischer ServerQuery-Bot mit TeamSpeak.

Stattdessen startet SinusBot einen echten TeamSpeak-Client im Hintergrund. Deshalb benötigt die Installation zusätzlich die passenden TeamSpeak-Client-Dateien.

Für die offizielle SinusBot-Konfiguration verwenden wir TeamSpeak Client 3.5.6.

TeamSpeak Client herunterladen
cd /opt/sinusbot

sudo -u sinusbot curl \
-fL \
https://files.teamspeak-services.com/releases/client/3.5.6/TeamSpeak3-Client-linux_amd64-3.5.6.run \
-o TeamSpeak3-Client-linux_amd64-3.5.6.run

sudo chmod 0755 \
/opt/sinusbot/TeamSpeak3-Client-linux_amd64-3.5.6.run

TeamSpeak-Installer ausführen

Client installieren
cd /opt/sinusbot

sudo -u sinusbot \
./TeamSpeak3-Client-linux_amd64-3.5.6.run
TeamSpeak-Lizenz lesen Der TeamSpeak-Installer zeigt die Lizenzbedingungen an. Diese musst du selbst lesen und akzeptieren. Üblicherweise kannst du mit Q die Anzeige verlassen und anschließend die Abfrage bestätigen.

Client-Verzeichnis vereinheitlichen

TeamSpeak-Verzeichnis umbenennen
sudo -u sinusbot mv \
/opt/sinusbot/TeamSpeak3-Client-linux_amd64 \
/opt/sinusbot/teamspeak3-client

Problematische GLX-Bibliothek entfernen

GLX-Integration entfernen
sudo rm -f \
/opt/sinusbot/teamspeak3-client/xcbglintegrations/libqxcb-glx-integration.so
Schritt 6

SinusBot-Plugin in TeamSpeak installieren

SinusBot bringt ein eigenes TeamSpeak-Plugin mit. Dieses Plugin stellt die Kommunikation zwischen SinusBot und dem gestarteten TeamSpeak-Client her.

Plugin-Verzeichnis erstellen
sudo -u sinusbot mkdir -p \
/opt/sinusbot/teamspeak3-client/plugins
SinusBot-Plugin kopieren
sudo -u sinusbot cp \
/opt/sinusbot/plugin/libsoundbot_plugin.so \
/opt/sinusbot/teamspeak3-client/plugins/
Schritt 7

SinusBot konfigurieren

Jetzt müssen wir SinusBot mitteilen, wo sich der TeamSpeak-Client befindet.

config.ini bearbeiten
sudo nano /opt/sinusbot/config.ini

Die wichtigsten Einstellungen sollten folgendermaßen aussehen:

Empfohlene Konfiguration
TS3Path = "/opt/sinusbot/teamspeak3-client/ts3client_linux_amd64"

ListenHost = "127.0.0.1"

ListenPort = 8087
Warum 127.0.0.1? Dadurch ist das SinusBot-Webinterface zunächst ausschließlich lokal auf dem Server erreichbar. Das ist erheblich sicherer, als Port 8087 ungefiltert für das gesamte Internet freizugeben.
Schritt 8

SinusBot Autostart mit systemd

SinusBot soll nach einem Neustart des Linux-Servers automatisch wieder gestartet werden.

Dafür verwenden wir systemd.

SinusBot stellt dafür selbst ein offizielles systemd-Startscript bereit.

Offiziellen Service herunterladen
sudo curl \
-fsSL \
https://raw.githubusercontent.com/SinusBot/linux-startscript/master/sinusbot.service \
-o /etc/systemd/system/sinusbot.service

Platzhalter automatisch ersetzen

systemd konfigurieren
sudo sed -i \
-e 's|YOUR_USER|sinusbot|g' \
-e 's|YOURPATH_TO_THE_BOT_BINARY|/opt/sinusbot/sinusbot|g' \
-e 's|YOURPATH_TO_THE_BOT_DIRECTORY|/opt/sinusbot|g' \
-e 's|YOURPATH_TO_THE_BOT|/opt/sinusbot|g' \
/etc/systemd/system/sinusbot.service

systemd neu laden

systemd neu laden
sudo systemctl daemon-reload

Autostart aktivieren

SinusBot starten
sudo systemctl enable --now sinusbot

enable sorgt dafür, dass der Bot künftig automatisch beim Systemstart geladen wird.

Durch --now wird der Dienst zusätzlich sofort gestartet.

Schritt 9

SinusBot-Status überprüfen

Status anzeigen
sudo systemctl status sinusbot --no-pager -l

Der Dienst sollte als active (running) angezeigt werden.

SinusBot-Log anzeigen

Live-Log
sudo journalctl -u sinusbot -f

Beim ersten Start erzeugt SinusBot normalerweise ein zufälliges Administratorpasswort.

Dieses findest du im Start-Log.

Letzte Meldungen anzeigen
sudo journalctl \
-u sinusbot \
-n 100 \
--no-pager
Schritt 10

SinusBot-Webinterface öffnen

Da wir das Webinterface absichtlich nur an 127.0.0.1 gebunden haben, öffnen wir für die erste Einrichtung einen SSH-Tunnel.

Dieser Befehl wird auf deinem eigenen Computer ausgeführt:

SSH-Tunnel
ssh -L 8087:127.0.0.1:8087 DEIN-SSH-BENUTZER@DEINE-SERVER-IP

Danach öffnest du auf deinem Computer:

Webinterface
http://127.0.0.1:8087

Der Standardbenutzer lautet:

Benutzer
admin
Admin-Passwort ändern Ändere das automatisch erzeugte Administratorpasswort nach dem ersten Login sofort gegen ein eigenes starkes Passwort.
Schritt 11

TeamSpeak-Bot einrichten

Nachdem du dich im SinusBot-Webinterface angemeldet hast, kannst du eine neue Bot-Instanz konfigurieren.

Dafür benötigst du unter anderem:

  • Adresse deines TeamSpeak-Servers
  • Voice-Port, normalerweise 9987
  • gewünschten Bot-Namen
  • gegebenenfalls Serverpasswort
  • gewünschten Channel
  • gegebenenfalls Channel-Passwort

Anschließend kannst du die Instanz über das SinusBot-Webinterface starten.

Optional

SinusBot automatisch aktualisieren

SinusBot stellt unter derselben Downloadadresse jeweils das aktuelle Paket bereit.

Wir können deshalb regelmäßig das Paket herunterladen und dessen SHA-256-Prüfsumme mit der installierten Version vergleichen.

Nur wenn sich das Paket tatsächlich geändert hat, wird ein Update durchgeführt.

Vorher erzeugen wir automatisch ein vollständiges Backup.

Produktivserver? Automatische Updates sind bequem, können bei Änderungen aber auch neue Fehler mitbringen. Wer maximale Kontrolle möchte, kann dasselbe Script ausschließlich manuell starten und auf den systemd-Timer verzichten.
Update-Script erstellen
sudo tee /usr/local/sbin/sinusbot-update >/dev/null <<'EOF'
#!/usr/bin/env bash

set -Eeuo pipefail

INSTALL="/opt/sinusbot"
URL="https://www.sinusbot.com/dl/sinusbot.current.tar.bz2"

BACKUP_ROOT="$INSTALL/backups"
HASHFILE="$INSTALL/.sinusbot-package.sha256"

LOCK="/run/lock/sinusbot-update.lock"

exec 9>"$LOCK"

if ! flock -n 9; then
    echo "Ein SinusBot-Update läuft bereits."
    exit 0
fi


TMP="$(mktemp -d)"

trap 'rm -rf "$TMP"' EXIT

PACKAGE="$TMP/sinusbot.current.tar.bz2"
EXTRACT="$TMP/extracted"

mkdir -p "$EXTRACT"


echo "Lade aktuelles SinusBot-Paket herunter ..."

curl -fL "$URL" -o "$PACKAGE"


NEW_HASH="$(
    sha256sum "$PACKAGE" |
    awk '{print $1}'
)"


OLD_HASH="$(
    cat "$HASHFILE" 2>/dev/null ||
    echo "unknown"
)"


echo "Installierte Prüfsumme: $OLD_HASH"
echo "Aktuelle Prüfsumme:     $NEW_HASH"


if [[ "$NEW_HASH" == "$OLD_HASH" ]]; then

    echo "SinusBot ist bereits aktuell."

    exit 0

fi


echo "Neue Version erkannt."

echo "Prüfe Archiv ..."

tar -tjf "$PACKAGE" >/dev/null

tar -xjf "$PACKAGE" -C "$EXTRACT"


if [[ ! -f "$EXTRACT/sinusbot" ]]; then

    echo "Ungültiges SinusBot-Paket."

    exit 1

fi


echo "Stoppe SinusBot ..."

systemctl stop sinusbot


TIMESTAMP="$(date '+%Y-%m-%d_%H-%M-%S')"

BACKUP_DIR="$BACKUP_ROOT/$TIMESTAMP"

mkdir -p "$BACKUP_DIR"

BACKUP="$BACKUP_DIR/sinusbot-backup.tar.gz"


echo "Erstelle Backup ..."

tar \
    --exclude='./backups' \
    --exclude='./sinusbot.current.tar.bz2' \
    -czf "$BACKUP" \
    -C "$INSTALL" .


echo "Installiere neue SinusBot-Dateien ..."

rsync -a \
"$EXTRACT/" \
"$INSTALL/"


if [[ -d "$INSTALL/teamspeak3-client/plugins" ]]; then

    cp \
    "$INSTALL/plugin/libsoundbot_plugin.so" \
    "$INSTALL/teamspeak3-client/plugins/"

fi


chmod 0755 "$INSTALL/sinusbot"

printf '%s\n' "$NEW_HASH" > "$HASHFILE"

chown -R sinusbot:sinusbot "$INSTALL"


echo "Starte SinusBot ..."

systemctl start sinusbot

sleep 8


if systemctl is-active --quiet sinusbot; then

    echo "SinusBot-Update erfolgreich."

else

    echo "Update fehlgeschlagen."

    echo "Rollback wird durchgeführt ..."

    systemctl stop sinusbot 2>/dev/null || true


    find "$INSTALL" \
        -mindepth 1 \
        -maxdepth 1 \
        ! -name backups \
        -exec rm -rf {} +


    tar \
        -xzf "$BACKUP" \
        -C "$INSTALL"


    chown -R \
        sinusbot:sinusbot \
        "$INSTALL"


    systemctl start sinusbot

    sleep 5


    if systemctl is-active --quiet sinusbot; then

        echo "Rollback erfolgreich."

    else

        echo "Rollback konnte SinusBot nicht starten."

        echo "Manuelle Prüfung erforderlich."

    fi

    exit 1

fi


echo "Bereinige alte Backups ..."

find "$BACKUP_ROOT" \
    -mindepth 1 \
    -maxdepth 1 \
    -type d \
    -mtime +14 \
    -exec rm -rf {} +


echo "Update abgeschlossen."
EOF

sudo chmod 0755 \
/usr/local/sbin/sinusbot-update
Optional

Automatische Update-Prüfung mit systemd

Wir lassen SinusBot bewusst nicht alle paar Stunden nach neuen Versionen suchen.

Eine wöchentliche Prüfung reicht für einen solchen Dienst vollkommen aus.

Update-Service erstellen

Update-Service
sudo tee /etc/systemd/system/sinusbot-update.service >/dev/null <<'EOF'
[Unit]
Description=SinusBot Automatic Update
Wants=network-online.target
After=network-online.target

[Service]
Type=oneshot

ExecStart=/usr/local/sbin/sinusbot-update
EOF

Timer erstellen

Update-Timer
sudo tee /etc/systemd/system/sinusbot-update.timer >/dev/null <<'EOF'
[Unit]
Description=Weekly SinusBot Update Check

[Timer] *-*-* 05:30:00

RandomizedDelaySec=30m

Persistent=true

[Install]
WantedBy=timers.target
EOF

Timer aktivieren

Update-Timer starten
sudo systemctl daemon-reload

sudo systemctl enable \
--now \
sinusbot-update.timer

Nächste Update-Prüfung anzeigen

Timer prüfen
systemctl list-timers \
sinusbot-update.timer

Update manuell durchführen

Auch wenn der automatische Timer aktiviert ist, kann das Update jederzeit manuell gestartet werden.

Update starten
sudo /usr/local/sbin/sinusbot-update

Update-Protokoll anzeigen

Update-Log
sudo journalctl \
-u sinusbot-update.service \
-n 100 \
--no-pager

Wo befinden sich die Backups?

Vor jedem automatischen Update erstellt unser Script ein vollständiges Backup der SinusBot-Installation.

Backup-Verzeichnis
/opt/sinusbot/backups

Dazu gehören unter anderem wichtige Dateien wie:

  • config.ini
  • private.dat
  • data/
  • scripts/
  • TeamSpeak-Client
  • SinusBot-Dateien

Die wichtigsten SinusBot-Befehle

SinusBot starten

Start
sudo systemctl start sinusbot

SinusBot stoppen

Stop
sudo systemctl stop sinusbot

SinusBot neu starten

Neustart
sudo systemctl restart sinusbot

Status anzeigen

Status
sudo systemctl status sinusbot

Autostart prüfen

Autostart
systemctl is-enabled sinusbot

Live-Log anzeigen

Live-Log
sudo journalctl -u sinusbot -f

SinusBot-Prozesse anzeigen

Prozesse
ps aux | grep -E 'sinusbot|ts3client' | grep -v grep

Häufige Probleme

SinusBot startet nicht

Prüfe zuerst das systemd-Log:

Fehlerlog
sudo journalctl \
-u sinusbot \
-n 150 \
--no-pager

TeamSpeak-Client startet nicht

Überprüfe zunächst, ob der Client-Pfad stimmt:

TeamSpeak-Binary prüfen
ls -lah \
/opt/sinusbot/teamspeak3-client/ts3client_linux_amd64

SinusBot-Plugin fehlt

Plugin prüfen
ls -lah \
/opt/sinusbot/teamspeak3-client/plugins/libsoundbot_plugin.so

Dateiberechtigungen reparieren

Besitzer korrigieren
sudo chown -R \
sinusbot:sinusbot \
/opt/sinusbot

Port 8087 überprüfen

Webinterface-Port prüfen
sudo ss -lntp | grep 8087

Fertig: SinusBot läuft auf deinem Linux-Server

Dein SinusBot läuft jetzt unter einem eigenen Linux-Benutzer, startet automatisch über systemd und kann über das Webinterface verwaltet werden. Optional prüft dein Server regelmäßig auf ein neues SinusBot-Paket, erstellt vor jedem Update ein Backup und kann bei einem fehlgeschlagenen Update automatisch auf den vorherigen Zustand zurückwechseln.