TeamSpeak 3 Server Update automatisieren

  • Hallo liebe Community,


    aufgrund des umständlichen Update Prozesses der TeamSpeak 3 Server, habe ich eigenständig ein Skript zur Automatisierung dieses Prozesses entwickelt. Das Skript bietet folgende Vorteile:

    • Automatische Überprüfung auf neuere Server Version
    • Kann mehrere TeamSpeak 3 Server gleichzeitig aktualisieren
    • Automatische Erkennung der TeamSpeak 3 Server Installationsverzeichnisse
    • Neue Dateien erhalten automatisch die zuvor zugewiesene Benutzer- und Gruppenzuordnung
    • Alte Log-Dateien können automatisiert mit gelöscht werden
    • Wenn ein Update gestartet wird, können alle Clients auf allen Servern per benutzerdefinierte Poke-Nachricht informiert werden
    • Keine Konfiguration des Skripts notwendig
    • Voll automatisierter Update-Prozess deines TeamSpeak 3 Servers
    • Cronjob Unterstützung - automatisiere den Update Prozess vollständig, sodass du nie wieder einen Update Prozess durchführen oder antriggern musst


    Da es einige skeptische Leute gibt, erkläre ich auch gerne noch, was das Skript tut. :)

    • Überprüft, ob der benutzerdefinierte Poke-Text der Maximal-Länge entspricht (wenn der entsprechende Parameter gesetzt ist)
    • Sucht die aktuelle TeamSpeak 3 Server Version bei teamspeak.com
    • Sucht nach TeamSpeak 3 Server Installationsverzeichnissen auf deinem physischen Server
    • Für jedes gefundene Verzeichnis wird dann folgendes ausgeführt:

      • Dateiberechtigungen werden analysiert und gemerkt
      • Installierte TeamSpeak 3 Server Version, Distributation (Linux oder FreeBSD) und Architektur (x86 oder x64) werden identifiziert
      • Überprüft, ob das serveradmin Passwort aus der "password-file" Datei korrekt ist (wenn der entsprechende Parameter gesetzt ist)
      • Identifiziert, ob SQLite oder MySQL benutzt wird
      • Identifiziert den ServerQuery Port
      • Identifiziert, ob TSDNS benutzt wird
      • Gibt eine Übersicht über das aktuelle Installationsverzeichnis aus
      • Wenn die installierte Version unbekannt oder älter als die aktuellste Version ist, wird gefragt, ob der Server geupdatet werden soll - ansonsten beendet sich das Skript mit den nötigen Informationen
      • Downloaded die aktuelle TeamSpeak 3 Server Version (passend zur installierten Version)
      • Informiert Benutzer über das Update (wenn der entsprechende Parameter gesetzt ist)
      • Stoppt TSDNS Server (wenn er gestartet ist)
      • Stoppt TeamSpeak 3 Server
      • Erstellt ein komplettes Backup des Servers in "/tmp/ts3server_backup/" (jedoch ohne den "files/" Ordner, da dort mehrere GB an Daten liegen könnten und das unter Umständen ewig dauert)
      • Löscht die alten Log-Dateien (wenn der entsprechende Parameter gesetzt ist)
      • Entpackt die neuen Server-Dateien in das Installationsverzeichnis des TeamSpeak 3 Servers
      • Passt die Rechte an den zuvor eingestellten Benutzer und die Gruppe an
      • Kopiert aus dem Backup die whitelist- und blacklist-Datei in das Installationsverzeichnis (zur Sicherheit)
      • Kopiert aus dem Backup den license- und serverkey in das Installationsverzeichnis (zur Sicherheit; falls vorhanden)
      • Kopiert aus dem Backup die ts3server.ini in das Installationsverzeichnis (zur Sicherheit; falls vorhanden)
      • Startet den TSDNS Server
      • Startet den TeamSpeak 3 Server
      • Wartet ein paar Sekunden und überprüft, ob der TeamSpeak 3 Server immer noch als Prozess läuft - falls nein, wird das Backup zurück gespielt


    • Informiert über den endgültigen Stand des Update Prozesses
    • Löscht temporäre Dateien (für die aktuelle Version wird eine Cache-Datei angelegt, um heraus zu finden, was die aktuelle Version ist; gedownloadete Server Archive werden ebenfalls gelöscht)


    Finden und downloaden könnt ihr dieses Skript auf der folgenden Seite: GitHub.com/TS3Tools


    Solltet ihr Fragen oder Probleme haben, könnt ihr gerne auf mich zu kommen. :)

  • hallo Sebbo


    bei dem Script zwecks autoupate kommt kurz nach dem er TSDNS startet dieser Fehler


    Starting TSDNS server No directory, logging in with HOME=/
    -su: 1: ./tsdnsserver_linux_amd64: not found
    [ FAILED ]
    No directory, logging in with HOME=/
    Starting the TeamSpeak 3 server


    nach dem er den Cronjob ausgeführt hat sollte er ja ne mail verschicken auch diese geht nicht raus


    Mein System Debian Wheezy 64Bit

  • Hallo Arisu,


    danke für die Info. Ich werde mir das später gleich mal anschauen. :)


    Bzg. E-Mail kann das Skript nichts dafür. Du musst sicherstellen, dass dein Server E-Mails versenden kann. Wenn du also mit dem nachfolgenden Befehl eine E-Mail von deinem Server aus versenden kannst, wird das Skript das auch können. ;)

    Code
    1. echo "Dies ist eine Test E-Mail." | mail -s "Test Mail" receiver@example.com
  • Ok, dann sollte es eigentlich auch beim Skript funktionieren.


    Hast du andere Cronjobs, von denen du E-Mails erhälst?


    Du kannst mal in der /var/log/mail.log nachschauen, was der Status des E-Mail Versands ist. Solltest dann sowas hier finden:

    Code
    1. Aug 29 01:45:02 hostname postfix/pickup[10718]: 1F989599: uid=0 from=<root>Aug 29 01:45:02 hostname postfix/cleanup[10406]: 1F989599: message-id=<20150828234502.1F989599@hostname>Aug 29 01:45:02 hostname postfix/qmgr[26395]: 1F989599: from=<root@hostname>, size=1098, nrcpt=1 (queue active)Aug 29 01:45:02 hostname postfix/smtp[11093]: 1F989599: to=<receiver@example.com>, relay=100.100.100.100[100.100.100.100]:25, delay=0.08, delays=0.01/0.04/0/0.04, dsn=2.0.0, status=sent (250 2.0.0 Ok: queued as 2D2492E1)Aug 29 01:45:02 hostname postfix/qmgr[26395]: 1F989599: removed


    Mit dem Befehl "less" kannst du dir die Datei anzeigen lassen, während du darin dann mit "/receiver@example.com" (und Enter) nach einem passenden Eintrag suchen kannst. ;)

    Code
    1. less /var/log/mail.log


    Mit der Taste "N" gelangst du zum nächsten Suchergebnis, falls es ein weiteres geben sollte.

  • OK Das mit der mail klappt nun keine ahnung woran das gelegen hat hab den Cron Job der ja auch 3 Uhr steht auf 5 Uhr geändert
    kann sein das mein Backup script der um 3 Uhr startet da dazwichen haut


    Jetzt hänge ich nur noch am TSDNS das er diesen erkennt beendet die fils kopiert aber nicht mehr startet da die fehlermelung
    Starting TSDNS server No directory, logging in with HOME=/ -su: 1: ./tsdnsserver_linux_amd64: not found kommt
    TSDNS liegt wie standart bei mir im TS Server verzeichnis

  • So hab nun manuel den eintrag hinzugefügt


    echo "Script execution time: $((TIME_MEASUREMENT_SCRIPT_END-TIME_MEASUREMENT_SCRIPT_START))"s;
    echo -e "\nSupport the development of this script and donate: XXXXXXXXXX Thank you very much!";
    # Restore stdin and close file descriptor 5
    exec 0<&5 5>&-
    unset TERM
    echo "Starte jetzt manuell TSDNS "
    service tsdns start


    exit 0;


    Nun läuft auch mein TSDNS wieder mit vieleicht findest du den Fehler noch ich habs versucht komme aber nicht drauf =(

  • service tsdns start


    Das ist ja keine offizielle Lösung, daher geht das im Skript nicht bei allen so einfach. :D


    Was zeigt dir das Skript denn an, wenn du es ausführst? Da müsste in der Zusammenfassung eine Pfadangabe zum TS3 Ordner angezeigt werden. Wenn dieser korrekt ist, führt das Skript nämlich folgenden Code zum Starten des TSDNS durch:


    Und danach führt es dann auch nochmal einen Check durch, ob TSDNS nach einigen Sekunden auch noch läuft oder abgestürzt ist. Aber soweit kommt dein Skript ja quasi gar nicht. ;)

  • So hab dein script oben als test.sh erstellt
    so schaut es bei mir aus derzeit


    /home
    ts3server
    ts3update


    ich sehe den Befehl


    cd $TEAMSPEAK_DIRECTORY ""da sollte er eigentlich ja ins ts3server - verezeichnis gehen tut er ja auch immerhin startet teamspeak ja""
    # Change into TSDNS directory
    cd tsdns/ " da sollte er in den unterordner tsdns gehen soll


    Der fehler wird meiner meinung hier irgendwie sein
    su -c "./tsdnsserver_"$LINUX_OR_FREEBSD"_"$ARCHITECTURE" &" - $USER
    denn da schreibt er no such file pla pla pla


    nach dem ich einfach mal umschreibe auf su -c "./tsdnsserver_linux_amd64 &" startet er diesen ^^


    root@xxxx:/home/ts3update# ./test.sh
    Starting TSDNS server [ .. ]


    root@xxxx:/home/ts3update# Scanned tsdns_settings.ini, number of entries: 3 normal and 0 wildcards


    ja sehe vor code den wald nicht =)

  • Dann wird bei dir die Architektur oder der Linux Typ nicht korrekt erkannt.


    Kannst du das mal bitte prüfen?

    Code
    1. ARCHITECTURE="$(ls $(find $TEAMSPEAK_DIRECTORY -name 'ts3server_*_*' 2> /dev/null | grep -v 'ts3server_minimal_runscript.sh' | sort | tail -1) | egrep -o '(amd64|x86)' | tail -1)"


    Code
    1. if [ -e "$TEAMSPEAK_DIRECTORY/ts3server_linux_$ARCHITECTURE" ]; then
    2. LINUX_OR_FREEBSD="linux"
    3. elif [ -e "$TEAMSPEAK_DIRECTORY/ts3server_freebsd_$ARCHITECTURE" ]; then
    4. LINUX_OR_FREEBSD="freebsd"
    5. fi


    Die Variable "$TEAMSPEAK_DIRECTORY" bitte gegen deinen Wert austauschen. Also z.B. "/home/teamspeak".


    Bei "$ARCHITECTURE" setzt du dann das Ergebnis vom ersten Code ein. ;)

  • Schaue ich heute abend danach


    wäre doch aber bei Teamspeak das problem nicht auch ?
    Sprich Architektur oder der Linux Typ
    Da updatet er genau das was er soll Linux Debian 64 bit achitekur
    Ohne das ich da was ändere
    Beim Starten vom TSDNS bringt er ja dann die Architektur oder der Linux Typ durcheinander ^^ ?

  • Das neue TS3UpdateScript v4.0.0 wurde vorhin veröffentlicht! :)


    Download: TS3Tools/TS3UpdateScript · GitHub


  • Hallo Sebbo


    So nach dem ich mal wieder dein script angechaut habe da es bei mir ja das problem mit dem TSDNS gab.
    Sehe ich nun das der cronjob nur noch mit einer license geht.
    Die license kostet wenn ich das richtig sehe 79€ für Privat sowie Hosteranbieter.
    Oder hast du für Privat eine andere License im angebot.
    Denke für mich als Privatperson der einen Server nur online hat wäre das einwenig viel geld somal ich kein Onlinehoster bin

  • Hallo @Arisu,


    79 € sind für diese Lizenz nicht teuer, wenn man beachtet, was man alles erhält und was das Skript alles kann und auch abfängt. Die Lizenz ist für private und auch kommerzielle Zwecke gedacht. Da sich das Cronjob Feature eigentlich auch nur bei mehreren Servern/Instanzen lohnt, wurde die Lizenz "Hoster" genannt. "Hoster" in dem Sinne, da diese Person/Firma mehrere Instanzen betreibt. Das macht auch den Unterschied zwischen der Non-Profit und Hoster Lizenz. Mit der Standard Lizenz kann das Skript lediglich eine einzige Instanz updaten, während man mit der Hoster mehrere Updaten kann. Siehe auch hier: TS3Tools/TS3UpdateScript · GitHub ;)


    79 € sind daher gerechtfertigt und wie einige Käufer schon gesagt haben, sogar viel zu günstig. Zudem musst du beachten, dass die Lizenz auch für die kommenden Versionen etc. gilt und nicht nur für die aktuelle, die du dann in Benutzung hast/hattest. Zudem erhälst du noch einen 5-jährigen Support auf das Skript, welcher z.B. Bugfixes, Feature-Requests, Optimierungen etc. abdeckt - selbst, wenn ich es z.B. irgendwann nicht mehr weiter entwickeln sollte. ;)


    Umgerechnet sind das pro Zeile Code um die 0,02 €, was viel zu wenig ist. Normalerweise rechnet man mit ~ 0,40 € pro Zeile. Das nur so als Info am Rande. :)

  • Naja auch wenn ich nur einen Instanz betreibe so muss ich mich ja immer wieder über die shell einlogen um das script zu starten. "ohne License"
    Auch kann ich diesen befehl nicht per crontab erstellen da der befehl --autoupdate entfernt würde.

  • Ja, das ist korrekt. Die Cronjob Fähigkeit ist wie gesagt ein spezielles Feature, welches nochmals Aufwand sparen soll, indem alles voll automatisiert abläuft. Bei nur einer Instanz kann man den Befehl einmal alle 8-12 Wochen durchführen. Wer hier einen Cronjob nutzt, ist einfach nur sehr faul, denn das Skript macht ja selbst dann alles automatisiert. ;)

  • Hallo,


    das Script macht prinzipiell gute Arbeit, jedoch hält es bei mir eine Falsche Version für neuer: