hier möchte ich gerne mal vorstellen, was ich heute geschrieben habe. Es handelt sich um eine umgeschriebene Version von dem Startscript, welches Teamspeak einem bietet. Dies kann nun nicht nur starten, stoppen und neu starten, sondern auch einen Server installieren bzw. diesen Server updaten.
Es ist noch einiges verbesserungswürdig und ich muss mich für mein ungeschicktes Coding entschuldigen, schließlich programmiere ich noch nicht lange und dann bestimmt kein Shell ;-)
Hier habt ihr die Skripts, die werden bald vielleicht noch zu einem zusammengefasst:
Dies ist für x86, getestet auf Debian 6.0, so weit ich sagen kann funktionstüchtig.
Dateiname: ts3_x86.sh
Code:
#!/bin/bash
# Copyright (c) 2010 TeamSpeak Systems GmbH
# All rights reserved
# Zusätzliche Features von Madmatti
#
# I DO NOT GIVE ANY WARRANTY THAT THIS SCRIPT WILL WORK PROPERLY.
# DO NOT USE THIS SCRIPT IN A COMMERCIAL ENVIRONMENT! ! !
# USING THIS SCRIPT IS ON YOUR OWN RISK
#
# ICH GEBE KEINE GARANTIE, DASS DAS SKRIPT RICHTIG FUNKTIONIERT.
# BENUTZE DIESES SKRIPT AUF KEINEN FALL IN EINER KOMMERZIELLEN UMGEBUNG! ! !
# BENUTZUNG DES SKRIPTS AUF EIGENE GEFAHR
case "$1" in
start)
cd /home/ts3/teamspeak3-server_linux-x86
echo "Instanz wird initialisiert..."
if [ -e ts3server.pid ]; then
if ( kill -0 $(cat ts3server.pid) 2> /dev/null ); then
echo "Der Server läuft bereits. Versuche die Parameter stop oder restart."
exit 1
else
echo "Es wurde ts3server.pid gefunden, aber es laufen keine Server. Server gecrasht?"
echo "Bitte die logfiles für mehr Infos einsehen."
rm ts3server.pid
fi
fi
if [ "${UID}" = "0" ]; then
echo ACHTUNG ! Aus Sicherheitsgründen empfielt Teamspeak: Starte den Server NICHT als Root
c=1
while [ "$c" -le 10 ]; do
echo -n "!"
sleep 1
c=$((++c))
done
echo "!"
fi
echo "Starte den TeamSpeak 3 Server"
if [ -e "$BINARYNAME" ]; then
if [ ! -x "$BINARYNAME" ]; then
echo "${BINARYNAME} ist nicht ausführbar, versuche nun, die Datei ausführbar zu machen."
chmod u+x "${BINARYNAME}"
fi
if [ -x "$BINARYNAME" ]; then
export LD_LIBRARY_PATH="${LIBRARYPATH}:${LD_LIBRARY_PATH}"
"./${BINARYNAME}" ${COMMANDLINE_PARAMETERS} > /dev/null &
echo $! > ts3server.pid
echo "TeamSpeak 3 Server wurden erfolgreich gestartet, siehe Logfiles für mehr Informationen."
else
echo "${BINARNAME} ist nicht ausführbar, Server konnte nicht gestartet werden."
fi
else
echo "Kann die Binaries nicht finden, breche ab."
exit 2
fi
;;
stop)
cd /home/ts3/teamspeak3-server_linux-x86
echo "Instanz wird gestoppt..."
if [ -e ts3server.pid ]; then
echo -n "Stoppe den TeamSpeak 3 Server"
if ( kill -TERM $(cat ts3server.pid) 2> /dev/null ); then
c=1
while [ "$c" -le 300 ]; do
if ( kill -0 $(cat ts3server.pid) 2> /dev/null ); then
echo -n "."
sleep 1
else
break
fi
c=$((++c))
done
fi
if ( kill -0 $(cat ts3server.pid) 2> /dev/null ); then
echo "Server fährt sich nicht sauber herunter - killing"
kill -KILL $(cat ts3server.pid)
else
echo "fertig"
fi
rm ts3server.pid
else
echo "Es läuft kein Server (ts3server.pid nicht vorhanden)"
exit 3
fi
;;
restart)
$0 stop && $0 start || exit 4
;;
install)
adduser ts3
cd /home/ts3
wget http://teamspeak.gameserver.gamed.de/ts3/releases/3.0.6.1/teamspeak3-server_linux-x86-3.0.6.1.tar.gz -O teamspeak3.tar.gz
tar xfvz teamspeak3.tar.gz
chown -R ts3:ts3 teamspeak3-server_linux-x86
cd /home/ts3/teamspeak3-server_linux-x86
chmod +x ts3server_startscript.sh ts3server_minimal_runscript.sh ts3server_linux_x86
su -c "./ts3server_minimal_runscript.sh > data.txt" ts3
echo "Alle Daten stehen in der Datei data.txt"
echo "Sollten keine Fehlermeldungen aufgetreten sein, so ist der Server nun fertig installiert!"
echo "Falls es dir gefallen hat, besuche doch meinen Youtube Kanal unter http://www.youtube.com/user/Madmatti94"
;;
update)
cp ts3_x86.sh /home/ts3/teamspeak3-server_linux-x86
echo "Update wird ausgeführt..."
cd /home/ts3/teamspeak3-server_linux-x86
su -c "$0 stop" ts3
cd ..
wget http://teamspeak.gameserver.gamed.de/ts3/releases/3.0.6.1/teamspeak3-server_linux-x86-3.0.6.1.tar.gz -O teamspeak3.tar.gz
tar xfvz teamspeak3.tar.gz
chown -R ts3:ts3 /home/ts3
cd /home/ts3/teamspeak3-server_linux-x86
su -c "$0 start" ts3
echo "Sollten keine Fehlermeldungen aufgetreten sein, so ist der Server nun fertig geupdated!"
echo "Falls es dir gefallen hat, besuche doch meinen Youtube Kanal unter http://www.youtube.com/user/Madmatti94"
;;
*)
echo "Falsche Benutzung. Bitte mit einem der folgenden Parameter ausführen: $0 (start/stop/restart/install/update)"
exit 5
;;
esac
exit 0
Dieses ist für amd64, von mir ungetestet, ist aber abgesehen von Pfaden und Downloadlinks identisch.
Dateiname: ts3_amd64.sh
Code:
#!/bin/bash
# Copyright (c) 2010 TeamSpeak Systems GmbH
# All rights reserved
# Zusätzliche Features von Madmatti
#
# I DO NOT GIVE ANY WARRANTY THAT THIS SCRIPT WILL WORK PROPERLY.
# DO NOT USE THIS SCRIPT IN A COMMERCIAL ENVIRONMENT! ! !
# USING THIS SCRIPT IS ON YOUR OWN RISK
#
# ICH GEBE KEINE GARANTIE, DASS DAS SKRIPT RICHTIG FUNKTIONIERT.
# BENUTZE DIESES SKRIPT AUF KEINEN FALL IN EINER KOMMERZIELLEN UMGEBUNG! ! !
# BENUTZUNG DES SKRIPTS AUF EIGENE GEFAHR
case "$1" in
start)
cd /home/ts3/teamspeak3-server_linux-amd64
echo "Instanz wird initialisiert..."
if [ -e ts3server.pid ]; then
if ( kill -0 $(cat ts3server.pid) 2> /dev/null ); then
echo "Der Server läuft bereits. Versuche die Parameter stop oder restart."
exit 1
else
echo "Es wurde ts3server.pid gefunden, aber es laufen keine Server. Server gecrasht?"
echo "Bitte die logfiles für mehr Infos einsehen."
rm ts3server.pid
fi
fi
if [ "${UID}" = "0" ]; then
echo ACHTUNG ! Aus Sicherheitsgründen empfielt Teamspeak: Starte den Server NICHT als Root
c=1
while [ "$c" -le 10 ]; do
echo -n "!"
sleep 1
c=$((++c))
done
echo "!"
fi
echo "Starte den TeamSpeak 3 Server"
if [ -e "$BINARYNAME" ]; then
if [ ! -x "$BINARYNAME" ]; then
echo "${BINARYNAME} ist nicht ausführbar, versuche nun, die Datei ausführbar zu machen."
chmod u+x "${BINARYNAME}"
fi
if [ -x "$BINARYNAME" ]; then
export LD_LIBRARY_PATH="${LIBRARYPATH}:${LD_LIBRARY_PATH}"
"./${BINARYNAME}" ${COMMANDLINE_PARAMETERS} > /dev/null &
echo $! > ts3server.pid
echo "TeamSpeak 3 Server wurden erfolgreich gestartet, siehe Logfiles für mehr Informationen."
else
echo "${BINARNAME} ist nicht ausführbar, Server konnte nicht gestartet werden."
fi
else
echo "Kann die Binaries nicht finden, breche ab."
exit 2
fi
;;
stop)
cd /home/ts3/teamspeak3-server_linux-amd64
echo "Instanz wird gestoppt..."
if [ -e ts3server.pid ]; then
echo -n "Stoppe den TeamSpeak 3 Server"
if ( kill -TERM $(cat ts3server.pid) 2> /dev/null ); then
c=1
while [ "$c" -le 300 ]; do
if ( kill -0 $(cat ts3server.pid) 2> /dev/null ); then
echo -n "."
sleep 1
else
break
fi
c=$((++c))
done
fi
if ( kill -0 $(cat ts3server.pid) 2> /dev/null ); then
echo "Server fährt sich nicht sauber herunter - killing"
kill -KILL $(cat ts3server.pid)
else
echo "fertig"
fi
rm ts3server.pid
else
echo "Es läuft kein Server (ts3server.pid nicht vorhanden)"
exit 3
fi
;;
restart)
$0 stop && $0 start || exit 4
;;
install)
adduser ts3
cd /home/ts3
wget http://teamspeak.gameserver.gamed.de/ts3/releases/3.0.6.1/teamspeak3-server_linux-amd64-3.0.6.1.tar.gz -O teamspeak3.tar.gz
tar xfvz teamspeak3.tar.gz
chown -R ts3:ts3 teamspeak3-server_linux-amd64
cd /home/ts3/teamspeak3-server_linux-amd64
chmod +x ts3server_startscript.sh ts3server_minimal_runscript.sh ts3server_linux_amd64
su -c "./ts3server_minimal_runscript.sh > data.txt" ts3
echo "Alle Daten stehen in der Datei data.txt"
echo "Sollten keine Fehlermeldungen aufgetreten sein, so ist der Server nun fertig installiert!"
echo "Falls es dir gefallen hat, besuche doch meinen Youtube Kanal unter http://www.youtube.com/user/Madmatti94"
;;
update)
cp ts3_amd64.sh /home/ts3/teamspeak3-server_linux-amd64
echo "Update wird ausgeführt..."
cd /home/ts3/teamspeak3-server_linux-amd64
su -c "$0 stop" ts3
cd ..
wget http://teamspeak.gameserver.gamed.de/ts3/releases/3.0.6.1/teamspeak3-server_linux-amd64-3.0.6.1.tar.gz -O teamspeak3.tar.gz
tar xfvz teamspeak3.tar.gz
chown -R ts3:ts3 /home/ts3
cd /home/ts3/teamspeak3-server_linux-amd64
su -c "$0 start" ts3
echo "Sollten keine Fehlermeldungen aufgetreten sein, so ist der Server nun fertig geupdated!"
echo "Falls es dir gefallen hat, besuche doch meinen Youtube Kanal unter http://www.youtube.com/user/Madmatti94"
;;
*)
echo "Falsche Benutzung. Bitte mit einem der folgenden Parameter ausführen: $0 (start/stop/restart/install/update)"
exit 5
;;
esac
exit 0
Hoffe es gefällt euch! Ich mache mich jedoch schonmal auf eine Flut von Verbesserungsvorschlägen gefasst, da ich, wie gesagt, reiner Hobbyprogrammierer bin. Dies ist auch nur eine erste Fassung, es wird sich noch so einiges verändern ;-)
Liebe Grüße
Madmatti
Homepage: [Link: Registrierung erforderlich] - Haufenweise Tutorials zu Teamspeak und Linux, ebenfalls Let's Plays im Hardcore Modus (nur 1 Leben)
RE: Teamspeak 3 Serverinstallations- und Updateskript
Twinker schrieb:
Was ich noch einbauen würde wäre das man per Parameter die Version aussuchen kann
Inwiefern wären alte Versionen denn von Vorteil? Ich habe überlegt einfach den Download auf meinen Webspace zu leiten und da immer die neuste Version zur Verfügung zu stellen. Was meinst du?
Homepage: [Link: Registrierung erforderlich] - Haufenweise Tutorials zu Teamspeak und Linux, ebenfalls Let's Plays im Hardcore Modus (nur 1 Leben)
RE: Teamspeak 3 Serverinstallations- und Updateskript
Das Hin- und Herspringen mitten im Skript ist nicht empfehlenswert, jedenfalls nicht mit "cd ..".
Generell solltest du das Ganze ein wenig dynamischer halten. Ob x86 oder amd64, kann man per Parameter bestimmen oder im Skript abfragen, dann hättest du nur noch ein Skript. Oder: (noch besser) über die betriebssysteminternen Funktionen.
Gleiches bei der Updatefunktion. Wenn es ein Update gibt, braucht man ein neues Skript. Das ist nicht sehr sinnvoll. Da krieg ich das per Hand schneller hin. In einem anderen Skript hab ich mal gesehen, dass per Query die aktuelle Version abgefragt wird und dann [Link: Registrierung erforderlich] durchsucht wird, ob es vielleicht was neues gibt. Einfaches entpacken ist dann natürlich nur noch trivial.
Ein letzter Punkt noch:
Code:
# Copyright (c) 2010 TeamSpeak Systems GmbH
# All rights reserved
# Zusätzliche Features von Madmatti
So ein Skript veröffentlicht man als Open Source. Daher kein Copyright, sondern nur einen Hinweis auf Creative Commons.
Und ich glaub kaum, dass die von Teamspeak das Skript geschrieben haben. Und wenn nicht, ist es auch nicht sinnvoll, denen das Copyright abzutreten.
RE: Teamspeak 3 Serverinstallations- und Updateskript
Das was die anderen sagten + Du solltest sicherstellen, das zumindest die "install" Funktion nur von root ausgeführt wird, ein normaler User würde da Fehlermeldungen bekommen.
Klar, normal hat man bei sowas keine mehreren User (Personen) die Zugriff haben könnten, is aber trotzdem sicherer.
/* edit
Zitat:
chown -R ts3:ts3 teamspeak3-server_linux-amd64
Das würde aber auch vorausetzen, das eine Gruppe "ts3" existiert.
Ein "chown -R ts3:user" oder "chown -R ts3:" sollte normal auch reichen.
*/
Alcazar (nach Diktat spazierengegangen)
Dieser Beitrag wurde zuletzt bearbeitet: 25.11.2012 16:56 von alcazar.
RE: Teamspeak 3 Serverinstallations- und Updateskript
Ich würd auch nicht zu viel per Skript übernehmen. Klar, ich kann verstehen, dass du das alles "noobsicher" machen willst, aber das ist echt too much.
Dann lieber ein ordentliches Tutorial, dann lernt der "Noob" noch was dabei.
Ach ja: Ich hatte mal ein Skript mit einer "check"-Funktion. Diese prüfte, ob der TS3-Server läuft und startet ihn, wenn das nicht der Fall ist. Das kommt dann in die crontab und fertig.
Code:
if [ "${UID}" = "0" ]; then
Das würd ich eigentlich eher mit "whoami" machen.
Da sind auch generell ein paar zu viele Dinge drin, die das Teil einfach nur "noobsicher" machen sollen. Linuxtypisch würde ich auch auf ein paar Ausagaben verzichten. Linux meldet sich nämlich eigentlich nur, wenn es Fehler gibt. Wenn ein Befehl problemfrei funktioniert hat, kommt keine Ausgabe. Daran sollte man sich eigentlich orientieren.
Warum sollte man "whoami" verwenden?
Die meisten Scripte die kenne, fragen die UID ab, nich den Namen.
Der root-user muß nich unbedingt "root" heißen, bzw. der Benutzer "root" kann auch eine andere UID als 0 haben.
/* edit
Mad, Du solltest auch ma eine Sicherung einbauen, das die "neuen" Parameter auch nur 1x aufgerufen werden.
Es bringt nich viel wenn man z. b. 2x hintereinander "install" nimmt.
*/
Alcazar (nach Diktat spazierengegangen)
Dieser Beitrag wurde zuletzt bearbeitet: 30.12.2012 20:27 von alcazar.
Willkommen auf SB! Sie benötigen ein Sponsoring? 1. Anmelden 2. Sponsoring-Anfrage erstellen 3. Nachrichten von Sponsoren erhalten Kostenlos!Jetzt registrieren