diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000..a4ff0b6 Binary files /dev/null and b/.DS_Store differ diff --git a/README.md b/README.md new file mode 100644 index 0000000..9ee2ee2 --- /dev/null +++ b/README.md @@ -0,0 +1,34 @@ +# ARK: Survival Evolved Linux Server Tools + +## Pre-requisites + +To install ARK Server Tools you must have already installed **SteamCMD** following this guide: + +https://developer.valvesoftware.com/wiki/SteamCMD#Linux + +We assume you have created the `steam` user to store steamcmd and your ARK server. + +## Install ARK Server Tools + +To install ARK Server Tools run these commands: + +```sh +cd ~ +wget https://github.com/FezVrasta/ark-server-tools/archive/master.zip +unzip master.zip -d arktools +cd arktools/tools +chmod u+x install.sh +./install.sh steam +``` + +NB: You may want to change the `install.sh` parameter to fit your steam user if different from `steam`. + +This will copy the `arkmanager` and the `arkdaemon` to the proper directories and will create an empty log directory in `/var/log` for ARK Server Tools. + +## Install ARK Server + +To install ARK Server just run this command: + +```sh +arkmanager install +``` \ No newline at end of file diff --git a/tools/.DS_Store b/tools/.DS_Store new file mode 100644 index 0000000..6f86be5 Binary files /dev/null and b/tools/.DS_Store differ diff --git a/tools/arkdaemon b/tools/arkdaemon new file mode 100644 index 0000000..3c2b12f --- /dev/null +++ b/tools/arkdaemon @@ -0,0 +1,43 @@ +#!/bin/bash + +NAME=arkmanager_daemon +DESC="ARK manager daemon used to start the server and keep it updated" +PIDFILE="/var/run/${NAME}.pid" +LOGFILE="/var/log/${NAME}.log" + +DAEMON="sh /usr/bin/arkmanager daemon" + +START_OPTS="--start --background --make-pidfile --pidfile ${PIDFILE} --exec ${DAEMON}" +STOP_OPTS="--stop --pidfile ${PIDFILE}" + +test -x $DAEMON || exit 0 + +set -e + +case "$1" in + start) + echo -n "Starting ${DESC}: " + start-stop-daemon $START_OPTS >> $LOGFILE + echo "$NAME." + ;; + stop) + echo -n "Stopping $DESC: " + start-stop-daemon $STOP_OPTS + echo "$NAME." + rm -f $PIDFILE + ;; + restart|force-reload) + echo -n "Restarting $DESC: " + start-stop-daemon $STOP_OPTS + sleep 1 + start-stop-daemon $START_OPTS >> $LOGFILE + echo "$NAME." + ;; + *) + N=/etc/init.d/$NAME + echo "Usage: $N {start|stop|restart|force-reload}" >&2 + exit 1 + ;; +esac + +exit 0 \ No newline at end of file diff --git a/tools/arkmanager b/tools/arkmanager new file mode 100644 index 0000000..206c69c --- /dev/null +++ b/tools/arkmanager @@ -0,0 +1,120 @@ +#!/bin/bash + +# ARK: survival evolved manager +# +# Original author: LeXaT +# Maintainer: FezVrasta + +# config SteamCMD +steamcmdroot="/home/steam/steamcmd" +steamcmdexec="steamcmd.sh" +steamuser="anonymous" +steampass="" + +# config Server +arkserverroot="/home/steam/ARK" +arkserverexec="ShooterGameServer" +arkserversession="GameServerSetup" +arkserverport="27016" +arkserverpass="SERVERPASSWORD" +akrserverapass="ADMINPASSWORD" + +# config Service +servicename="arkserv" +logdir="$arkserverroot/logs" + +# init +if [ ! -d "$arkserverroot" ]; then + mkdir $arkserverroot +fi + +info="" +thejob="" +update=1 +timestamp=$( date +%T ) +cd $arkserverroot +instver=`cat "arkversion"` +cd $steamcmdroot +bnumber=`./$steamcmdexec +login anonymous +app_info_print "376030" +quit | grep -EA 5 "^\s+\"public\"$" | grep -E "^\s+\"buildid\"\s+" | tr '[:blank:]"' ' ' | tr -s ' ' | cut -f3 | sed 's/^ //' | cut -c9-14` + +case "$bnumber" in + *$instver*) + update=0 + ;; esac + +# start function +doStart() { + arkserveropts="TheIsland?SessionName=$arkserversession?QueryPort=$arkserverport?ServerPassword=$arkserverpass?ServerAdminPassword=$arkserverapass?listen" + thejob="$arkserverroot/$arkserverexec $arkserveropts" + screen -dmS "$servicename" "$thejob" + echo "$timestamp: start" >> "$logdir/arkserver.log" +} + +# stop function +doStop() { + screen -S "$servicename" -p 0 -X stuff "quit$(printf \\r)" + # screen -S "$servicename" -X quit + sleep 30 + echo "$timestamp: stop" >> "$logdir/arkserver.log" +} + +# update function +doUpdate() { + if (($update == 1)) + then + if [ -f "$arkserverroot/arkupdate.timed" ] + then + doStop + cd $steamcmdroot + ./$steamcmdexec +login anonymous +force_install_dir "$arkserverroot" +app_update 376030 validate +quit + cd $logdir + echo "$bnumber" > "$arkserverroot/arkversion" + cd $steamcmdroot + doStart + echo "$timestamp: update to $bnumber complete" >> "$logdir/update.log" + mail -a $logdir/update.log -s "Update-Log" mail@domain.com < /dev/null + rm "$arkserverroot/arkupdate.timed" + else + touch "$arkserverroot/arkupdate.timed" + info="There is a update for ark, server will restart in 60mins!!!!!" + doInfo $info + fi; + else + echo "$timestamp: No update needed." >> "$logdir/update.log" + fi; +} + +#broadcast info +doInfo() { + if [ ! -z $1 ]; then + info=$1 + fi + screen -S "$servicename" -p 0 -X stuff "broadcast $info $(printf \\r)" +} + +# parameter select +case "$1" in + start) + doStart + ;; + stop) + doStop + ;; + restart) + doStop + doStart + echo "$timestamp: stop" >> "$logdir/arkserver.log" + sleep 60 + echo "$timestamp: start" >> "$logdir/arkserver.log" + echo "$timestamp: restart" >> "$logdir/arkserver.log" + ;; + update) + doUpdate + ;; + broadcast) + doInfo "$2" + ;; + *) + echo "use ./arkserver.sh " + ;; +esac diff --git a/tools/install.sh b/tools/install.sh new file mode 100644 index 0000000..3359141 --- /dev/null +++ b/tools/install.sh @@ -0,0 +1,19 @@ +#!/bin/bash + +if [ ! -z $1 ]; then + # Copy arkmanager to /usr/bin and set permissions + cp arkmanager /usr/bin/arkmanager + chmod +x /usr/bin/arkmanager + + # Copy arkdaemon to /etc/init.d and set permissions + cp arkdaemon /etc/init.d/arkdaemon + chmod +x /etc/init.d/arkdaemon + + # Create a folder in /var/log to let Ark tools write its own log files + mkdir /var/log/arktools + chown $1 /var/log/arktools +else + echo "You must specify your steam user to install ARK Tools. Usage: ./install.sh steam" +fi + +exit 0