From 6111c04e0d90faccc4946e7ae23c8f3467e32893 Mon Sep 17 00:00:00 2001 From: Marius Linge Date: Sat, 20 Jun 2015 05:34:04 +0200 Subject: [PATCH 01/36] Fixes missing spaces in version checking to prevent error message when starting the server --- tools/arkmanager | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/arkmanager b/tools/arkmanager index c190f73..e4ea339 100644 --- a/tools/arkmanager +++ b/tools/arkmanager @@ -41,7 +41,7 @@ touch arkversion # If the file doesn't exist instver=`cat "arkversion"` bnumber=`$steamcmdroot/$steamcmdexec +login anonymous +app_info_print "$appid" +quit | grep -EA 5 "^\s+\"public\"$" | grep -E "^\s+\"buildid\"\s+" | tr '[:blank:]"' ' ' | tr -s ' ' | cut -f3 | sed 's/^ //' | cut -c9-14` -if ["$bnumber" = "$instver"]; then +if [ "$bnumber" = "$instver" ]; then patch=0 fi From 1086d21098f3898d3ce27135a45b402794a31c44 Mon Sep 17 00:00:00 2001 From: Marius Linge Date: Sat, 20 Jun 2015 05:34:54 +0200 Subject: [PATCH 02/36] Corrects small typo in broadcast instructions --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index e2d5ed5..e7a22c2 100644 --- a/README.md +++ b/README.md @@ -58,7 +58,7 @@ manually updates ARK server broadcast a message to ARK server chat ```sh -arkmanager boradcast "here your message" +arkmanager broadcast "your message here" ``` ## Credits From 529576e6fab15d46e72515fe5cde4e7409bc9eda Mon Sep 17 00:00:00 2001 From: Marius Linge Date: Sat, 20 Jun 2015 06:22:01 +0200 Subject: [PATCH 03/36] Properly closes the active screen session and the process inside it when the stop function is called. --- tools/arkmanager | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/tools/arkmanager b/tools/arkmanager index e4ea339..cf0ea2c 100644 --- a/tools/arkmanager +++ b/tools/arkmanager @@ -57,8 +57,7 @@ doStart() { doStop() { read -p "This operation will quit the server without saving, are your really sure?" -n 1 -r if [[ $REPLY =~ ^[Yy]$ ]]; then - screen -S "$servicename" -p 0 -X stuff "quit$(printf \\r)" - # screen -S "$servicename" -X quit + screen -X -S "$servicename" stuff "^C" sleep 30 echo "$timestamp: stop" >> "$logdir/arkserver.log" fi From 5e0b3d81750a2c27ad110aaa5b457c03c77edff0 Mon Sep 17 00:00:00 2001 From: Marius Linge Date: Sat, 20 Jun 2015 08:33:05 +0200 Subject: [PATCH 04/36] Prints latest log messages in terminal after completing actions --- tools/arkmanager | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/tools/arkmanager b/tools/arkmanager index cf0ea2c..60217ee 100644 --- a/tools/arkmanager +++ b/tools/arkmanager @@ -51,6 +51,7 @@ doStart() { thejob="$arkserverroot/$arkserverexec $arkserveropts" screen -dmS "$servicename" $thejob echo "$timestamp: start" >> "$logdir/arkserver.log" + tail -n 1 "$logdir/arkserver.log" } # stop function @@ -60,6 +61,7 @@ doStop() { screen -X -S "$servicename" stuff "^C" sleep 30 echo "$timestamp: stop" >> "$logdir/arkserver.log" + tail -n 1 "$logdir/arkserver.log" fi } @@ -85,6 +87,7 @@ doUpdate() { echo "$timestamp: update to $bnumber complete" >> "$logdir/update.log" mail -a $logdir/update.log -s "Update-Log" $servermail < /dev/null rm "$arkserverroot/arkupdate.timed" + tail -n 1 "$logdir/update.log" else touch "$arkserverroot/arkupdate.timed" info="There is a update for ark, server will restart in 60mins!!!!!" @@ -92,6 +95,7 @@ doUpdate() { fi; else echo "$timestamp: No update needed." >> "$logdir/update.log" + tail -n 1 "$logdir/update.log" fi; } @@ -118,6 +122,7 @@ case "$1" in doStart echo "$timestamp: start" >> "$logdir/arkserver.log" echo "$timestamp: restart" >> "$logdir/arkserver.log" + tail -n 1 "$logdir/arkserver.log" ;; install) doInstall From 13d91e86f125a09f17794fe181ca28ee9f241748 Mon Sep 17 00:00:00 2001 From: Marius Linge Date: Sat, 20 Jun 2015 08:53:13 +0200 Subject: [PATCH 05/36] Anonymous login is now supported :) --- tools/arkmanager.cfg | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tools/arkmanager.cfg b/tools/arkmanager.cfg index f641934..2c1b4ca 100644 --- a/tools/arkmanager.cfg +++ b/tools/arkmanager.cfg @@ -1,8 +1,8 @@ # config SteamCMD steamcmdroot="/home/steam/steamcmd" # path of your steamcmd instance steamcmdexec="steamcmd.sh" # name of steamcmd executable -steamuser="USERNAME" # steam user (needed to download the app, anonymous is not allowed) -steampass="PASSWORD" # steam password +steamuser="anonymous" # steam user (Use anonymous if you don't want to log in) +steampass="" # steam password (leave blank if you're using anonymous) # config Server arkserverroot="/home/steam/ARK" # path of your ARK server files (default ~/ARK) From cad85ed42637b232506cdbf92e02e8a0de0863ae Mon Sep 17 00:00:00 2001 From: Fez Vrasta Date: Sat, 20 Jun 2015 16:24:49 +0200 Subject: [PATCH 06/36] Use tar.gz --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index e7a22c2..571e391 100644 --- a/README.md +++ b/README.md @@ -14,8 +14,8 @@ To install ARK Server Tools run these commands: ```sh cd ~ -wget https://github.com/FezVrasta/ark-server-tools/archive/master.zip -unzip master.zip +wget https://github.com/FezVrasta/ark-server-tools/archive/master.tar.gz +tar -zxvf master.tar.gz cd ark-server-tools-master/tools chmod u+x install.sh sudo sh install.sh steam From dee676e9c6012b1fddfcb6e00e41bb8c19f8549a Mon Sep 17 00:00:00 2001 From: Sispheor Date: Sun, 21 Jun 2015 10:02:06 +0200 Subject: [PATCH 07/36] add required LSB tag --- tools/arkdaemon | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/tools/arkdaemon b/tools/arkdaemon index 2498318..abeab77 100644 --- a/tools/arkdaemon +++ b/tools/arkdaemon @@ -1,4 +1,13 @@ -#!/bin/bash +### BEGIN INIT INFO +# Provides: ARK manager deamon +# Required-Start: networking +# Required-Stop: networking +# Default-Start: 2 3 4 5 +# Default-Stop: 0 1 6 +# Short-Description: ARK manager deamon +# Description: Automaticaly start ARK server +# +### END INIT INFO # Global variables source /etc/arkdaemon.cfg @@ -42,4 +51,4 @@ case "$1" in ;; esac -exit 0 \ No newline at end of file +exit 0 From 83e3e3c93c8ece81df72963ec522cbc8aa144d1e Mon Sep 17 00:00:00 2001 From: Sispheor Date: Sun, 21 Jun 2015 10:02:06 +0200 Subject: [PATCH 08/36] update init script, add check status, lsb fonction --- tools/arkdaemon | 43 +++++++++++++++++++++++++++++-------------- 1 file changed, 29 insertions(+), 14 deletions(-) diff --git a/tools/arkdaemon b/tools/arkdaemon index abeab77..57312e7 100644 --- a/tools/arkdaemon +++ b/tools/arkdaemon @@ -5,10 +5,13 @@ # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: ARK manager deamon -# Description: Automaticaly start ARK server +# Description: ARK manager daemon used to start the server and keep it updated # ### END INIT INFO +# Using the lsb functions to perform the operations. +. /lib/lsb/init-functions + # Global variables source /etc/arkdaemon.cfg source /home/${steamuser}/.arkmanager.cfg @@ -17,33 +20,45 @@ NAME=arkmanager_daemon DESC="ARK manager daemon used to start the server and keep it updated" PIDFILE="/var/run/${NAME}.pid" LOGFILE="${logdir}/${NAME}.log" - - -DAEMON="sh /usr/bin/arkmanager update" - +DAEMON="arkmanager" START_OPTS="--pidfile ${PIDFILE} --user=${steamuser} ${DAEMON}" set -e +# If the daemon is not there, then exit. +test -x $DAEMON || exit 5 + case "$1" in start) - echo -n "Starting ${DESC}: " - daemon $START_OPTS >> $LOGFILE - echo "$NAME." + log_daemon_msg "Starting" "$NAME" + if start-stop-daemon -b --start --quiet --oknodo --pidfile $PIDFILE --exec $DAEMON ; then + log_end_msg 0 + else + log_end_msg 1 + fi ;; + stop) - echo -n "Stopping $DESC: " + log_daemon_msg "Stopping" "$NAME" kill ${cat $PIDFILE} echo "$NAME." rm -f $PIDFILE ;; + restart|force-reload) - echo -n "Restarting $DESC: " - kill $(cat $PIDFILE) - sleep 1 - daemon $START_OPTS >> $LOGFILE - echo "$NAME." + $0 stop && sleep 2 && $0 start ;; + + status) + # Check the status of the process. + PID=`ps -ef | grep $DAEMON | grep -v grep | awk '{print $2}'` + if [ -n "$PID" ]; then + echo "$NAME is running on PID $PID" + else + echo "$NAME is not running" + fi + ;; + *) N=/etc/init.d/$NAME echo "Usage: $N {start|stop|restart|force-reload}" >&2 From 2901e1d7a3afef1432715752169f0721193ea73f Mon Sep 17 00:00:00 2001 From: Sispheor Date: Sun, 21 Jun 2015 10:02:06 +0200 Subject: [PATCH 09/36] remove steam user and password. Not necessary anymore --- tools/arkmanager.cfg | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/tools/arkmanager.cfg b/tools/arkmanager.cfg index 2c1b4ca..a13b0a0 100644 --- a/tools/arkmanager.cfg +++ b/tools/arkmanager.cfg @@ -1,8 +1,6 @@ # config SteamCMD steamcmdroot="/home/steam/steamcmd" # path of your steamcmd instance steamcmdexec="steamcmd.sh" # name of steamcmd executable -steamuser="anonymous" # steam user (Use anonymous if you don't want to log in) -steampass="" # steam password (leave blank if you're using anonymous) # config Server arkserverroot="/home/steam/ARK" # path of your ARK server files (default ~/ARK) @@ -15,5 +13,9 @@ arkserverapass="ADMINPASSWORD" # ARK server servicename="arkserv" # Name of the service (don't change if you don't know what are you doing) logdir="/var/log/arktools" # Logs path (default /var/log/arktools) +# steamdb specific appid=376030 # Linux server App ID + +# admin information +notify_update_by_email=0 # if you want to receive a mail on each update (SMTP client must be configured) servermail=mail@domain.com # Log email From 060ee857e23556e76d1c7ab6e25bb00655b50a46 Mon Sep 17 00:00:00 2001 From: Sispheor Date: Sun, 21 Jun 2015 10:02:06 +0200 Subject: [PATCH 10/36] add steamcmd user into the main config file --- tools/arkmanager.cfg | 1 + tools/install.sh | 15 ++++++--------- 2 files changed, 7 insertions(+), 9 deletions(-) diff --git a/tools/arkmanager.cfg b/tools/arkmanager.cfg index a13b0a0..77e8225 100644 --- a/tools/arkmanager.cfg +++ b/tools/arkmanager.cfg @@ -1,6 +1,7 @@ # config SteamCMD steamcmdroot="/home/steam/steamcmd" # path of your steamcmd instance steamcmdexec="steamcmd.sh" # name of steamcmd executable +steamcmd_user="steam" # name of the system user who own steamcmd folder # config Server arkserverroot="/home/steam/ARK" # path of your ARK server files (default ~/ARK) diff --git a/tools/install.sh b/tools/install.sh index 9f69a0c..4e38dc8 100644 --- a/tools/install.sh +++ b/tools/install.sh @@ -13,17 +13,14 @@ if [ ! -z $1 ]; then mkdir -p /var/log/arktools chown $1 /var/log/arktools - # Copy .arkmanager.cfg inside user home - mv arkmanager.cfg /home/$1/.arkmanager.cfg - chown $1 /home/$1/.arkmanager.cfg - - # Copy arkdaemon.cfg inside /etc folder - mv arkdaemon.cfg /etc/arkdaemon.cfg - chown $1 /etc/arkdaemon.cfg - echo ${1} >> /etc/arkdaemon.cfg + # Copy arkmanager.cfg inside linux configuation folder + mkdir /etc/arkmanager + mv arkmanager.cfg /etc/arkmanager/arkmanager.cfg + chown $1 /etc/arkmanager/arkmanager.cfg else - echo "You must specify your steam user to install ARK Tools. Usage: ./install.sh steam" + echo "You must specify your system steam user who own steamcmd directory to install ARK Tools." + echo "Usage: ./install.sh steam" fi exit 0 From 3dc3fa25b3bfc255e969f3897b4fd467f2c562ca Mon Sep 17 00:00:00 2001 From: Sispheor Date: Sun, 21 Jun 2015 10:02:06 +0200 Subject: [PATCH 11/36] update the invalid argument usage message --- tools/arkdaemon | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tools/arkdaemon b/tools/arkdaemon index 57312e7..d8e39f6 100644 --- a/tools/arkdaemon +++ b/tools/arkdaemon @@ -60,9 +60,9 @@ case "$1" in ;; *) - N=/etc/init.d/$NAME - echo "Usage: $N {start|stop|restart|force-reload}" >&2 - exit 1 + # For invalid arguments, print the usage message. + echo "Usage: $0 {start|stop|restart|status|force-reload}" + exit 2 ;; esac From 88928da026fb15d427b63a96ad3028100aedd6b0 Mon Sep 17 00:00:00 2001 From: Sispheor Date: Sun, 21 Jun 2015 10:02:06 +0200 Subject: [PATCH 12/36] remove arkdeamon cfg --- tools/arkdaemon.cfg | 2 -- 1 file changed, 2 deletions(-) delete mode 100644 tools/arkdaemon.cfg diff --git a/tools/arkdaemon.cfg b/tools/arkdaemon.cfg deleted file mode 100644 index d1bae3c..0000000 --- a/tools/arkdaemon.cfg +++ /dev/null @@ -1,2 +0,0 @@ -# user of your steamcmd and ARK server instance (don't use root!) -steamuser= \ No newline at end of file From e7adfc7dac3223d5b211de3c35a837ba8fcbf4b8 Mon Sep 17 00:00:00 2001 From: Sispheor Date: Sun, 21 Jun 2015 10:02:07 +0200 Subject: [PATCH 13/36] add some function to check the status of the server --- tools/arkmanager | 89 +++++++++++++++++++++++++++++++++++++++++--- tools/arkmanager.cfg | 3 +- 2 files changed, 84 insertions(+), 8 deletions(-) mode change 100644 => 100755 tools/arkmanager diff --git a/tools/arkmanager b/tools/arkmanager old mode 100644 new mode 100755 index 60217ee..c484a8e --- a/tools/arkmanager +++ b/tools/arkmanager @@ -3,13 +3,60 @@ # ARK: survival evolved manager # # Original author: LeXaT -# Maintainer: FezVrasta +# Maintainer: FezVrasta, Sispheor +# Check the user is not currently running this script as root if [ "$(id -u)" == "0" ]; then echo "This script must NOT be run as root" 1>&2 exit 1 fi +#--------------------- +# Variables +#--------------------- +# Global variables +source /etc/arkmanager/arkmanager.cfg +# Local variables +info="" +thejob="" +timestamp=$( date +%T ) +GREEN="\\033[1;32m" +RED="\\033[1;31m" +NORMAL="\\033[0;39m" + +#--------------------- +# functions +#--------------------- +function getServerVersion(){ + # + # Get the current available server version on steamdb + # + echo "Checking for update, this may take a while" + bnumber=`$steamcmdroot/$steamcmdexec +login anonymous +app_info_print "$appid" +quit | grep -EA 5 "^\s+\"public\"$" | grep -E "^\s+\"buildid\"\s+" | tr '[:blank:]"' ' ' | tr -s ' ' | cut -f3 | sed 's/^ //' | cut -c9-14` + echo "Available server version: "$bnumber +} + +function isTheServerRunning(){ + # + # Check id the server process is alive + # + SERVICE="ShooterGameServer" + ps -a | grep -v grep | grep $SERVICE > /dev/null + result=$? + return $result +} + +function IsTheServerUp(){ + # + # Check if the server is up and visible in steam server list + # If the server is listenning on his port return 0, else return 1 + # + PORT="7776" + lsof -i |grep $PORT > /dev/null + result=$? + return $result +} + # To speedup stuff, if you have not specified a command or the command is invalid, we skip everything and just give you the usage message case "$1" in start);; @@ -18,6 +65,7 @@ case "$1" in install);; update);; broadcast);; + status);; *) echo "use arkmanager " exit 0 @@ -67,25 +115,38 @@ doStop() { # install function doInstall() { + if [ ! -d "$arkserverroot" ]; then + mkdir $arkserverroot + fi cd $steamcmdroot - ./$steamcmdexec +login $steamuser $steampass +force_install_dir "$arkserverroot" +app_update $appid validate +quit + ./$steamcmdexec +login anonymous +force_install_dir "$arkserverroot" +app_update $appid validate +quit } # update function doUpdate() { + cd $arkserverroot + touch arkversion # If the file doesn't exist + instver=`cat "arkversion"` + bnumber=`$steamcmdroot/$steamcmdexec +login anonymous +app_info_print "$appid" +quit | grep -EA 5 "^\s+\"public\"$" | grep -E "^\s+\"buildid\"\s+" | tr '[:blank:]"' ' ' | tr -s ' ' | cut -f3 | sed 's/^ //' | cut -c9-14` + if ["$bnumber" = "$instver"]; then + patch=0 + fi + if (($patch == 1)) then if [ -f "$arkserverroot/arkupdate.timed" ] then doStop cd $steamcmdroot - ./$steamcmdexec +login $steamuser $steampass +force_install_dir "$arkserverroot" +app_update $appid validate +quit + ./$steamcmdexec +login anonymous +force_install_dir "$arkserverroot" +app_update $appid 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" $servermail < /dev/null + if [ $servermail != "" ]; then + mail -a $logdir/update.log -s "Update-Log" $servermail < /dev/null + fi rm "$arkserverroot/arkupdate.timed" tail -n 1 "$logdir/update.log" else @@ -107,7 +168,9 @@ doInfo() { screen -S "$servicename" -p 0 -X stuff "broadcast $info $(printf \\r)" } -# parameter select +#--------------------- +# Main program +#--------------------- case "$1" in start) doStart @@ -133,7 +196,21 @@ case "$1" in broadcast) doInfo $2 ;; + status) + if isTheServerRunning ;then + echo -e "$NORMAL" "Server running:" "$GREEN" "Yes" + else + echo -e "$NORMAL" "Server running:" "$RED" "No" + fi + + if IsTheServerUp ;then + echo -e "$NORMAL" "Server online:" "$GREEN" " Yes" + else + echo -e "$NORMAL" "Server online:" "$RED" " No" + fi + #getServerVersion + ;; *) - echo "use arkmanager " + echo "use arkmanager " ;; esac diff --git a/tools/arkmanager.cfg b/tools/arkmanager.cfg index 77e8225..5adaad5 100644 --- a/tools/arkmanager.cfg +++ b/tools/arkmanager.cfg @@ -18,5 +18,4 @@ logdir="/var/log/arktools" # Logs path appid=376030 # Linux server App ID # admin information -notify_update_by_email=0 # if you want to receive a mail on each update (SMTP client must be configured) -servermail=mail@domain.com # Log email +servermail="" # Log email, leave blank if you dont want to receive mail From 99e083a22536e0c2aecd3d449219bbc2435feed7 Mon Sep 17 00:00:00 2001 From: Sispheor Date: Sun, 21 Jun 2015 10:02:07 +0200 Subject: [PATCH 14/36] add print status function --- tools/arkmanager | 44 ++++++++++++++++++++++++++++++-------------- 1 file changed, 30 insertions(+), 14 deletions(-) diff --git a/tools/arkmanager b/tools/arkmanager index c484a8e..567a0ec 100755 --- a/tools/arkmanager +++ b/tools/arkmanager @@ -27,7 +27,17 @@ NORMAL="\\033[0;39m" #--------------------- # functions #--------------------- -function getServerVersion(){ +function getCurrentVersion(){ + # + # Return the current version number + # + cd $arkserverroot + touch arkversion # If the file doesn't exist + instver=`cat "arkversion"` + return $instver + +} +function getAvailableVersion(){ # # Get the current available server version on steamdb # @@ -67,7 +77,7 @@ case "$1" in broadcast);; status);; *) - echo "use arkmanager " + echo "use arkmanager " exit 0 ;; esac @@ -168,6 +178,23 @@ doInfo() { screen -S "$servicename" -p 0 -X stuff "broadcast $info $(printf \\r)" } +printStatus(){ + if isTheServerRunning ;then + echo -e "$NORMAL" "Server running:" "$GREEN" "Yes" + else + echo -e "$NORMAL" "Server running:" "$RED" "No" + fi + + if IsTheServerUp ;then + echo -e "$NORMAL" "Server online:" "$GREEN" " Yes" + else + echo -e "$NORMAL" "Server online:" "$RED" " No" + fi + getCurrentVersion + echo -e "$NORMAL" "Server version:" "$GREEN" $instver + +} + #--------------------- # Main program #--------------------- @@ -197,18 +224,7 @@ case "$1" in doInfo $2 ;; status) - if isTheServerRunning ;then - echo -e "$NORMAL" "Server running:" "$GREEN" "Yes" - else - echo -e "$NORMAL" "Server running:" "$RED" "No" - fi - - if IsTheServerUp ;then - echo -e "$NORMAL" "Server online:" "$GREEN" " Yes" - else - echo -e "$NORMAL" "Server online:" "$RED" " No" - fi - #getServerVersion + printStatus ;; *) echo "use arkmanager " From b3ae4e6b0a4d5d2dd84ca91b4dd26cef9bcb889e Mon Sep 17 00:00:00 2001 From: Sispheor Date: Sun, 21 Jun 2015 10:02:07 +0200 Subject: [PATCH 15/36] update readme with new available function. Move configuration before installation --- README.md | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 571e391..230d832 100644 --- a/README.md +++ b/README.md @@ -25,6 +25,10 @@ NB: You may want to change the `install.sh` parameter to fit your steam user if 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. +## Configure ARK Server + +All the needed variables are stored in the /etc/arkmanager/arkmanager.cfg configuration file change them following the comments. + ## Install ARK Server To install ARK Server just run this command as normal user: @@ -32,11 +36,6 @@ To install ARK Server just run this command as normal user: ```sh arkmanager install ``` - -## Configure ARK Server - -All the needed variables are stored in the `steam` home directory inside `.arkmanager.cfg`, change them following the comments. - ## Commands #### arkmanager install @@ -54,6 +53,9 @@ restarts ARK server #### arkmanager update manually updates ARK server +#### arkmanager status +Get the status of the server. Show if the process is running, if the server is up and the current version number + #### arkmanager broadcast [message] broadcast a message to ARK server chat From 9a07351447daef5d92b6bee92cfb82743976389d Mon Sep 17 00:00:00 2001 From: Sispheor Date: Sun, 21 Jun 2015 10:02:07 +0200 Subject: [PATCH 16/36] add port and query port --- tools/arkmanager | 2 +- tools/arkmanager.cfg | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/tools/arkmanager b/tools/arkmanager index 567a0ec..4d28d5d 100755 --- a/tools/arkmanager +++ b/tools/arkmanager @@ -105,7 +105,7 @@ fi # start function doStart() { - arkserveropts="TheIsland?QueryPort=$arkserverport?ServerPassword=$arkserverpass?ServerAdminPassword=$arkserverapass?listen" + arkserveropts="TheIsland?QueryPort=$arkqueryport?Port=$arkserverport?ServerPassword=$arkserverpass?ServerAdminPassword=$arkserverapass?listen" thejob="$arkserverroot/$arkserverexec $arkserveropts" screen -dmS "$servicename" $thejob echo "$timestamp: start" >> "$logdir/arkserver.log" diff --git a/tools/arkmanager.cfg b/tools/arkmanager.cfg index 5adaad5..cd6e887 100644 --- a/tools/arkmanager.cfg +++ b/tools/arkmanager.cfg @@ -6,7 +6,8 @@ steamcmd_user="steam" # name of th # config Server arkserverroot="/home/steam/ARK" # path of your ARK server files (default ~/ARK) arkserverexec="ShooterGame/Binaries/Linux/ShooterGameServer" # name of ARK server executable -arkserverport="27016" # ARK server port (default 27016) +arkqueryport="27016" # ARK query port (default 27016) +arkserverport="7778" # ARK server port (default 7778) arkserverpass="SERVERPASSWORD" # ARK server password, empty: no password required to login arkserverapass="ADMINPASSWORD" # ARK server admin password, KEEP IT SAFE! From b973cb1ddb7aa8ba96a539cb647bc0a3c73c4dbb Mon Sep 17 00:00:00 2001 From: Sispheor Date: Sun, 21 Jun 2015 10:02:07 +0200 Subject: [PATCH 17/36] add function to check if an update is needed --- tools/arkmanager | 28 +++++++++++++++++++--------- 1 file changed, 19 insertions(+), 9 deletions(-) diff --git a/tools/arkmanager b/tools/arkmanager index 4d28d5d..9169563 100755 --- a/tools/arkmanager +++ b/tools/arkmanager @@ -19,6 +19,8 @@ source /etc/arkmanager/arkmanager.cfg # Local variables info="" thejob="" +instver="" +bnumber="" timestamp=$( date +%T ) GREEN="\\033[1;32m" RED="\\033[1;31m" @@ -27,6 +29,22 @@ NORMAL="\\033[0;39m" #--------------------- # functions #--------------------- +function isUpdateNeeded(){ + # + # Check if the server need to be updated + # Return 1 if update is needed, else return 0 + # + getCurrentVersion + getAvailableVersion + echo $instver + echo $bnumber + if ["$bnumber" = "$instver"]; then + return 0 + else + return 1 + fi + +} function getCurrentVersion(){ # # Return the current version number @@ -135,15 +153,7 @@ doInstall() { # update function doUpdate() { cd $arkserverroot - touch arkversion # If the file doesn't exist - instver=`cat "arkversion"` - bnumber=`$steamcmdroot/$steamcmdexec +login anonymous +app_info_print "$appid" +quit | grep -EA 5 "^\s+\"public\"$" | grep -E "^\s+\"buildid\"\s+" | tr '[:blank:]"' ' ' | tr -s ' ' | cut -f3 | sed 's/^ //' | cut -c9-14` - if ["$bnumber" = "$instver"]; then - patch=0 - fi - - if (($patch == 1)) - then + if isUpdateNeeded; then if [ -f "$arkserverroot/arkupdate.timed" ] then doStop From fdeac1f56e0e6eec92b84665cda0fd6b71f01a41 Mon Sep 17 00:00:00 2001 From: Sispheor Date: Sun, 21 Jun 2015 10:02:07 +0200 Subject: [PATCH 18/36] add check for update function --- tools/arkmanager | 99 ++++++++++++++++++++++++++++++++++++------------ 1 file changed, 75 insertions(+), 24 deletions(-) diff --git a/tools/arkmanager b/tools/arkmanager index 9169563..1ed3972 100755 --- a/tools/arkmanager +++ b/tools/arkmanager @@ -29,19 +29,32 @@ NORMAL="\\033[0;39m" #--------------------- # functions #--------------------- +function checkForUpdate(){ + if isUpdateNeeded; then + echo "Current version:" $instver + echo "Available version:" $bnumber + echo "Your server needs to be restarted in order to receive the latest update." + echo "Run \"arkmanager update\" to do so" + else + echo "No update available" + fi +} +function setCurrentVersion(){ + # set the new current version in a file + cd $arkserverroot + echo $bnumber > arkversion +} function isUpdateNeeded(){ # # Check if the server need to be updated - # Return 1 if update is needed, else return 0 + # Return 0 if update is needed, else return 1 # getCurrentVersion getAvailableVersion - echo $instver - echo $bnumber - if ["$bnumber" = "$instver"]; then - return 0 + if [ "$bnumber" -eq "$instver" ]; then + return 1 # no update needed else - return 1 + return 0 # update needed fi } @@ -59,9 +72,8 @@ function getAvailableVersion(){ # # Get the current available server version on steamdb # - echo "Checking for update, this may take a while" bnumber=`$steamcmdroot/$steamcmdexec +login anonymous +app_info_print "$appid" +quit | grep -EA 5 "^\s+\"public\"$" | grep -E "^\s+\"buildid\"\s+" | tr '[:blank:]"' ' ' | tr -s ' ' | cut -f3 | sed 's/^ //' | cut -c9-14` - echo "Available server version: "$bnumber + return $bnumber } function isTheServerRunning(){ @@ -92,6 +104,7 @@ case "$1" in restart);; install);; update);; + checkupdate);; broadcast);; status);; *) @@ -130,28 +143,34 @@ doStart() { tail -n 1 "$logdir/arkserver.log" } -# stop function + doStop() { - read -p "This operation will quit the server without saving, are your really sure?" -n 1 -r - if [[ $REPLY =~ ^[Yy]$ ]]; then - screen -X -S "$servicename" stuff "^C" - sleep 30 - echo "$timestamp: stop" >> "$logdir/arkserver.log" - tail -n 1 "$logdir/arkserver.log" - fi + # + # stop the ARK server + # + screen -S "$servicename" -p 0 -X stuff "quit$(printf \\r)" + # screen -S "$servicename" -X quit + sleep 30 + echo "$timestamp: stop" >> "$logdir/arkserver.log" } -# install function doInstall() { - if [ ! -d "$arkserverroot" ]; then - mkdir $arkserverroot - fi - cd $steamcmdroot - ./$steamcmdexec +login anonymous +force_install_dir "$arkserverroot" +app_update $appid validate +quit + # + # install of ARK server + # + if [ ! -d "$arkserverroot" ]; then + mkdir $arkserverroot + fi + cd $steamcmdroot + # install the server + ./$steamcmdexec +login anonymous +force_install_dir "$arkserverroot" +app_update $appid validate +quit + # the current version should be the last version. We set our version + getAvailableVersion + setCurrentVersion } -# update function doUpdate() { +<<<<<<< HEAD cd $arkserverroot if isUpdateNeeded; then if [ -f "$arkserverroot/arkupdate.timed" ] @@ -178,6 +197,34 @@ doUpdate() { echo "$timestamp: No update needed." >> "$logdir/update.log" tail -n 1 "$logdir/update.log" fi; +======= + # + # Stop the server, update it and then start it back. + # + cd $arkserverroot + if isUpdateNeeded; then + if [ -f "$arkserverroot/arkupdate.timed" ]; then + doStop + cd $steamcmdroot + ./$steamcmdexec +login anonymous +force_install_dir "$arkserverroot" +app_update $appid validate +quit + cd $logdir + echo "$bnumber" > "$arkserverroot/arkversion" + cd $steamcmdroot + doStart + echo "$timestamp: update to $bnumber complete" >> "$logdir/update.log" + if [ $servermail != "" ]; then + mail -a $logdir/update.log -s "Update-Log" $servermail < /dev/null + fi + 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; +>>>>>>> add check for update function } #broadcast info @@ -228,7 +275,11 @@ case "$1" in doInstall ;; update) - doUpdate + testupdate + #doUpdate + ;; + checkupdate) + checkForUpdate ;; broadcast) doInfo $2 From a8e0f79c67e1cdd674fa6b83ea72a48d46552102 Mon Sep 17 00:00:00 2001 From: Sispheor Date: Sun, 21 Jun 2015 10:02:07 +0200 Subject: [PATCH 19/36] update readme to ask for screen installation --- README.md | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/README.md b/README.md index 230d832..3547f9d 100644 --- a/README.md +++ b/README.md @@ -8,6 +8,12 @@ https://developer.valvesoftware.com/wiki/SteamCMD#Linux We assume you have created the `steam` user to store steamcmd and your ARK server. +## Install requirement +Use this command to install soft requirement on your system +``` +apt-get install screen unzip +``` + ## Install ARK Server Tools To install ARK Server Tools run these commands: @@ -56,6 +62,9 @@ manually updates ARK server #### arkmanager status Get the status of the server. Show if the process is running, if the server is up and the current version number +#### arkmanager checkupdate +Check if a new version of the server is available but not apply it + #### arkmanager broadcast [message] broadcast a message to ARK server chat From 6394b21eeb3dd268b8eaf3b1bf5085e0141136bb Mon Sep 17 00:00:00 2001 From: Sispheor Date: Sun, 21 Jun 2015 10:02:07 +0200 Subject: [PATCH 20/36] fix indentation --- tools/arkmanager | 49 ++++++++++++++++++++++++++---------------------- 1 file changed, 27 insertions(+), 22 deletions(-) diff --git a/tools/arkmanager b/tools/arkmanager index 1ed3972..dde2038 100755 --- a/tools/arkmanager +++ b/tools/arkmanager @@ -108,11 +108,12 @@ case "$1" in broadcast);; status);; *) - echo "use arkmanager " + echo "use arkmanager " exit 0 ;; esac +<<<<<<< HEAD # Global variables source ~/.arkmanager.cfg @@ -141,9 +142,18 @@ doStart() { screen -dmS "$servicename" $thejob echo "$timestamp: start" >> "$logdir/arkserver.log" tail -n 1 "$logdir/arkserver.log" +======= +doStart() { + # + # start function + # + arkserveropts="TheIsland?QueryPort=$arkqueryport?Port=$arkserverport?ServerPassword=$arkserverpass?ServerAdminPassword=$arkserverapass?listen" + thejob="$arkserverroot/$arkserverexec $arkserveropts" + screen -dmS "$servicename" $thejob + echo "$timestamp: start" >> "$logdir/arkserver.log" +>>>>>>> fix indentation } - doStop() { # # stop the ARK server @@ -203,25 +213,21 @@ doUpdate() { # cd $arkserverroot if isUpdateNeeded; then - if [ -f "$arkserverroot/arkupdate.timed" ]; then - doStop - cd $steamcmdroot - ./$steamcmdexec +login anonymous +force_install_dir "$arkserverroot" +app_update $appid validate +quit - cd $logdir - echo "$bnumber" > "$arkserverroot/arkversion" - cd $steamcmdroot - doStart - echo "$timestamp: update to $bnumber complete" >> "$logdir/update.log" - if [ $servermail != "" ]; then - mail -a $logdir/update.log -s "Update-Log" $servermail < /dev/null - fi - rm "$arkserverroot/arkupdate.timed" - else - touch "$arkserverroot/arkupdate.timed" - info="There is a update for ark, server will restart in 60mins!!!!!" - doInfo $info - fi; + doStop + cd $steamcmdroot + ./$steamcmdexec +login anonymous +force_install_dir "$arkserverroot" +app_update $appid +quit + cd $logdir + echo "$bnumber" > "$arkserverroot/arkversion" + cd $steamcmdroot + doStart + echo "$timestamp: update to $bnumber complete" >> "$logdir/update.log" + if [ $servermail -ne "" ]; then + mail -a $logdir/update.log -s "Update-Log" $servermail < /dev/null + fi + rm "$arkserverroot/arkupdate.timed" + else + echo "No update available" echo "$timestamp: No update needed." >> "$logdir/update.log" fi; >>>>>>> add check for update function @@ -275,8 +281,7 @@ case "$1" in doInstall ;; update) - testupdate - #doUpdate + doUpdate ;; checkupdate) checkForUpdate From 49f5b955972305dcedabb32a42d7b0b2ad6b2e18 Mon Sep 17 00:00:00 2001 From: Sispheor Date: Sun, 21 Jun 2015 10:02:07 +0200 Subject: [PATCH 21/36] add file limit to readme --- README.md | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 3547f9d..7f53539 100644 --- a/README.md +++ b/README.md @@ -8,12 +8,26 @@ https://developer.valvesoftware.com/wiki/SteamCMD#Linux We assume you have created the `steam` user to store steamcmd and your ARK server. -## Install requirement +## Requirements Use this command to install soft requirement on your system ``` apt-get install screen unzip ``` +Edit /etc/sysctl.conf and set: +``` +fs.file-max=100000 +``` +Edit /etc/security/limits.conf and set these limits: +``` +* soft nofile 100000 +* hard nofile 100000 +``` +Add the following line to /etc/pam.d/common-session: +``` +session required pam_limits.so +``` + ## Install ARK Server Tools To install ARK Server Tools run these commands: From 22e3e10f0ef38cec8b22d31fe7ca107c1142a718 Mon Sep 17 00:00:00 2001 From: Sispheor Date: Sun, 21 Jun 2015 10:02:07 +0200 Subject: [PATCH 22/36] check if the server is not already up before try to run it --- tools/arkmanager | 74 +++++++++++++++++++++++++++++++++++++----------- 1 file changed, 58 insertions(+), 16 deletions(-) diff --git a/tools/arkmanager b/tools/arkmanager index dde2038..344fbf6 100755 --- a/tools/arkmanager +++ b/tools/arkmanager @@ -29,7 +29,16 @@ NORMAL="\\033[0;39m" #--------------------- # functions #--------------------- +function testfunction(){ + if [ -z $servermail ]; then + echo "mail ok" + fi + +} function checkForUpdate(){ + # + # Check if a new version is available but not apply it + # if isUpdateNeeded; then echo "Current version:" $instver echo "Available version:" $bnumber @@ -40,7 +49,9 @@ function checkForUpdate(){ fi } function setCurrentVersion(){ + # # set the new current version in a file + # cd $arkserverroot echo $bnumber > arkversion } @@ -81,7 +92,7 @@ function isTheServerRunning(){ # Check id the server process is alive # SERVICE="ShooterGameServer" - ps -a | grep -v grep | grep $SERVICE > /dev/null + ps aux | grep -v grep | grep $SERVICE > /dev/null result=$? return $result } @@ -91,7 +102,7 @@ function IsTheServerUp(){ # Check if the server is up and visible in steam server list # If the server is listenning on his port return 0, else return 1 # - PORT="7776" + PORT="7779" lsof -i |grep $PORT > /dev/null result=$? return $result @@ -147,21 +158,42 @@ doStart() { # # start function # +<<<<<<< HEAD arkserveropts="TheIsland?QueryPort=$arkqueryport?Port=$arkserverport?ServerPassword=$arkserverpass?ServerAdminPassword=$arkserverapass?listen" thejob="$arkserverroot/$arkserverexec $arkserveropts" screen -dmS "$servicename" $thejob echo "$timestamp: start" >> "$logdir/arkserver.log" >>>>>>> fix indentation +======= + if isTheServerRunning; then + echo "The server is already running" + else + arkserveropts="TheIsland?SessionName=$sessioname?QueryPort=$arkqueryport?Port=$arkserverport?ServerPassword=$arkserverpass?ServerAdminPassword=$arkserverapass?listen" + thejob="$arkserverroot/$arkserverexec $arkserveropts" + screen -dmS "$servicename" $thejob + echo "$timestamp: start" >> "$logdir/arkserver.log" + fi +>>>>>>> check if the server is not already up before try to run it } doStop() { # # stop the ARK server # +<<<<<<< HEAD screen -S "$servicename" -p 0 -X stuff "quit$(printf \\r)" # screen -S "$servicename" -X quit sleep 30 echo "$timestamp: stop" >> "$logdir/arkserver.log" +======= + if isTheServerRunning; then + screen -X -S "$servicename" -X stuff "^C" + sleep 30 + echo "$timestamp: stop" >> "$logdir/arkserver.log" + else + echo "The server is already stopped" + fi +>>>>>>> check if the server is not already up before try to run it } doInstall() { @@ -212,20 +244,29 @@ doUpdate() { # Stop the server, update it and then start it back. # cd $arkserverroot - if isUpdateNeeded; then - doStop - cd $steamcmdroot - ./$steamcmdexec +login anonymous +force_install_dir "$arkserverroot" +app_update $appid +quit - cd $logdir - echo "$bnumber" > "$arkserverroot/arkversion" - cd $steamcmdroot - doStart - echo "$timestamp: update to $bnumber complete" >> "$logdir/update.log" - if [ $servermail -ne "" ]; then - mail -a $logdir/update.log -s "Update-Log" $servermail < /dev/null - fi - rm "$arkserverroot/arkupdate.timed" + if isUpdateNeeded; then + # check if the server was alive before the update so we can launch it back after the update + serverWasAlive=0 + if isTheServerRunning ;then + serverWasAlive=1 + fi + doStop + cd $steamcmdroot + ./$steamcmdexec +login anonymous +force_install_dir "$arkserverroot" +app_update $appid +quit + cd $logdir + echo "$bnumber" > "$arkserverroot/arkversion" + cd $steamcmdroot + echo "$timestamp: update to $bnumber complete" >> "$logdir/update.log" + + # we restart the server only if it was started before the update + if [ $serverWasAlive -eq 1 ]; then + doStart + fi + # send mail to admin + #if [ -z $servermail ]; then + # mail -a $logdir/update.log -s "Update-Log" $servermail < /dev/null + #fi else echo "No update available" echo "$timestamp: No update needed." >> "$logdir/update.log" @@ -271,7 +312,7 @@ case "$1" in restart) doStop echo "$timestamp: stop" >> "$logdir/arkserver.log" - sleep 60 + sleep 10 doStart echo "$timestamp: start" >> "$logdir/arkserver.log" echo "$timestamp: restart" >> "$logdir/arkserver.log" @@ -282,6 +323,7 @@ case "$1" in ;; update) doUpdate + #testfunction ;; checkupdate) checkForUpdate From 2ddd49c305fa449a914de5c1d328d72c47461194 Mon Sep 17 00:00:00 2001 From: Sispheor Date: Sun, 21 Jun 2015 10:02:07 +0200 Subject: [PATCH 23/36] add session name to the configuration --- tools/arkmanager.cfg | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tools/arkmanager.cfg b/tools/arkmanager.cfg index cd6e887..8789e68 100644 --- a/tools/arkmanager.cfg +++ b/tools/arkmanager.cfg @@ -4,10 +4,11 @@ steamcmdexec="steamcmd.sh" # name of st steamcmd_user="steam" # name of the system user who own steamcmd folder # config Server +sessioname=YourLinuxSessionName arkserverroot="/home/steam/ARK" # path of your ARK server files (default ~/ARK) arkserverexec="ShooterGame/Binaries/Linux/ShooterGameServer" # name of ARK server executable arkqueryport="27016" # ARK query port (default 27016) -arkserverport="7778" # ARK server port (default 7778) +arkserverport="7779" # ARK server port (default 7779) arkserverpass="SERVERPASSWORD" # ARK server password, empty: no password required to login arkserverapass="ADMINPASSWORD" # ARK server admin password, KEEP IT SAFE! From 1a8dbf007dc3166582864c93446fc7e226781cb3 Mon Sep 17 00:00:00 2001 From: FezVrasta Date: Sun, 21 Jun 2015 10:02:07 +0200 Subject: [PATCH 24/36] reimplement #20 --- tools/arkmanager | 80 ++++-------------------------------------------- 1 file changed, 6 insertions(+), 74 deletions(-) diff --git a/tools/arkmanager b/tools/arkmanager index 344fbf6..2f90b83 100755 --- a/tools/arkmanager +++ b/tools/arkmanager @@ -124,47 +124,10 @@ case "$1" in ;; esac -<<<<<<< HEAD -# Global variables -source ~/.arkmanager.cfg - -# init -if [ ! -d "$arkserverroot" ]; then - mkdir $arkserverroot -fi - -info="" -thejob="" -patch=1 -timestamp=$( date +%T ) -cd $arkserverroot -touch arkversion # If the file doesn't exist -instver=`cat "arkversion"` -bnumber=`$steamcmdroot/$steamcmdexec +login anonymous +app_info_print "$appid" +quit | grep -EA 5 "^\s+\"public\"$" | grep -E "^\s+\"buildid\"\s+" | tr '[:blank:]"' ' ' | tr -s ' ' | cut -f3 | sed 's/^ //' | cut -c9-14` - -if [ "$bnumber" = "$instver" ]; then - patch=0 -fi - -# start function -doStart() { - arkserveropts="TheIsland?QueryPort=$arkqueryport?Port=$arkserverport?ServerPassword=$arkserverpass?ServerAdminPassword=$arkserverapass?listen" - thejob="$arkserverroot/$arkserverexec $arkserveropts" - screen -dmS "$servicename" $thejob - echo "$timestamp: start" >> "$logdir/arkserver.log" - tail -n 1 "$logdir/arkserver.log" -======= doStart() { # # start function # -<<<<<<< HEAD - arkserveropts="TheIsland?QueryPort=$arkqueryport?Port=$arkserverport?ServerPassword=$arkserverpass?ServerAdminPassword=$arkserverapass?listen" - thejob="$arkserverroot/$arkserverexec $arkserveropts" - screen -dmS "$servicename" $thejob - echo "$timestamp: start" >> "$logdir/arkserver.log" ->>>>>>> fix indentation -======= if isTheServerRunning; then echo "The server is already running" else @@ -172,28 +135,22 @@ doStart() { thejob="$arkserverroot/$arkserverexec $arkserveropts" screen -dmS "$servicename" $thejob echo "$timestamp: start" >> "$logdir/arkserver.log" + tail -n 1 "$logdir/arkserver.log" fi ->>>>>>> check if the server is not already up before try to run it } doStop() { # # stop the ARK server # -<<<<<<< HEAD - screen -S "$servicename" -p 0 -X stuff "quit$(printf \\r)" - # screen -S "$servicename" -X quit - sleep 30 - echo "$timestamp: stop" >> "$logdir/arkserver.log" -======= if isTheServerRunning; then screen -X -S "$servicename" -X stuff "^C" sleep 30 echo "$timestamp: stop" >> "$logdir/arkserver.log" + tail -n 1 "$logdir/arkserver.log" else echo "The server is already stopped" fi ->>>>>>> check if the server is not already up before try to run it } doInstall() { @@ -212,34 +169,6 @@ doInstall() { } doUpdate() { -<<<<<<< HEAD - cd $arkserverroot - if isUpdateNeeded; then - if [ -f "$arkserverroot/arkupdate.timed" ] - then - doStop - cd $steamcmdroot - ./$steamcmdexec +login anonymous +force_install_dir "$arkserverroot" +app_update $appid validate +quit - cd $logdir - echo "$bnumber" > "$arkserverroot/arkversion" - cd $steamcmdroot - doStart - echo "$timestamp: update to $bnumber complete" >> "$logdir/update.log" - if [ $servermail != "" ]; then - mail -a $logdir/update.log -s "Update-Log" $servermail < /dev/null - fi - rm "$arkserverroot/arkupdate.timed" - tail -n 1 "$logdir/update.log" - 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" - tail -n 1 "$logdir/update.log" - fi; -======= # # Stop the server, update it and then start it back. # @@ -258,6 +187,7 @@ doUpdate() { echo "$bnumber" > "$arkserverroot/arkversion" cd $steamcmdroot echo "$timestamp: update to $bnumber complete" >> "$logdir/update.log" + tail -n 1 "$logdir/arkserver.log" # we restart the server only if it was started before the update if [ $serverWasAlive -eq 1 ]; then @@ -270,8 +200,8 @@ doUpdate() { else echo "No update available" echo "$timestamp: No update needed." >> "$logdir/update.log" + tail -n 1 "$logdir/update.log" fi; ->>>>>>> add check for update function } #broadcast info @@ -312,9 +242,11 @@ case "$1" in restart) doStop echo "$timestamp: stop" >> "$logdir/arkserver.log" + tail -n 1 "$logdir/arkserver.log" sleep 10 doStart echo "$timestamp: start" >> "$logdir/arkserver.log" + tail -n 1 "$logdir/arkserver.log" echo "$timestamp: restart" >> "$logdir/arkserver.log" tail -n 1 "$logdir/arkserver.log" ;; From 7cdcae08048d52b39b2a8ac5d82046e8da2f809b Mon Sep 17 00:00:00 2001 From: FezVrasta Date: Sun, 21 Jun 2015 10:02:07 +0200 Subject: [PATCH 25/36] fixed PR #23 --- README.md | 6 +++++- tools/arkdaemon | 2 ++ tools/arkmanager | 4 ++-- 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 7f53539..4c28757 100644 --- a/README.md +++ b/README.md @@ -11,7 +11,11 @@ We assume you have created the `steam` user to store steamcmd and your ARK serve ## Requirements Use this command to install soft requirement on your system ``` -apt-get install screen unzip +# Debian based/ Ubuntu +apt-get install screen + +# RHEL / CentOS / Fedora +yum install screen ``` Edit /etc/sysctl.conf and set: diff --git a/tools/arkdaemon b/tools/arkdaemon index d8e39f6..5fb27d9 100644 --- a/tools/arkdaemon +++ b/tools/arkdaemon @@ -9,6 +9,8 @@ # ### END INIT INFO +# NOTICE: this daemon can work only if your system supports start-stop-daemon + # Using the lsb functions to perform the operations. . /lib/lsb/init-functions diff --git a/tools/arkmanager b/tools/arkmanager index 2f90b83..bc43f90 100755 --- a/tools/arkmanager +++ b/tools/arkmanager @@ -97,7 +97,7 @@ function isTheServerRunning(){ return $result } -function IsTheServerUp(){ +function isTheServerUp(){ # # Check if the server is up and visible in steam server list # If the server is listenning on his port return 0, else return 1 @@ -219,7 +219,7 @@ printStatus(){ echo -e "$NORMAL" "Server running:" "$RED" "No" fi - if IsTheServerUp ;then + if isTheServerUp ;then echo -e "$NORMAL" "Server online:" "$GREEN" " Yes" else echo -e "$NORMAL" "Server online:" "$RED" " No" From cddcf4c2cbe603a010ca4737f5bd00b3bfd52dd1 Mon Sep 17 00:00:00 2001 From: FezVrasta Date: Sun, 21 Jun 2015 11:35:56 +0200 Subject: [PATCH 26/36] cleanup --- tools/arkmanager | 99 +++++++++++++++++++++++------------------------- 1 file changed, 48 insertions(+), 51 deletions(-) diff --git a/tools/arkmanager b/tools/arkmanager index bc43f90..09ee668 100755 --- a/tools/arkmanager +++ b/tools/arkmanager @@ -14,8 +14,10 @@ fi #--------------------- # Variables #--------------------- + # Global variables source /etc/arkmanager/arkmanager.cfg + # Local variables info="" thejob="" @@ -35,10 +37,11 @@ function testfunction(){ fi } + +# +# Check if a new version is available but not apply it +# function checkForUpdate(){ - # - # Check if a new version is available but not apply it - # if isUpdateNeeded; then echo "Current version:" $instver echo "Available version:" $bnumber @@ -48,18 +51,20 @@ function checkForUpdate(){ echo "No update available" fi } + +# +# Set the new current version in a file +# function setCurrentVersion(){ - # - # set the new current version in a file - # cd $arkserverroot echo $bnumber > arkversion } + +# +# Check if the server need to be updated +# Return 0 if update is needed, else return 1 +# function isUpdateNeeded(){ - # - # Check if the server need to be updated - # Return 0 if update is needed, else return 1 - # getCurrentVersion getAvailableVersion if [ "$bnumber" -eq "$instver" ]; then @@ -69,65 +74,52 @@ function isUpdateNeeded(){ fi } + +# +# Return the current version number +# function getCurrentVersion(){ - # - # Return the current version number - # cd $arkserverroot touch arkversion # If the file doesn't exist instver=`cat "arkversion"` return $instver } + +# +# Get the current available server version on steamdb +# function getAvailableVersion(){ - # - # Get the current available server version on steamdb - # bnumber=`$steamcmdroot/$steamcmdexec +login anonymous +app_info_print "$appid" +quit | grep -EA 5 "^\s+\"public\"$" | grep -E "^\s+\"buildid\"\s+" | tr '[:blank:]"' ' ' | tr -s ' ' | cut -f3 | sed 's/^ //' | cut -c9-14` return $bnumber } +# +# Check id the server process is alive +# function isTheServerRunning(){ - # - # Check id the server process is alive - # SERVICE="ShooterGameServer" ps aux | grep -v grep | grep $SERVICE > /dev/null result=$? return $result } +# +# Check if the server is up and visible in steam server list +# If the server is listenning on his port return 0, else return 1 +# function isTheServerUp(){ - # - # Check if the server is up and visible in steam server list - # If the server is listenning on his port return 0, else return 1 - # PORT="7779" lsof -i |grep $PORT > /dev/null result=$? return $result } -# To speedup stuff, if you have not specified a command or the command is invalid, we skip everything and just give you the usage message -case "$1" in - start);; - stop);; - restart);; - install);; - update);; - checkupdate);; - broadcast);; - status);; - *) - echo "use arkmanager " - exit 0 - ;; -esac +# +# start function +# doStart() { - # - # start function - # if isTheServerRunning; then echo "The server is already running" else @@ -139,10 +131,10 @@ doStart() { fi } +# +# stop the ARK server +# doStop() { - # - # stop the ARK server - # if isTheServerRunning; then screen -X -S "$servicename" -X stuff "^C" sleep 30 @@ -153,10 +145,10 @@ doStop() { fi } +# +# install of ARK server +# doInstall() { - # - # install of ARK server - # if [ ! -d "$arkserverroot" ]; then mkdir $arkserverroot fi @@ -168,10 +160,10 @@ doInstall() { setCurrentVersion } +# +# Stop the server, update it and then start it back. +# doUpdate() { - # - # Stop the server, update it and then start it back. - # cd $arkserverroot if isUpdateNeeded; then @@ -204,7 +196,9 @@ doUpdate() { fi; } -#broadcast info +# +# Broadcast message to server +# doInfo() { if [ ! -z $1 ]; then info=$1 @@ -212,6 +206,9 @@ doInfo() { screen -S "$servicename" -p 0 -X stuff "broadcast $info $(printf \\r)" } +# +# Print the status of the server (running? online? version?) +# printStatus(){ if isTheServerRunning ;then echo -e "$NORMAL" "Server running:" "$GREEN" "Yes" From f244fa7c296e01f4189c124cd53f2e07d349d40d Mon Sep 17 00:00:00 2001 From: FezVrasta Date: Sun, 21 Jun 2015 12:53:13 +0200 Subject: [PATCH 27/36] added info for centos --- README.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 4c28757..b25da48 100644 --- a/README.md +++ b/README.md @@ -27,11 +27,13 @@ Edit /etc/security/limits.conf and set these limits: * soft nofile 100000 * hard nofile 100000 ``` -Add the following line to /etc/pam.d/common-session: +Add the following line to /etc/pam.d/common-session (Debian/Ubuntu) or /etc/pam.d/system-auth (RHEL/CentOS/Fedora): ``` session required pam_limits.so ``` +After these edits, you'll need to restart your bash session or reconnect to your SSH shell. + ## Install ARK Server Tools To install ARK Server Tools run these commands: From a005ad10059bc9770181c50830ecad0c8c60b7c6 Mon Sep 17 00:00:00 2001 From: FezVrasta Date: Sun, 21 Jun 2015 13:15:47 +0200 Subject: [PATCH 28/36] added net installer --- netinstall.sh | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 netinstall.sh diff --git a/netinstall.sh b/netinstall.sh new file mode 100644 index 0000000..0cc0720 --- /dev/null +++ b/netinstall.sh @@ -0,0 +1,21 @@ +#!/bin/bash + +# +# Net Installer, used with curl +# + +# Download and untar installation files +cd /tmp +wget https://github.com/FezVrasta/ark-server-tools/archive/master.tar.gz +tar -zxvf master.tar.gz + +# Install ARK Server Tools +cd ark-server-tools-master/tools +chmod +x install.sh +sh install.sh $1 + +# Remove the installation files +rm -f master.tar.gz +rm -rf /tmp/ark-server-tools-master + +echo "ARK Server Tools were correctly installed in your system inside the home directory of $1!" From 45e49bd2cf20771256a70f1e836d20779ac28312 Mon Sep 17 00:00:00 2001 From: FezVrasta Date: Sun, 21 Jun 2015 13:16:34 +0200 Subject: [PATCH 29/36] prevent errors while updating script --- tools/install.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tools/install.sh b/tools/install.sh index 4e38dc8..e4b661d 100644 --- a/tools/install.sh +++ b/tools/install.sh @@ -14,9 +14,9 @@ if [ ! -z $1 ]; then chown $1 /var/log/arktools # Copy arkmanager.cfg inside linux configuation folder - mkdir /etc/arkmanager + mkdir -p /etc/arkmanager mv arkmanager.cfg /etc/arkmanager/arkmanager.cfg - chown $1 /etc/arkmanager/arkmanager.cfg + chown $1 /etc/arkmanager/arkmanager.cfg else echo "You must specify your system steam user who own steamcmd directory to install ARK Tools." From 94036bfb8faf041b1d3c7ede6cf0f865e664727e Mon Sep 17 00:00:00 2001 From: FezVrasta Date: Sun, 21 Jun 2015 13:39:46 +0200 Subject: [PATCH 30/36] updated readme and updated net installer --- README.md | 11 +++-------- netinstall.sh | 7 +++++-- 2 files changed, 8 insertions(+), 10 deletions(-) diff --git a/README.md b/README.md index b25da48..abc1729 100644 --- a/README.md +++ b/README.md @@ -39,17 +39,12 @@ After these edits, you'll need to restart your bash session or reconnect to your To install ARK Server Tools run these commands: ```sh -cd ~ -wget https://github.com/FezVrasta/ark-server-tools/archive/master.tar.gz -tar -zxvf master.tar.gz -cd ark-server-tools-master/tools -chmod u+x install.sh -sudo sh install.sh steam +curl -s https://raw.githubusercontent.com/FezVrasta/ark-server-tools/master/netinstall.sh | bash -s steam ``` -NB: You may want to change the `install.sh` parameter to fit your steam user if different from `steam`. +NB: You may want to change the `bash -s` 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. +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. ## Configure ARK Server diff --git a/netinstall.sh b/netinstall.sh index 0cc0720..b5d4a43 100644 --- a/netinstall.sh +++ b/netinstall.sh @@ -12,10 +12,13 @@ tar -zxvf master.tar.gz # Install ARK Server Tools cd ark-server-tools-master/tools chmod +x install.sh -sh install.sh $1 +if [[ -n $(sh install.sh $1) ]]; then + echo "Something where wrong :(" +else + echo "ARK Server Tools were correctly installed in your system inside the home directory of $1!" +fi # Remove the installation files rm -f master.tar.gz rm -rf /tmp/ark-server-tools-master -echo "ARK Server Tools were correctly installed in your system inside the home directory of $1!" From e29b8f0af5f580338f30d308f819e96bab81d3ea Mon Sep 17 00:00:00 2001 From: FezVrasta Date: Sun, 21 Jun 2015 13:56:17 +0200 Subject: [PATCH 31/36] reset color after message status --- tools/arkmanager | 1 + 1 file changed, 1 insertion(+) diff --git a/tools/arkmanager b/tools/arkmanager index 09ee668..340f5db 100755 --- a/tools/arkmanager +++ b/tools/arkmanager @@ -223,6 +223,7 @@ printStatus(){ fi getCurrentVersion echo -e "$NORMAL" "Server version:" "$GREEN" $instver + echo "$NORMAL" } From 753a86eecbd6ebb33d0f63ca5ab357bb70737fe9 Mon Sep 17 00:00:00 2001 From: FezVrasta Date: Sun, 21 Jun 2015 14:02:04 +0200 Subject: [PATCH 32/36] fixed typo --- tools/arkmanager | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/arkmanager b/tools/arkmanager index 340f5db..91f0bd1 100755 --- a/tools/arkmanager +++ b/tools/arkmanager @@ -223,7 +223,7 @@ printStatus(){ fi getCurrentVersion echo -e "$NORMAL" "Server version:" "$GREEN" $instver - echo "$NORMAL" + echo -e "$NORMAL" } From fb2110eb2433bcf600ba8a128416dc90722d5b9f Mon Sep 17 00:00:00 2001 From: FezVrasta Date: Sun, 21 Jun 2015 14:09:51 +0200 Subject: [PATCH 33/36] install and netinstall can now update existing installation --- netinstall.sh | 21 ++++++++++++++++----- tools/install.sh | 14 ++++++++++---- 2 files changed, 26 insertions(+), 9 deletions(-) diff --git a/netinstall.sh b/netinstall.sh index b5d4a43..1f5f9bd 100644 --- a/netinstall.sh +++ b/netinstall.sh @@ -12,13 +12,24 @@ tar -zxvf master.tar.gz # Install ARK Server Tools cd ark-server-tools-master/tools chmod +x install.sh -if [[ -n $(sh install.sh $1) ]]; then - echo "Something where wrong :(" -else - echo "ARK Server Tools were correctly installed in your system inside the home directory of $1!" -fi +sh install.sh $1 + +status = $? # Remove the installation files rm -f master.tar.gz rm -rf /tmp/ark-server-tools-master + +if [ $status == 0 ]; then + echo "ARK Server Tools were correctly installed in your system inside the home directory of $1!" +fi + +if [ $status == 1 ]; then + echo "Something where wrong :(" +fi + +if [ $status == 2 ]; then + echo "WARNING: A previous version of ARK Server Tools was detected in your system, your old configuration was not overwritten. You may need to manually update it." + echo "ARK Server Tools were correctly installed in your system inside the home directory of $1!" +fi diff --git a/tools/install.sh b/tools/install.sh index e4b661d..1a02ac9 100644 --- a/tools/install.sh +++ b/tools/install.sh @@ -13,14 +13,20 @@ if [ ! -z $1 ]; then mkdir -p /var/log/arktools chown $1 /var/log/arktools - # Copy arkmanager.cfg inside linux configuation folder - mkdir -p /etc/arkmanager - mv arkmanager.cfg /etc/arkmanager/arkmanager.cfg - chown $1 /etc/arkmanager/arkmanager.cfg + # Copy arkmanager.cfg inside linux configuation folder if it doesn't already exists + if [ -f /etc/arkmanager/arkmanager.cfg ]; then + mkdir -p /etc/arkmanager + cp -n arkmanager.cfg /etc/arkmanager/arkmanager.cfg + chown $1 /etc/arkmanager/arkmanager.cfg + else + echo "A previous version of ARK Server Tools was detected in your system, your old configuration was not overwritten. You may need to manually update it."; + exit 2 + fi else echo "You must specify your system steam user who own steamcmd directory to install ARK Tools." echo "Usage: ./install.sh steam" + exit 1 fi exit 0 From e66624442f0f927683ca8171289b3a67e0f2cca4 Mon Sep 17 00:00:00 2001 From: FezVrasta Date: Sun, 21 Jun 2015 14:11:20 +0200 Subject: [PATCH 34/36] tell user what is happening while he wait --- tools/arkmanager | 1 + 1 file changed, 1 insertion(+) diff --git a/tools/arkmanager b/tools/arkmanager index 91f0bd1..1fabd9f 100755 --- a/tools/arkmanager +++ b/tools/arkmanager @@ -136,6 +136,7 @@ doStart() { # doStop() { if isTheServerRunning; then + echo "Stopping server..." screen -X -S "$servicename" -X stuff "^C" sleep 30 echo "$timestamp: stop" >> "$logdir/arkserver.log" From dc82bc42fd9ed6f5a5aaa3c2f43ba862b210101b Mon Sep 17 00:00:00 2001 From: FezVrasta Date: Sun, 21 Jun 2015 14:43:24 +0200 Subject: [PATCH 35/36] fixed netinstall command --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index abc1729..e2b4042 100644 --- a/README.md +++ b/README.md @@ -36,10 +36,10 @@ After these edits, you'll need to restart your bash session or reconnect to your ## Install ARK Server Tools -To install ARK Server Tools run these commands: +To install ARK Server Tools run this command: ```sh -curl -s https://raw.githubusercontent.com/FezVrasta/ark-server-tools/master/netinstall.sh | bash -s steam +curl -s https://raw.githubusercontent.com/FezVrasta/ark-server-tools/master/netinstall.sh | sudo bash -s steam ``` NB: You may want to change the `bash -s` parameter to fit your steam user if different from `steam`. From a03df35d7b21f9a58cf93aa318923f576fbd6863 Mon Sep 17 00:00:00 2001 From: FezVrasta Date: Sun, 21 Jun 2015 14:44:10 +0200 Subject: [PATCH 36/36] improved description --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index e2b4042..dde2f6e 100644 --- a/README.md +++ b/README.md @@ -27,12 +27,12 @@ Edit /etc/security/limits.conf and set these limits: * soft nofile 100000 * hard nofile 100000 ``` -Add the following line to /etc/pam.d/common-session (Debian/Ubuntu) or /etc/pam.d/system-auth (RHEL/CentOS/Fedora): +Add the following line to `/etc/pam.d/common-session` (Debian/Ubuntu) or `/etc/pam.d/system-auth` (RHEL/CentOS/Fedora): ``` session required pam_limits.so ``` -After these edits, you'll need to restart your bash session or reconnect to your SSH shell. +After these edits, you'll need to restart your bash session or reconnect to your SSH shell to make the changes effective. ## Install ARK Server Tools