From f5a1092487b4c9854ca347423232a2b00ea794b2 Mon Sep 17 00:00:00 2001 From: Sispheor Date: Sat, 20 Jun 2015 11:33:13 +0200 Subject: [PATCH 01/22] 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 75fd8d1ea1d2d5ad606d97c6479af6deb2ceec88 Mon Sep 17 00:00:00 2001 From: Sispheor Date: Sat, 20 Jun 2015 11:43:09 +0200 Subject: [PATCH 02/22] 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 6a00440d21947f43015161dd5965b4b18b807d6c Mon Sep 17 00:00:00 2001 From: Sispheor Date: Sat, 20 Jun 2015 11:43:31 +0200 Subject: [PATCH 03/22] 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 f641934..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="USERNAME" # steam user (needed to download the app, anonymous is not allowed) -steampass="PASSWORD" # steam password # 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 96515edc27bc1596377948b89fe44a8a9a0563d6 Mon Sep 17 00:00:00 2001 From: Sispheor Date: Sat, 20 Jun 2015 11:52:15 +0200 Subject: [PATCH 04/22] 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 4e5899a08d2f77f5710248e6ef603f2e879a413d Mon Sep 17 00:00:00 2001 From: Sispheor Date: Sat, 20 Jun 2015 11:52:37 +0200 Subject: [PATCH 05/22] 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 06cb214a5b3829a3cd03d06a7a97443992540ed0 Mon Sep 17 00:00:00 2001 From: Sispheor Date: Sat, 20 Jun 2015 14:20:21 +0200 Subject: [PATCH 06/22] 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 73ee6fa386cb674500f7274bd500861950409077 Mon Sep 17 00:00:00 2001 From: Sispheor Date: Sat, 20 Jun 2015 14:20:43 +0200 Subject: [PATCH 07/22] add some function to check the status of the server --- tools/arkmanager | 110 ++++++++++++++++++++++++++++++++----------- tools/arkmanager.cfg | 3 +- 2 files changed, 84 insertions(+), 29 deletions(-) mode change 100644 => 100755 tools/arkmanager diff --git a/tools/arkmanager b/tools/arkmanager old mode 100644 new mode 100755 index c190f73..5e9ba82 --- 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,33 +65,13 @@ case "$1" in install);; update);; broadcast);; + status);; *) echo "use arkmanager " exit 0 ;; esac -# 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=$arkserverport?ServerPassword=$arkserverpass?ServerAdminPassword=$arkserverapass?listen" @@ -66,25 +93,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" else touch "$arkserverroot/arkupdate.timed" @@ -104,7 +144,9 @@ doInfo() { screen -S "$servicename" -p 0 -X stuff "broadcast $info $(printf \\r)" } -# parameter select +#--------------------- +# Main program +#--------------------- case "$1" in start) doStart @@ -129,7 +171,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 ec1ddaa351635d2adf3645d3fc85bc814afc27cd Mon Sep 17 00:00:00 2001 From: Sispheor Date: Sat, 20 Jun 2015 14:36:57 +0200 Subject: [PATCH 08/22] add print status function --- tools/arkmanager | 44 ++++++++++++++++++++++++++++++-------------- 1 file changed, 30 insertions(+), 14 deletions(-) diff --git a/tools/arkmanager b/tools/arkmanager index 5e9ba82..f85d623 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 @@ -144,6 +154,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 #--------------------- @@ -172,18 +199,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 f714ec15284b8d9cf94ec9db60316b0c37008519 Mon Sep 17 00:00:00 2001 From: Sispheor Date: Sat, 20 Jun 2015 14:37:47 +0200 Subject: [PATCH 09/22] 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 e2d5ed5..4782afe 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 8a2b8a6d2f83305bf52163f6a7adbf49f03c7d6d Mon Sep 17 00:00:00 2001 From: Sispheor Date: Sat, 20 Jun 2015 14:43:51 +0200 Subject: [PATCH 10/22] 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 f85d623..b2f0079 100755 --- a/tools/arkmanager +++ b/tools/arkmanager @@ -84,7 +84,7 @@ esac # 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 8449c5e66300b38d3ae1e4f4fb80dfce10d04e4a Mon Sep 17 00:00:00 2001 From: Sispheor Date: Sat, 20 Jun 2015 14:49:47 +0200 Subject: [PATCH 11/22] 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 b2f0079..66a3f1c 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 @@ -113,15 +131,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 5f40f360c743674fe340d0d9dedbe46033895262 Mon Sep 17 00:00:00 2001 From: Sispheor Date: Sat, 20 Jun 2015 15:34:57 +0200 Subject: [PATCH 12/22] add check for update function --- tools/arkmanager | 121 ++++++++++++++++++++++++++++------------------- 1 file changed, 73 insertions(+), 48 deletions(-) diff --git a/tools/arkmanager b/tools/arkmanager index 66a3f1c..6469272 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);; *) @@ -108,52 +121,60 @@ doStart() { echo "$timestamp: start" >> "$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 -S "$servicename" -p 0 -X stuff "quit$(printf \\r)" - # screen -S "$servicename" -X quit - sleep 30 - echo "$timestamp: stop" >> "$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() { - 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; + # + # 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; } #broadcast info @@ -203,7 +224,11 @@ case "$1" in doInstall ;; update) - doUpdate + testupdate + #doUpdate + ;; + checkupdate) + checkForUpdate ;; broadcast) doInfo $2 From 2c9e8a3831fe235cb118ef47be3bd98f161da3cf Mon Sep 17 00:00:00 2001 From: Sispheor Date: Sat, 20 Jun 2015 15:54:45 +0200 Subject: [PATCH 13/22] update readme to ask for screen installation --- README.md | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/README.md b/README.md index 4782afe..6b668f0 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 9f9b80e982d8e6fd38caf72a29caa6b16292fe91 Mon Sep 17 00:00:00 2001 From: Sispheor Date: Sat, 20 Jun 2015 15:55:12 +0200 Subject: [PATCH 14/22] fix indentation --- tools/arkmanager | 50 ++++++++++++++++++++++-------------------------- 1 file changed, 23 insertions(+), 27 deletions(-) diff --git a/tools/arkmanager b/tools/arkmanager index 6469272..842bde4 100755 --- a/tools/arkmanager +++ b/tools/arkmanager @@ -108,20 +108,21 @@ case "$1" in broadcast);; status);; *) - echo "use arkmanager " + echo "use arkmanager " exit 0 ;; esac -# 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" + # + # 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" } - doStop() { # # stop the ARK server @@ -154,25 +155,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; } @@ -224,8 +221,7 @@ case "$1" in doInstall ;; update) - testupdate - #doUpdate + doUpdate ;; checkupdate) checkForUpdate From a7c23789e85908d5d4da7847e12a807800506ee0 Mon Sep 17 00:00:00 2001 From: Sispheor Date: Sat, 20 Jun 2015 17:52:17 +0200 Subject: [PATCH 15/22] add file limit to readme --- README.md | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 6b668f0..e15f483 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 a6dcb190d48d5748ba50223a18131ac31076bd0c Mon Sep 17 00:00:00 2001 From: Sispheor Date: Sat, 20 Jun 2015 17:52:50 +0200 Subject: [PATCH 16/22] check if the server is not already up before try to run it --- tools/arkmanager | 77 ++++++++++++++++++++++++++++++++---------------- 1 file changed, 52 insertions(+), 25 deletions(-) diff --git a/tools/arkmanager b/tools/arkmanager index 842bde4..3d2bda2 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 @@ -117,21 +128,27 @@ 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" + 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 } doStop() { # # 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" - + 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 } doInstall() { @@ -154,20 +171,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" @@ -212,7 +238,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" @@ -222,6 +248,7 @@ case "$1" in ;; update) doUpdate + #testfunction ;; checkupdate) checkForUpdate From a2d61abb549a380381c457a04f5557d399215e1b Mon Sep 17 00:00:00 2001 From: Sispheor Date: Sat, 20 Jun 2015 17:53:04 +0200 Subject: [PATCH 17/22] 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 3907ce9faf88146ed6de658866793ae50e575c84 Mon Sep 17 00:00:00 2001 From: Sispheor Date: Sun, 21 Jun 2015 17:59:40 +0200 Subject: [PATCH 18/22] remove port from statup command line. and remove hardcoded port in checkserverup function --- tools/arkmanager | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/tools/arkmanager b/tools/arkmanager index 1fabd9f..0f75c6a 100755 --- a/tools/arkmanager +++ b/tools/arkmanager @@ -109,8 +109,7 @@ function isTheServerRunning(){ # If the server is listenning on his port return 0, else return 1 # function isTheServerUp(){ - PORT="7779" - lsof -i |grep $PORT > /dev/null + lsof -i |grep $arkserverport > /dev/null result=$? return $result } @@ -123,7 +122,7 @@ doStart() { if isTheServerRunning; then echo "The server is already running" else - arkserveropts="TheIsland?SessionName=$sessioname?QueryPort=$arkqueryport?Port=$arkserverport?ServerPassword=$arkserverpass?ServerAdminPassword=$arkserverapass?listen" + arkserveropts="TheIsland?SessionName=$sessioname?QueryPort=$arkqueryport?ServerPassword=$arkserverpass?ServerAdminPassword=$arkserverapass?listen" thejob="$arkserverroot/$arkserverexec $arkserveropts" screen -dmS "$servicename" $thejob echo "$timestamp: start" >> "$logdir/arkserver.log" From 23ced6e2e2636cb3a2248d62a8e7dc073037d24e Mon Sep 17 00:00:00 2001 From: Sispheor Date: Sun, 21 Jun 2015 18:10:09 +0200 Subject: [PATCH 19/22] set 7778 as default port in configuration file --- tools/arkmanager.cfg | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/arkmanager.cfg b/tools/arkmanager.cfg index 8789e68..e807853 100644 --- a/tools/arkmanager.cfg +++ b/tools/arkmanager.cfg @@ -8,7 +8,7 @@ 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="7779" # ARK server port (default 7779) +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 9d50fda5a1b68733110a25e4bdb4f46fe3136ace Mon Sep 17 00:00:00 2001 From: Sispheor Date: Sun, 21 Jun 2015 18:33:43 +0200 Subject: [PATCH 20/22] less time to wait when we kill ther server --- tools/arkmanager | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/arkmanager b/tools/arkmanager index 0f75c6a..8e86ae8 100755 --- a/tools/arkmanager +++ b/tools/arkmanager @@ -137,7 +137,7 @@ doStop() { if isTheServerRunning; then echo "Stopping server..." screen -X -S "$servicename" -X stuff "^C" - sleep 30 + sleep 10 echo "$timestamp: stop" >> "$logdir/arkserver.log" tail -n 1 "$logdir/arkserver.log" else From e3d66e96ce86b2092efca58716b280b68dcf61c3 Mon Sep 17 00:00:00 2001 From: Sispheor Date: Sun, 21 Jun 2015 19:54:12 +0200 Subject: [PATCH 21/22] sysinit script done --- tools/arkdaemon | 40 +++++++++++++++++----------------------- 1 file changed, 17 insertions(+), 23 deletions(-) mode change 100644 => 100755 tools/arkdaemon diff --git a/tools/arkdaemon b/tools/arkdaemon old mode 100644 new mode 100755 index 5fb27d9..853c88e --- a/tools/arkdaemon +++ b/tools/arkdaemon @@ -9,21 +9,15 @@ # ### 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 # Global variables -source /etc/arkdaemon.cfg -source /home/${steamuser}/.arkmanager.cfg +source /etc/arkmanager/arkmanager.cfg -NAME=arkmanager_daemon -DESC="ARK manager daemon used to start the server and keep it updated" -PIDFILE="/var/run/${NAME}.pid" +NAME="ShooterGameServer" LOGFILE="${logdir}/${NAME}.log" -DAEMON="arkmanager" -START_OPTS="--pidfile ${PIDFILE} --user=${steamuser} ${DAEMON}" +DAEMON="/usr/bin/arkmanager" set -e @@ -33,7 +27,9 @@ test -x $DAEMON || exit 5 case "$1" in start) log_daemon_msg "Starting" "$NAME" - if start-stop-daemon -b --start --quiet --oknodo --pidfile $PIDFILE --exec $DAEMON ; then + sudo -u $steamcmd_user $DAEMON start + PID=`ps -ef | grep $NAME | grep -v grep | awk '{print $2}'` + if [ -n "$PID" ]; then log_end_msg 0 else log_end_msg 1 @@ -42,28 +38,26 @@ case "$1" in stop) log_daemon_msg "Stopping" "$NAME" - kill ${cat $PIDFILE} - echo "$NAME." - rm -f $PIDFILE + sudo -u $steamcmd_user $DAEMON stop + PID=`ps -ef | grep $NAME | grep -v grep | awk '{print $2}'` + if [ -n "$PID" ]; then + log_end_msg 1 + else + log_end_msg 0 + fi ;; - restart|force-reload) - $0 stop && sleep 2 && $0 start + restart) + sudo -u $steamcmd_user $DAEMON restart ;; 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 + sudo -u $steamcmd_user $DAEMON status ;; *) # For invalid arguments, print the usage message. - echo "Usage: $0 {start|stop|restart|status|force-reload}" + echo "Usage: $0 {start|stop|restart|status}" exit 2 ;; esac From 6e0d872b48839dbcc3f982c1d3f103f68d446326 Mon Sep 17 00:00:00 2001 From: Sispheor Date: Sun, 21 Jun 2015 21:02:09 +0200 Subject: [PATCH 22/22] automatic add to the startup on sysinit system --- tools/arkdaemon | 1 + tools/install.sh | 8 +++++++- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/tools/arkdaemon b/tools/arkdaemon index 853c88e..08b635a 100755 --- a/tools/arkdaemon +++ b/tools/arkdaemon @@ -1,3 +1,4 @@ +#!/bin/bash ### BEGIN INIT INFO # Provides: ARK manager deamon # Required-Start: networking diff --git a/tools/install.sh b/tools/install.sh index 1a02ac9..0cf076c 100644 --- a/tools/install.sh +++ b/tools/install.sh @@ -5,9 +5,15 @@ if [ ! -z $1 ]; then cp arkmanager /usr/bin/arkmanager chmod +x /usr/bin/arkmanager - # Copy arkdaemon to /etc/init.d and set permissions + # Copy arkdaemon to /etc/init.d ,set permissions and add it to boot cp arkdaemon /etc/init.d/arkdaemon chmod +x /etc/init.d/arkdaemon + # add to startup if the system use sysinit + if [ test -x /usr/sbin/update-rc.d ]; then + update-rc.d arkdaemon defaults + echo "Ark server will now start on boot, if you want to remove this feature run the following line" + echo "update-rc.d -f arkdaemon remove" + fi # Create a folder in /var/log to let Ark tools write its own log files mkdir -p /var/log/arktools