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.
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
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
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.
System aktualisieren
Bevor wir neue Software installieren, aktualisieren wir zuerst die Paketlisten und bereits vorhandene Pakete.
sudo apt update
sudo apt upgrade -y
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.
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:
if apt-cache show libasound2t64 >/dev/null 2>&1; then
sudo apt install -y libasound2t64
else
sudo apt install -y libasound2
fi
libegl1-mesa. Auf neueren Distributionen ist dieses
Paket teilweise nicht mehr vorhanden. Deshalb verwenden wir
hier das aktuelle Paket libegl1.
Eigenen SinusBot-Benutzer anlegen
Ein öffentlich erreichbarer Dienst sollte nicht unnötig als Root laufen.
Deshalb erstellen wir einen eigenen Systembenutzer namens
sinusbot.
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.
sudo install \
-d \
-o sinusbot \
-g sinusbot \
-m 0750 \
/opt/sinusbot
SinusBot herunterladen und installieren
Für den Download verwenden wir den offiziellen
sinusbot.current.tar.bz2-Download.
cd /opt/sinusbot
sudo -u sinusbot curl \
-fL \
https://www.sinusbot.com/dl/sinusbot.current.tar.bz2 \
-o sinusbot.current.tar.bz2
Paket 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.
sudo -u sinusbot bash -c '
sha256sum /opt/sinusbot/sinusbot.current.tar.bz2 |
awk "{print \$1}" > /opt/sinusbot/.sinusbot-package.sha256
'
Konfigurationsdatei erstellen
sudo -u sinusbot cp \
/opt/sinusbot/config.ini.dist \
/opt/sinusbot/config.ini
SinusBot ausführbar machen
sudo chmod 0755 /opt/sinusbot/sinusbot
sudo chown -R sinusbot:sinusbot /opt/sinusbot
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.
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
cd /opt/sinusbot
sudo -u sinusbot \
./TeamSpeak3-Client-linux_amd64-3.5.6.run
Client-Verzeichnis vereinheitlichen
sudo -u sinusbot mv \
/opt/sinusbot/TeamSpeak3-Client-linux_amd64 \
/opt/sinusbot/teamspeak3-client
Problematische GLX-Bibliothek entfernen
sudo rm -f \
/opt/sinusbot/teamspeak3-client/xcbglintegrations/libqxcb-glx-integration.so
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.
sudo -u sinusbot mkdir -p \
/opt/sinusbot/teamspeak3-client/plugins
sudo -u sinusbot cp \
/opt/sinusbot/plugin/libsoundbot_plugin.so \
/opt/sinusbot/teamspeak3-client/plugins/
SinusBot konfigurieren
Jetzt müssen wir SinusBot mitteilen, wo sich der TeamSpeak-Client befindet.
sudo nano /opt/sinusbot/config.ini
Die wichtigsten Einstellungen sollten folgendermaßen aussehen:
TS3Path = "/opt/sinusbot/teamspeak3-client/ts3client_linux_amd64"
ListenHost = "127.0.0.1"
ListenPort = 8087
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.
sudo curl \
-fsSL \
https://raw.githubusercontent.com/SinusBot/linux-startscript/master/sinusbot.service \
-o /etc/systemd/system/sinusbot.service
Platzhalter automatisch ersetzen
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
sudo systemctl daemon-reload
Autostart aktivieren
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.
SinusBot-Status überprüfen
sudo systemctl status sinusbot --no-pager -l
Der Dienst sollte als active (running) angezeigt werden.
SinusBot-Log anzeigen
sudo journalctl -u sinusbot -f
Beim ersten Start erzeugt SinusBot normalerweise ein zufälliges Administratorpasswort.
Dieses findest du im Start-Log.
sudo journalctl \
-u sinusbot \
-n 100 \
--no-pager
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 -L 8087:127.0.0.1:8087 DEIN-SSH-BENUTZER@DEINE-SERVER-IP
Danach öffnest du auf deinem Computer:
http://127.0.0.1:8087
Der Standardbenutzer lautet:
admin
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.
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.
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
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
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
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
sudo systemctl daemon-reload
sudo systemctl enable \
--now \
sinusbot-update.timer
Nächste Update-Prüfung anzeigen
systemctl list-timers \
sinusbot-update.timer
Update manuell durchführen
Auch wenn der automatische Timer aktiviert ist, kann das Update jederzeit manuell gestartet werden.
sudo /usr/local/sbin/sinusbot-update
Update-Protokoll anzeigen
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.
/opt/sinusbot/backups
Dazu gehören unter anderem wichtige Dateien wie:
config.iniprivate.datdata/scripts/- TeamSpeak-Client
- SinusBot-Dateien
Die wichtigsten SinusBot-Befehle
SinusBot starten
sudo systemctl start sinusbot
SinusBot stoppen
sudo systemctl stop sinusbot
SinusBot neu starten
sudo systemctl restart sinusbot
Status anzeigen
sudo systemctl status sinusbot
Autostart prüfen
systemctl is-enabled sinusbot
Live-Log anzeigen
sudo journalctl -u sinusbot -f
SinusBot-Prozesse anzeigen
ps aux | grep -E 'sinusbot|ts3client' | grep -v grep
Häufige Probleme
SinusBot startet nicht
Prüfe zuerst das systemd-Log:
sudo journalctl \
-u sinusbot \
-n 150 \
--no-pager
TeamSpeak-Client startet nicht
Überprüfe zunächst, ob der Client-Pfad stimmt:
ls -lah \
/opt/sinusbot/teamspeak3-client/ts3client_linux_amd64
SinusBot-Plugin fehlt
ls -lah \
/opt/sinusbot/teamspeak3-client/plugins/libsoundbot_plugin.so
Dateiberechtigungen reparieren
sudo chown -R \
sinusbot:sinusbot \
/opt/sinusbot
Port 8087 überprü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.