Moin!
da der Tekbase-Game-Updater von GitHub bei mir nicht mit Minecraft funktioniert hat und schon seit langem kein Update bekommen hat, habe ich den Code aktualisiert. Minecraft Server lassen sich nun wieder komfortabel über die Updatefunktion im Webinterface auf die neueste Version bringen.
updater.sh
- Informationen für /log/ hinzugefügt
- linux32 Ordner bei Steam Updates wird nicht mehr gelöscht
- temporär erstelle Dateien werden wieder gelöscht
#!/bin/bash
# TekBase - server control panel
# Copyright since 2005 TekLab
# Christian Frankenstein
# Website: teklab.de
# teklab.net
VAR_A=$1
VAR_B=$2
VAR_C=$3
VAR_D=$4
VAR_E=$5
LOGFILE=$(date +"%Y-%m")
LOGDIR="logs"
DATADIR=$(pwd)
if [ ! -d $LOGDIR ]; then
mkdir $LOGDIR
chmod 755 $LOGDIR
echo "$(date) - INFO: Gameserver update script started!" >> $LOGDIR/$LOGFILE-update.log
echo "$(date) - INFO: Folder logs has just been created!" >> $LOGDIR/$LOGFILE-update.log
else
echo "$(date) - INFO: Gameserver update script started!" >> $LOGDIR/$LOGFILE-update.log
fi
if [ ! -f version.tek ]; then
echo "0" > version.tek
echo "$(date) - INFO: File version.tek has just been created!" >> $LOGDIR/$LOGFILE-update.log
fi
if [ "$VAR_A" == "file" ]; then
wget $VAR_B/$VAR_C.tar
if [ -f $VAR_C.tar ]; then
tar -xf $VAR_C.tar
rm -r $VAR_C.tar
echo "$(date) - INFO: The file for fileupdate has been downloaded and extracted!" >> $LOGDIR/$LOGFILE-update.log
else
echo "$(date) - ERROR: The file for fileupdate could not be downloaded!" >> $LOGDIR/$LOGFILE-update.log
fi
fi
if [ "$VAR_A" == "steam" ]; then
wget http://media.steampowered.com/client/steamcmd_linux.tar.gz
if [ -d $VAR_C ]; then
tar -xzf steamcmd_linux.tar.gz
chmod 777 steamcmd.sh
chmod -R 777 linux32
if [ "$VAR_D" != "" ] && [ "$VAR_E" != "" ]; then
./steamcmd.sh +login "$VAR_D" "$VAR_E" +force_install_dir ./$VAR_C +app_update $VAR_B validate +exit
else
./steamcmd.sh +login anonymous +force_install_dir ./$VAR_C +app_update $VAR_B validate +exit
fi
rm steamcmd_linux.tar.gz
rm steamcmd.sh
rm steam.sh
echo "$(date) - INFO: The files for steam gameserver update has been downloaded and extracted!" >> $LOGDIR/$LOGFILE-update.log
else
echo "$(date) - ERROR: The files for steam gameserver update could not be downloaded!" >> $LOGDIR/$LOGFILE-update.log
fi
fi
if [ "$VAR_A" == "www" ]; then
if [ -d "update_www/$VAR_B" ]; then
$DATADIR/update_www/$VAR_B/updater.sh $DATADIR
cd $DATADIR
fi
fi
rm -r update_www
rm updater.sh
rm LICENSE
rm README.md
rm updater.tar
echo "$(date) - INFO: Temporary files deleted and gameserver update script completed!" >> $LOGDIR/$LOGFILE-update.log
exit 0
Alles anzeigen
update_www/minecraft/updater.sh
- Programmcode größtenteils neu erstellt.
- Detaillierte Informationen für /log/ inklusive Debug-Infos vorhanden.
- Aktuelle Minecraft Serverversion wird in version.tek abgespeichert und bei einem erneuten Updatevorgang abgefragt. Ist der Gameserver aktuell wird der Updatevorgang ohne Übertragung weiter Daten beendet.
- Integrität der heruntergeladenen Datei wird mittels SHA1 Checksumme überprüft.
- Die veraltete minecraft_server.jar wird archiviert.
#!/bin/bash
VAR_A=$1
LOGDATE=$(date +"%Y-%m-%d")
LOGFILE=$(date +"%Y-%m")
LOGDIR="logs"
readonly MINECRAFT_DIR=$VAR_A
readonly MINECRAFT_SERVER_LATEST_VER=$( curl https://launchermeta.mojang.com/mc/game/version_manifest.json|jq -r '."latest"."release"' )
readonly MINECRAFT_SERVER_LATEST_MANIFEST_URL=$( curl https://launchermeta.mojang.com/mc/game/version_manifest.json | jq -r ".\"versions\"[] | select (.\"id\"==\"${MINECRAFT_SERVER_LATEST_VER}\") | .\"url\" " )
readonly MINECRAFT_SERVER_LATEST_JAR_URL=$( curl "${MINECRAFT_SERVER_LATEST_MANIFEST_URL}" | jq -r ".\"downloads\".\"server\".\"url\"" )
readonly MINECRAFT_SERVER_LATEST_JAR_SHA1=$( curl "${MINECRAFT_SERVER_LATEST_MANIFEST_URL}" | jq -r ".\"downloads\".\"server\".\"sha1\"" )
readonly SERVERFILE="minecraft_server.${MINECRAFT_SERVER_LATEST_VER}.jar"
# readonly LOCALFILE=$([[ -n $1 ]] && echo "$1" || echo "$SERVERFILE")
# readonly MINECRAFT_SERVER_CURRENT_INSTALLED_VER=$( ls ${MINECRAFT_DIR}/*.jar | cut -d '/' -f4 | sed -e "s/minecraft_server\.//" -e "s/\.jar//" )
# rm ${MINECRAFT_DIR}/minecraft_server.${MINECRAFT_SERVER_CURRENT_INSTALLED_VER}.jar
if [ "$MINECRAFT_SERVER_LATEST_VER" != "$(cat $VAR_A/version.tek)" ]; then
wget ${MINECRAFT_SERVER_LATEST_JAR_URL} -O ${MINECRAFT_DIR}/minecraft_server.${MINECRAFT_SERVER_LATEST_VER}.jar
echo "$(date) - INFO: The latest server version has been downloaded!" >> $VAR_A/$LOGDIR/$LOGFILE-update.log
if [ "$(sha1sum $SERVERFILE | awk '{print $1}')" != "$MINECRAFT_SERVER_LATEST_JAR_SHA1" ]; then
echo "$(date) - ERROR: Checksum of downloaded file does not match! Aborting gameserver update!" >> $VAR_A/$LOGDIR/$LOGFILE-update.log
rm "$SERVERFILE"
exit 0
else
echo "$(date) - INFO: Checksum of downloaded file ok!" >> $VAR_A/$LOGDIR/$LOGFILE-update.log
fi
mv ${MINECRAFT_DIR}/minecraft_server.jar ${MINECRAFT_DIR}/${LOGDATE}_minecraft_server.jar
mv ${SERVERFILE} ${MINECRAFT_DIR}/minecraft_server.jar
echo "$MINECRAFT_SERVER_LATEST_VER" > version.tek
echo "$(date) - INFO: version.tek has been modified to latest release version!" >> $VAR_A/$LOGDIR/$LOGFILE-update.log
echo "$(date) - INFO: The server was successful updated to version $MINECRAFT_SERVER_LATEST_VER!" >> $VAR_A/$LOGDIR/$LOGFILE-update.log
echo "$(date) - DEBUG: Latest version=$MINECRAFT_SERVER_LATEST_VER" >> $VAR_A/$LOGDIR/$LOGFILE-update.log
echo "$(date) - DEBUG: Manifest url=$MINECRAFT_SERVER_LATEST_MANIFEST_URL" >> $VAR_A/$LOGDIR/$LOGFILE-update.log
echo "$(date) - DEBUG: Server jar url=$MINECRAFT_SERVER_LATEST_JAR_URL" >> $VAR_A/$LOGDIR/$LOGFILE-update.log
echo "$(date) - DEBUG: Server file name=$SERVERFILE" >> $VAR_A/$LOGDIR/$LOGFILE-update.log
echo "$(date) - DEBUG: SHA1 Checksum=$MINECRAFT_SERVER_LATEST_JAR_SHA1" >> $VAR_A/$LOGDIR/$LOGFILE-update.log
else
echo "$(date) - INFO: The latest version $MINECRAFT_SERVER_LATEST_VER is already installed! No need to update!" >> $VAR_A/$LOGDIR/$LOGFILE-update.log
fi
exit 0
Alles anzeigen
Einbindung in Tekbase
Schaut auf https://github.com/teklab-de/tekbase-game-updater für die Anleitung, wie ihr das Updatescript einbinden könnt.
Der einfachste Weg für Minecraft ist geht so:
- Mit 7zip eine komprimierte .tar Datei erstellen. Diese sollte die Datei updater.sh von oben enthalten sowie die Ordnerstruktur update_www/minecraft und da drin die updater.sh für Minecraft.
- Auf einen beliebigen Webserver als updater.tar hochladen.
- Updatescript in Tekbase für Minecraft wiefolgt angeben: wget https://domain.tld/tekbase-game-updater/updater.tar;tar -xf updater.tar;./updater.sh www minecraft
Für Steam Games (CSS, CSGO, TF2) funktioniert das Script auch, Updatescript einfach nach dem Schema wie in der Anleitung auf GitHub anpassen, jedoch die Anführungszeichen weglassen.
Für CS:GO lautet das Updatescript zum Beispiel:
wget https://domain.tld/tekbase-game-updater/updater.tar;tar -xf updater.tar;./updater.sh steam 740 game
Danke gehen raus an Teklab für die Vorlage!