From 23706cae6ae6242060fa5c124eba5c00f7db6ea2 Mon Sep 17 00:00:00 2001 From: FezVrasta Date: Sun, 21 Jun 2015 14:53:37 +0200 Subject: [PATCH 01/62] install steamcmd if not already installed --- tools/arkmanager | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/tools/arkmanager b/tools/arkmanager index 1fabd9f..2c71c1b 100755 --- a/tools/arkmanager +++ b/tools/arkmanager @@ -150,9 +150,19 @@ doStop() { # install of ARK server # doInstall() { - if [ ! -d "$arkserverroot" ]; then - mkdir $arkserverroot + mkdir -p $arkserverroot + + # Check if steamcmd is installed, and if not, install it + if [ ! -e $steamcmdroot/$steamcmdexec ]; then + mkdir -p $steamcmdroot + cd /tmp + wget http://media.steampowered.com/installer/steamcmd_linux.tar.gz + tar -xvzf steamcmd_linux.tar.gz -C $steamcmdroot + cd $steamcmdroot + ./steamcmd.sh +quit + echo "SteamCMD was installed in $steamcmdroot" fi + cd $steamcmdroot # install the server ./$steamcmdexec +login anonymous +force_install_dir "$arkserverroot" +app_update $appid validate +quit From 6e0d872b48839dbcc3f982c1d3f103f68d446326 Mon Sep 17 00:00:00 2001 From: Sispheor Date: Sun, 21 Jun 2015 21:02:09 +0200 Subject: [PATCH 02/62] 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 From 90510534f7d20f75a8b509b86035bf3c0dbed5d5 Mon Sep 17 00:00:00 2001 From: Sispheor Date: Sun, 21 Jun 2015 23:24:28 +0200 Subject: [PATCH 03/62] fix test if file exist --- tools/install.sh | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/tools/install.sh b/tools/install.sh index 0cf076c..7918678 100644 --- a/tools/install.sh +++ b/tools/install.sh @@ -20,13 +20,13 @@ if [ ! -z $1 ]; then chown $1 /var/log/arktools # Copy arkmanager.cfg inside linux configuation folder if it doesn't already exists + mkdir -p /etc/arkmanager 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 + 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 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 + cp -n arkmanager.cfg /etc/arkmanager/arkmanager.cfg + chown $1 /etc/arkmanager/arkmanager.cfg fi else From 6dc4a46e17b1d5b04d16399f4265734ffd0750cf Mon Sep 17 00:00:00 2001 From: Sispheor Date: Sun, 21 Jun 2015 23:29:32 +0200 Subject: [PATCH 04/62] remove sudo, use use instead --- tools/arkdaemon | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/tools/arkdaemon b/tools/arkdaemon index 08b635a..caf8df1 100755 --- a/tools/arkdaemon +++ b/tools/arkdaemon @@ -28,7 +28,7 @@ test -x $DAEMON || exit 5 case "$1" in start) log_daemon_msg "Starting" "$NAME" - sudo -u $steamcmd_user $DAEMON start + su -s /bin/sh -c "$DAEMON start" $steamcmd_user PID=`ps -ef | grep $NAME | grep -v grep | awk '{print $2}'` if [ -n "$PID" ]; then log_end_msg 0 @@ -39,7 +39,7 @@ case "$1" in stop) log_daemon_msg "Stopping" "$NAME" - sudo -u $steamcmd_user $DAEMON stop + su -s /bin/sh -c "$DAEMON stop" $steamcmd_user PID=`ps -ef | grep $NAME | grep -v grep | awk '{print $2}'` if [ -n "$PID" ]; then log_end_msg 1 @@ -49,11 +49,11 @@ case "$1" in ;; restart) - sudo -u $steamcmd_user $DAEMON restart + su -s /bin/sh -c "$DAEMON restart" $steamcmd_user ;; status) - sudo -u $steamcmd_user $DAEMON status + su -s /bin/sh -c "$DAEMON status" $steamcmd_user ;; *) From 3af95eadf9d9d006a7aab36893b1ed67c5cf98ae Mon Sep 17 00:00:00 2001 From: Sispheor Date: Mon, 22 Jun 2015 00:44:21 +0200 Subject: [PATCH 05/62] remove screen because it doesn't allow to use the script at startup. --- README.md | 8 -------- tools/arkdaemon | 2 ++ tools/arkmanager | 18 +++++++++--------- 3 files changed, 11 insertions(+), 17 deletions(-) diff --git a/README.md b/README.md index dde2f6e..1af93be 100644 --- a/README.md +++ b/README.md @@ -9,14 +9,6 @@ https://developer.valvesoftware.com/wiki/SteamCMD#Linux We assume you have created the `steam` user to store steamcmd and your ARK server. ## Requirements -Use this command to install soft requirement on your system -``` -# 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 caf8df1..a4fae1f 100755 --- a/tools/arkdaemon +++ b/tools/arkdaemon @@ -29,6 +29,7 @@ case "$1" in start) log_daemon_msg "Starting" "$NAME" su -s /bin/sh -c "$DAEMON start" $steamcmd_user + sleep 5 PID=`ps -ef | grep $NAME | grep -v grep | awk '{print $2}'` if [ -n "$PID" ]; then log_end_msg 0 @@ -40,6 +41,7 @@ case "$1" in stop) log_daemon_msg "Stopping" "$NAME" su -s /bin/sh -c "$DAEMON stop" $steamcmd_user + sleep 5 PID=`ps -ef | grep $NAME | grep -v grep | awk '{print $2}'` if [ -n "$PID" ]; then log_end_msg 1 diff --git a/tools/arkmanager b/tools/arkmanager index 0f113a5..8d6727b 100755 --- a/tools/arkmanager +++ b/tools/arkmanager @@ -124,9 +124,9 @@ doStart() { else arkserveropts="TheIsland?SessionName=$sessioname?QueryPort=$arkqueryport?ServerPassword=$arkserverpass?ServerAdminPassword=$arkserverapass?listen" thejob="$arkserverroot/$arkserverexec $arkserveropts" - screen -dmS "$servicename" $thejob + # run the server in background + $thejob >/dev/null 2>&1 & echo "$timestamp: start" >> "$logdir/arkserver.log" - tail -n 1 "$logdir/arkserver.log" fi } @@ -136,10 +136,10 @@ doStart() { doStop() { if isTheServerRunning; then echo "Stopping server..." - screen -X -S "$servicename" -X stuff "^C" - sleep 10 - echo "$timestamp: stop" >> "$logdir/arkserver.log" - tail -n 1 "$logdir/arkserver.log" + # kill the server with the PID + PID=`ps -ef | grep "$arkserverroot/$arkserverexec" | grep -v grep | awk '{print $2}'` + kill -9 $PID + echo "$timestamp: stop" >> "$logdir/arkserver.log" else echo "The server is already stopped" fi @@ -150,10 +150,10 @@ doStop() { # doInstall() { mkdir -p $arkserverroot - + # Check if steamcmd is installed, and if not, install it if [ ! -e $steamcmdroot/$steamcmdexec ]; then - mkdir -p $steamcmdroot + mkdir -p $steamcmdroot cd /tmp wget http://media.steampowered.com/installer/steamcmd_linux.tar.gz tar -xvzf steamcmd_linux.tar.gz -C $steamcmdroot @@ -161,7 +161,7 @@ doInstall() { ./steamcmd.sh +quit echo "SteamCMD was installed in $steamcmdroot" fi - + cd $steamcmdroot # install the server ./$steamcmdexec +login anonymous +force_install_dir "$arkserverroot" +app_update $appid validate +quit From f91f9f145f6b5e2d2deceeab78991b5ebb2a8c60 Mon Sep 17 00:00:00 2001 From: Sispheor Date: Mon, 22 Jun 2015 19:55:57 +0200 Subject: [PATCH 06/62] remove send mail --- tools/arkmanager | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/tools/arkmanager b/tools/arkmanager index 8d6727b..e7d7bd4 100755 --- a/tools/arkmanager +++ b/tools/arkmanager @@ -139,7 +139,7 @@ doStop() { # kill the server with the PID PID=`ps -ef | grep "$arkserverroot/$arkserverexec" | grep -v grep | awk '{print $2}'` kill -9 $PID - echo "$timestamp: stop" >> "$logdir/arkserver.log" + echo "$timestamp: stop" >> "$logdir/arkserver.log" else echo "The server is already stopped" fi @@ -194,11 +194,7 @@ doUpdate() { # 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 + fi else echo "No update available" echo "$timestamp: No update needed." >> "$logdir/update.log" From 13b5719adeaae70892f9338be7d61b9dc8b49754 Mon Sep 17 00:00:00 2001 From: Sispheor Date: Mon, 22 Jun 2015 19:57:22 +0200 Subject: [PATCH 07/62] remove tail, arkdaemon show ok or fail message --- tools/arkmanager | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/tools/arkmanager b/tools/arkmanager index e7d7bd4..f3a4139 100755 --- a/tools/arkmanager +++ b/tools/arkmanager @@ -194,7 +194,7 @@ doUpdate() { # we restart the server only if it was started before the update if [ $serverWasAlive -eq 1 ]; then doStart - fi + fi else echo "No update available" echo "$timestamp: No update needed." >> "$logdir/update.log" @@ -246,13 +246,10 @@ 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" + echo "$timestamp: restart" >> "$logdir/arkserver.log" ;; install) doInstall From 621f007671bbede7ae71ad680e318f438abe5079 Mon Sep 17 00:00:00 2001 From: Sispheor Date: Mon, 22 Jun 2015 19:58:21 +0200 Subject: [PATCH 08/62] remove broadcast message feature. Waiting for RCON to do that properly --- README.md | 7 ------- tools/arkmanager | 12 +----------- 2 files changed, 1 insertion(+), 18 deletions(-) diff --git a/README.md b/README.md index 1af93be..dc41101 100644 --- a/README.md +++ b/README.md @@ -72,13 +72,6 @@ Get the status of the server. Show if the process is running, if the server is u #### 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 - -```sh -arkmanager broadcast "your message here" -``` - ## Credits Original author of arkmanager: LeXaT diff --git a/tools/arkmanager b/tools/arkmanager index f3a4139..bf2bd38 100755 --- a/tools/arkmanager +++ b/tools/arkmanager @@ -202,16 +202,6 @@ doUpdate() { fi; } -# -# Broadcast message to server -# -doInfo() { - if [ ! -z $1 ]; then - info=$1 - fi - screen -S "$servicename" -p 0 -X stuff "broadcast $info $(printf \\r)" -} - # # Print the status of the server (running? online? version?) # @@ -249,7 +239,7 @@ case "$1" in sleep 10 doStart echo "$timestamp: start" >> "$logdir/arkserver.log" - echo "$timestamp: restart" >> "$logdir/arkserver.log" + echo "$timestamp: restart" >> "$logdir/arkserver.log" ;; install) doInstall From 7b80d8b89c190d141e7cb1f5bd1138768c9d1522 Mon Sep 17 00:00:00 2001 From: Sispheor Date: Mon, 22 Jun 2015 21:44:12 +0200 Subject: [PATCH 09/62] fix install --- tools/arkmanager | 3 +-- tools/install.sh | 6 ++---- 2 files changed, 3 insertions(+), 6 deletions(-) diff --git a/tools/arkmanager b/tools/arkmanager index bf2bd38..0128e93 100755 --- a/tools/arkmanager +++ b/tools/arkmanager @@ -189,8 +189,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 doStart diff --git a/tools/install.sh b/tools/install.sh index 0de4d7b..24a34e7 100644 --- a/tools/install.sh +++ b/tools/install.sh @@ -9,7 +9,7 @@ if [ ! -z $1 ]; then 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 + if [ -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" @@ -21,9 +21,7 @@ if [ ! -z $1 ]; then # Copy arkmanager.cfg inside linux configuation folder if it doesn't already exists if [ -f /etc/arkmanager/arkmanager.cfg ]; then - mkdir -p /etc/arkmanager - if [ -f /etc/arkmanager/arkmanager.cfg ]; then - 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."; + 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 else cp -n arkmanager.cfg /etc/arkmanager/arkmanager.cfg From 23ebcaacd4e1a401589bac60029b582231aaaaee Mon Sep 17 00:00:00 2001 From: Ben Peddell Date: Mon, 22 Jun 2015 17:20:42 +1000 Subject: [PATCH 10/62] Use EXECPREFIX and INSTALL_ROOT when installing --- tools/install.sh | 26 ++++++++++++++------------ 1 file changed, 14 insertions(+), 12 deletions(-) diff --git a/tools/install.sh b/tools/install.sh index 7918678..cc25da8 100644 --- a/tools/install.sh +++ b/tools/install.sh @@ -1,32 +1,34 @@ #!/bin/bash -if [ ! -z $1 ]; then +EXECPREFIX="${EXECPREFIX:-/usr/local}" + +if [ ! -z "$1" ]; then # Copy arkmanager to /usr/bin and set permissions - cp arkmanager /usr/bin/arkmanager - chmod +x /usr/bin/arkmanager + cp arkmanager "${INSTALL_ROOT}${EXECPREFIX}/bin/arkmanager" + chmod +x "${INSTALL_ROOT}${EXECPREFIX}/bin/arkmanager" # 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 + cp arkdaemon "${INSTALL_ROOT}/etc/init.d/arkdaemon" + chmod +x "${INSTALL_ROOT}/etc/init.d/arkdaemon" # add to startup if the system use sysinit - if [ test -x /usr/sbin/update-rc.d ]; then + if [ -x /usr/sbin/update-rc.d -a -z "${INSTALL_ROOT}" ]; 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 - chown $1 /var/log/arktools + mkdir -p "${INSTALL_ROOT}/var/log/arktools" + chown "$1" "${INSTALL_ROOT}/var/log/arktools" # Copy arkmanager.cfg inside linux configuation folder if it doesn't already exists - mkdir -p /etc/arkmanager - if [ -f /etc/arkmanager/arkmanager.cfg ]; then + mkdir -p "${INSTALL_ROOT}/etc/arkmanager" + if [ -f "${INSTALL_ROOT}/etc/arkmanager/arkmanager.cfg" ]; then 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 else - cp -n arkmanager.cfg /etc/arkmanager/arkmanager.cfg - chown $1 /etc/arkmanager/arkmanager.cfg + cp -n arkmanager.cfg "${INSTALL_ROOT}/etc/arkmanager/arkmanager.cfg" + chown "$1" "${INSTALL_ROOT}/etc/arkmanager/arkmanager.cfg" fi else From dd61066cc4063593c91be125ed476c2b46fd9134 Mon Sep 17 00:00:00 2001 From: Ben Peddell Date: Mon, 22 Jun 2015 18:12:29 +1000 Subject: [PATCH 11/62] Quote paths to handle paths with spaces --- tools/arkmanager | 25 +++++++++++-------------- 1 file changed, 11 insertions(+), 14 deletions(-) diff --git a/tools/arkmanager b/tools/arkmanager index 8d6727b..3bc2c38 100755 --- a/tools/arkmanager +++ b/tools/arkmanager @@ -56,7 +56,7 @@ function checkForUpdate(){ # Set the new current version in a file # function setCurrentVersion(){ - cd $arkserverroot + cd "$arkserverroot" echo $bnumber > arkversion } @@ -79,7 +79,7 @@ function isUpdateNeeded(){ # Return the current version number # function getCurrentVersion(){ - cd $arkserverroot + cd "$arkserverroot" touch arkversion # If the file doesn't exist instver=`cat "arkversion"` return $instver @@ -123,9 +123,8 @@ doStart() { echo "The server is already running" else arkserveropts="TheIsland?SessionName=$sessioname?QueryPort=$arkqueryport?ServerPassword=$arkserverpass?ServerAdminPassword=$arkserverapass?listen" - thejob="$arkserverroot/$arkserverexec $arkserveropts" # run the server in background - $thejob >/dev/null 2>&1 & + nohup "$arkserverroot/$arkserverexec" "$arkserveropts" /dev/null 2>&1 & echo "$timestamp: start" >> "$logdir/arkserver.log" fi } @@ -149,20 +148,20 @@ doStop() { # install of ARK server # doInstall() { - mkdir -p $arkserverroot + mkdir -p "$arkserverroot" # Check if steamcmd is installed, and if not, install it - if [ ! -e $steamcmdroot/$steamcmdexec ]; then - mkdir -p $steamcmdroot + if [ ! -e "$steamcmdroot/$steamcmdexec" ]; then + mkdir -p "$steamcmdroot" cd /tmp wget http://media.steampowered.com/installer/steamcmd_linux.tar.gz - tar -xvzf steamcmd_linux.tar.gz -C $steamcmdroot - cd $steamcmdroot + tar -xvzf steamcmd_linux.tar.gz -C "$steamcmdroot" + cd "$steamcmdroot" ./steamcmd.sh +quit echo "SteamCMD was installed in $steamcmdroot" fi - cd $steamcmdroot + 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 @@ -174,7 +173,7 @@ doInstall() { # Stop the server, update it and then start it back. # doUpdate() { - cd $arkserverroot + cd "$arkserverroot" if isUpdateNeeded; then # check if the server was alive before the update so we can launch it back after the update @@ -183,11 +182,9 @@ doUpdate() { serverWasAlive=1 fi doStop - cd $steamcmdroot + 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" tail -n 1 "$logdir/arkserver.log" From b1c0d28f6aabf648a456c730a898fb2d66d05804 Mon Sep 17 00:00:00 2001 From: Ben Peddell Date: Mon, 22 Jun 2015 18:15:17 +1000 Subject: [PATCH 12/62] Import user config --- tools/arkmanager | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/tools/arkmanager b/tools/arkmanager index 3bc2c38..310006c 100755 --- a/tools/arkmanager +++ b/tools/arkmanager @@ -16,7 +16,13 @@ fi #--------------------- # Global variables -source /etc/arkmanager/arkmanager.cfg +if [ -f "/etc/arkmanager/arkmanager.cfg" ]; then + source /etc/arkmanager/arkmanager.cfg +fi + +if [ -f "${HOME}/.arkmanager.cfg" ]; then + source "${HOME}/.arkmanager.cfg" +fi # Local variables info="" From 78944b04f845b7ce45d5e6f06c43e6545768b0af Mon Sep 17 00:00:00 2001 From: Ben Peddell Date: Mon, 22 Jun 2015 18:29:16 +1000 Subject: [PATCH 13/62] Add custom server variables --- tools/arkmanager | 18 +++++++++++++++++- tools/arkmanager.cfg | 3 +++ 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/tools/arkmanager b/tools/arkmanager index 310006c..117c99b 100755 --- a/tools/arkmanager +++ b/tools/arkmanager @@ -128,7 +128,23 @@ doStart() { if isTheServerRunning; then echo "The server is already running" else - arkserveropts="TheIsland?SessionName=$sessioname?QueryPort=$arkqueryport?ServerPassword=$arkserverpass?ServerAdminPassword=$arkserverapass?listen" + ark_SessionName="${ark_SessionName:-${sessionname}}" + ark_QueryPort="${ark_QueryPort:-${arkqueryport}}" + ark_ServerPassword="${ark_ServerPassword:-${arkserverpass}}" + ark_ServerAdminPassword="${ark_ServerAdminPassword:-${arkserverapass}}" + arkserveropts="TheIsland" + + # bring in ark_... options + for varname in "${!ark_@}"; do + name="${varname#ark_}" + val="${!varname}" + + if [ -n "$val" ]; then + arkserveropts="${arkserveropts}?${name}=${val}" + fi + done + + arkserveropts="${arkserveropts}?listen" # run the server in background nohup "$arkserverroot/$arkserverexec" "$arkserveropts" /dev/null 2>&1 & echo "$timestamp: start" >> "$logdir/arkserver.log" diff --git a/tools/arkmanager.cfg b/tools/arkmanager.cfg index e807853..b3af50c 100644 --- a/tools/arkmanager.cfg +++ b/tools/arkmanager.cfg @@ -12,6 +12,9 @@ arkserverport="7778" # ARK server arkserverpass="SERVERPASSWORD" # ARK server password, empty: no password required to login arkserverapass="ADMINPASSWORD" # ARK server admin password, KEEP IT SAFE! +# other options - use ark_= +ark_MaxPlayers="70" + # config Service 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) From e15becbc3012524789118a537631be0862561d19 Mon Sep 17 00:00:00 2001 From: Ben Peddell Date: Mon, 22 Jun 2015 18:30:35 +1000 Subject: [PATCH 14/62] Add server port to server variables --- tools/arkmanager | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/tools/arkmanager b/tools/arkmanager index 117c99b..3c1facf 100755 --- a/tools/arkmanager +++ b/tools/arkmanager @@ -129,6 +129,7 @@ doStart() { echo "The server is already running" else ark_SessionName="${ark_SessionName:-${sessionname}}" + ark_Port="${ark_Port:-${arkserverport}}" ark_QueryPort="${ark_QueryPort:-${arkqueryport}}" ark_ServerPassword="${ark_ServerPassword:-${arkserverpass}}" ark_ServerAdminPassword="${ark_ServerAdminPassword:-${arkserverapass}}" @@ -139,6 +140,13 @@ doStart() { name="${varname#ark_}" val="${!varname}" + # Port is actually one higher than specified + # i.e. specifying port 7777 will have the server + # use port 7778 + if [ "$name" == "Port" ]; then + (( val = val - 1 )) + fi + if [ -n "$val" ]; then arkserveropts="${arkserveropts}?${name}=${val}" fi From cbf3251b5d74bbe4432642b65068bd38de41ffef Mon Sep 17 00:00:00 2001 From: FezVrasta Date: Tue, 23 Jun 2015 10:26:58 +0200 Subject: [PATCH 15/62] added contributing --- CONTRIBUTING.md | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 CONTRIBUTING.md diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 0000000..7faa9c4 --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,11 @@ +# Contribute to ARK Server Tools + +This is an open source project, so feel free to fork it, improve it and send pull requests! + +## Keep your fork updated + +When you fork our repository and your version gets outdated, please, update it using `git pull --rebase`, in this way you will not create any additional useless commit. + +## Got an idea? + +If you have a nice idea you'd like to add to this project, please, first open a new issue describing your idea, so everybody can contribute to it and you'll be sure that nobody is working on the same thing. \ No newline at end of file From b3aa2a57222c24be2282142fb645107503fa3713 Mon Sep 17 00:00:00 2001 From: FezVrasta Date: Tue, 23 Jun 2015 10:47:37 +0200 Subject: [PATCH 16/62] Revert commit 23706cae6ae6242060fa5c124eba5c00f7db6ea2 --- tools/arkmanager | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/tools/arkmanager b/tools/arkmanager index 0128e93..5eef230 100755 --- a/tools/arkmanager +++ b/tools/arkmanager @@ -151,17 +151,6 @@ doStop() { doInstall() { mkdir -p $arkserverroot - # Check if steamcmd is installed, and if not, install it - if [ ! -e $steamcmdroot/$steamcmdexec ]; then - mkdir -p $steamcmdroot - cd /tmp - wget http://media.steampowered.com/installer/steamcmd_linux.tar.gz - tar -xvzf steamcmd_linux.tar.gz -C $steamcmdroot - cd $steamcmdroot - ./steamcmd.sh +quit - echo "SteamCMD was installed in $steamcmdroot" - fi - cd $steamcmdroot # install the server ./$steamcmdexec +login anonymous +force_install_dir "$arkserverroot" +app_update $appid validate +quit From f13091a6748624c879d74c4c210bf36baa9ea44b Mon Sep 17 00:00:00 2001 From: FezVrasta Date: Tue, 23 Jun 2015 11:22:32 +0200 Subject: [PATCH 17/62] support paths with spaces --- tools/arkmanager | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/tools/arkmanager b/tools/arkmanager index 5eef230..4967dec 100755 --- a/tools/arkmanager +++ b/tools/arkmanager @@ -56,7 +56,7 @@ function checkForUpdate(){ # Set the new current version in a file # function setCurrentVersion(){ - cd $arkserverroot + cd "$arkserverroot" echo $bnumber > arkversion } @@ -79,7 +79,7 @@ function isUpdateNeeded(){ # Return the current version number # function getCurrentVersion(){ - cd $arkserverroot + cd "$arkserverroot" touch arkversion # If the file doesn't exist instver=`cat "arkversion"` return $instver @@ -151,7 +151,7 @@ doStop() { doInstall() { mkdir -p $arkserverroot - cd $steamcmdroot + 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 @@ -163,7 +163,7 @@ doInstall() { # Stop the server, update it and then start it back. # doUpdate() { - cd $arkserverroot + cd "$arkserverroot" if isUpdateNeeded; then # check if the server was alive before the update so we can launch it back after the update @@ -172,11 +172,11 @@ doUpdate() { serverWasAlive=1 fi doStop - cd $steamcmdroot + cd "$steamcmdroot" ./$steamcmdexec +login anonymous +force_install_dir "$arkserverroot" +app_update $appid +quit - cd $logdir + cd "$logdir" echo "$bnumber" > "$arkserverroot/arkversion" - cd $steamcmdroot + cd "$steamcmdroot" echo "$timestamp: update to $bnumber complete" >> "$logdir/update.log" # we restart the server only if it was started before the update From 49103bd32c4739042548fdee5c2349df55e9c69f Mon Sep 17 00:00:00 2001 From: FezVrasta Date: Tue, 23 Jun 2015 11:36:19 +0200 Subject: [PATCH 18/62] rename function to make it clearer --- tools/arkmanager | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/tools/arkmanager b/tools/arkmanager index 169dd54..d0c2bba 100755 --- a/tools/arkmanager +++ b/tools/arkmanager @@ -111,10 +111,9 @@ function isTheServerRunning(){ } # -# 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 +# Check if the server is down and not visible in steam server list # -function isTheServerUp(){ +function isTheServerDown(){ lsof -i |grep $arkserverport > /dev/null result=$? return $result @@ -227,10 +226,10 @@ printStatus(){ echo -e "$NORMAL" "Server running:" "$RED" "No" fi - if isTheServerUp ;then - echo -e "$NORMAL" "Server online:" "$GREEN" " Yes" - else + if isTheServerDown ;then echo -e "$NORMAL" "Server online:" "$RED" " No" + else + echo -e "$NORMAL" "Server online:" "$GREEN" " Yes" fi getCurrentVersion echo -e "$NORMAL" "Server version:" "$GREEN" $instver From 8d9bbadf5bda42767ed2e6a7082471cce198bdee Mon Sep 17 00:00:00 2001 From: FezVrasta Date: Tue, 23 Jun 2015 11:40:55 +0200 Subject: [PATCH 19/62] arkdaemon renamed to arkmanager, so it follows the convention of daemons with same name of their main script --- README.md | 2 +- tools/install.sh | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index dc41101..5204578 100644 --- a/README.md +++ b/README.md @@ -36,7 +36,7 @@ curl -s https://raw.githubusercontent.com/FezVrasta/ark-server-tools/master/neti 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` script and its daemon to the proper directories and will create an empty log directory in `/var/log` for ARK Server Tools. ## Configure ARK Server diff --git a/tools/install.sh b/tools/install.sh index 47c1c73..5450eb6 100644 --- a/tools/install.sh +++ b/tools/install.sh @@ -7,14 +7,14 @@ if [ ! -z "$1" ]; then cp arkmanager "${INSTALL_ROOT}${EXECPREFIX}/bin/arkmanager" chmod +x "${INSTALL_ROOT}${EXECPREFIX}/bin/arkmanager" - # Copy arkdaemon to /etc/init.d ,set permissions and add it to boot - cp arkdaemon "${INSTALL_ROOT}/etc/init.d/arkdaemon" - chmod +x "${INSTALL_ROOT}/etc/init.d/arkdaemon" + # Copy arkdaemon to /etc/init.d/arkmanager ,set permissions and add it to boot + cp arkdaemon "${INSTALL_ROOT}/etc/init.d/arkmanager" + chmod +x "${INSTALL_ROOT}/etc/init.d/arkmanager" # add to startup if the system use sysinit if [ -x /usr/sbin/update-rc.d -a -z "${INSTALL_ROOT}" ]; then - update-rc.d arkdaemon defaults + update-rc.d arkmanager 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" + echo "update-rc.d -f arkmanager remove" fi # Create a folder in /var/log to let Ark tools write its own log files From d7da82e47b52fd729e6672aa2d87d369cdc86c53 Mon Sep 17 00:00:00 2001 From: FezVrasta Date: Tue, 23 Jun 2015 13:47:36 +0200 Subject: [PATCH 20/62] escape sessionname special chars --- tools/arkmanager | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/arkmanager b/tools/arkmanager index d0c2bba..b3856a1 100755 --- a/tools/arkmanager +++ b/tools/arkmanager @@ -127,7 +127,7 @@ doStart() { if isTheServerRunning; then echo "The server is already running" else - ark_SessionName="${ark_SessionName:-${sessionname}}" + ark_SessionName=`printf "%q" "${ark_SessionName:-${sessionname}}"` # Escape SessionName to prevent conflicts in the startup sequence ark_Port="${ark_Port:-${arkserverport}}" ark_QueryPort="${ark_QueryPort:-${arkqueryport}}" ark_ServerPassword="${ark_ServerPassword:-${arkserverpass}}" From ab5efe67d83cbfdeb607e0a0fcfdc0213ed591ed Mon Sep 17 00:00:00 2001 From: FezVrasta Date: Tue, 23 Jun 2015 14:32:03 +0200 Subject: [PATCH 21/62] added iptables informations --- README.md | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 5204578..1b7e270 100644 --- a/README.md +++ b/README.md @@ -10,6 +10,8 @@ We assume you have created the `steam` user to store steamcmd and your ARK serve ## Requirements +### Increase max open files + Edit /etc/sysctl.conf and set: ``` fs.file-max=100000 @@ -26,6 +28,13 @@ session required pam_limits.so After these edits, you'll need to restart your bash session or reconnect to your SSH shell to make the changes effective. +### Open firewall ports + +```sh +iptables -I INPUT -p udp --dport 27016 -j ACCEPT +iptables -I INPUT -p udp --dport 7778 -j ACCEPT +``` + ## Install ARK Server Tools To install ARK Server Tools run this command: @@ -36,7 +45,7 @@ curl -s https://raw.githubusercontent.com/FezVrasta/ark-server-tools/master/neti NB: You may want to change the `bash -s` parameter to fit your steam user if different from `steam`. -This will copy the `arkmanager` script and its daemon to the proper directories and will create an empty log directory in `/var/log` for ARK Server Tools. +This will copy the `arkmanager` script and its daemon to the proper directories and will create an empty log directory in `/var/log` for ARK Server Tools. ## Configure ARK Server From e318cf6ea97abbc7d147fe0680e8358e060957a5 Mon Sep 17 00:00:00 2001 From: FezVrasta Date: Tue, 23 Jun 2015 15:08:16 +0200 Subject: [PATCH 22/62] added checkupdate to hint message --- tools/arkmanager | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/arkmanager b/tools/arkmanager index b3856a1..29079a3 100755 --- a/tools/arkmanager +++ b/tools/arkmanager @@ -272,6 +272,6 @@ case "$1" in printStatus ;; *) - echo "use arkmanager " + echo "use arkmanager " ;; esac From 7ce311832234e33788635b0d0df1fd3030970ff2 Mon Sep 17 00:00:00 2001 From: Ben Peddell Date: Tue, 23 Jun 2015 22:58:25 +1000 Subject: [PATCH 23/62] Move LSB init script to separate directory --- tools/install.sh | 18 ++++++++++-------- tools/{ => lsb}/arkdaemon | 0 2 files changed, 10 insertions(+), 8 deletions(-) rename tools/{ => lsb}/arkdaemon (100%) diff --git a/tools/install.sh b/tools/install.sh index 5450eb6..26db1f6 100644 --- a/tools/install.sh +++ b/tools/install.sh @@ -7,14 +7,16 @@ if [ ! -z "$1" ]; then cp arkmanager "${INSTALL_ROOT}${EXECPREFIX}/bin/arkmanager" chmod +x "${INSTALL_ROOT}${EXECPREFIX}/bin/arkmanager" - # Copy arkdaemon to /etc/init.d/arkmanager ,set permissions and add it to boot - cp arkdaemon "${INSTALL_ROOT}/etc/init.d/arkmanager" - chmod +x "${INSTALL_ROOT}/etc/init.d/arkmanager" - # add to startup if the system use sysinit - if [ -x /usr/sbin/update-rc.d -a -z "${INSTALL_ROOT}" ]; then - update-rc.d arkmanager 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 arkmanager remove" + # Copy arkdaemon to /etc/init.d ,set permissions and add it to boot + if [ -f /lib/lsb/init-functions ]; then + cp lsb/arkdaemon "${INSTALL_ROOT}/etc/init.d/arkmanager" + chmod +x "${INSTALL_ROOT}/etc/init.d/arkmanager" + # add to startup if the system use sysinit + if [ -x /usr/sbin/update-rc.d -a -z "${INSTALL_ROOT}" ]; then + update-rc.d arkmanager 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 arkmanager remove" + fi fi # Create a folder in /var/log to let Ark tools write its own log files diff --git a/tools/arkdaemon b/tools/lsb/arkdaemon similarity index 100% rename from tools/arkdaemon rename to tools/lsb/arkdaemon From 607a3096be9159dc28ea29d15887b657c9812fc4 Mon Sep 17 00:00:00 2001 From: Ben Peddell Date: Tue, 23 Jun 2015 23:01:29 +1000 Subject: [PATCH 24/62] Modify DAEMON variable according to EXECPREFIX --- tools/install.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/tools/install.sh b/tools/install.sh index 26db1f6..e955f91 100644 --- a/tools/install.sh +++ b/tools/install.sh @@ -11,6 +11,7 @@ if [ ! -z "$1" ]; then if [ -f /lib/lsb/init-functions ]; then cp lsb/arkdaemon "${INSTALL_ROOT}/etc/init.d/arkmanager" chmod +x "${INSTALL_ROOT}/etc/init.d/arkmanager" + sed -i "s|^DAEMON=\"/usr|DAEMON=\"${EXECPREFIX}|" "${INSTALL_ROOT}/etc/init.d/arkmanager" # add to startup if the system use sysinit if [ -x /usr/sbin/update-rc.d -a -z "${INSTALL_ROOT}" ]; then update-rc.d arkmanager defaults From d44b9e9f67c7583b6d51e4a21c6065183ef05ada Mon Sep 17 00:00:00 2001 From: Ben Peddell Date: Tue, 23 Jun 2015 23:08:52 +1000 Subject: [PATCH 25/62] Add RedHat SysV init script --- tools/install.sh | 9 +++++ tools/redhat/arkdaemon | 84 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 93 insertions(+) create mode 100755 tools/redhat/arkdaemon diff --git a/tools/install.sh b/tools/install.sh index e955f91..4c972d9 100644 --- a/tools/install.sh +++ b/tools/install.sh @@ -18,6 +18,15 @@ if [ ! -z "$1" ]; then echo "Ark server will now start on boot, if you want to remove this feature run the following line" echo "update-rc.d -f arkmanager remove" fi + elif [ -f /etc/rc.d/init.d/functions ]; then + cp redhat/arkdaemon "${INSTALL_ROOT}/etc/rc.d/init.d/arkmanager" + chmod +x "${INSTALL_ROOT}/etc/rc.d/init.d/arkmanager" + sed -i "s@^DAEMON=\"/usr/bin@DAEMON=\"${EXECPREFIX}@" "${INSTALL_ROOT}/etc/rc.d/init.d/arkmanager" + if [ -x /sbin/chkconfig -a -z "${INSTALL_ROOT}" ]; then + chkconfig --add arkmanager + echo "Ark server will now start on boot, if you want to remove this feature run the following line" + echo "chkconfig arkmanager off" + fi fi # Create a folder in /var/log to let Ark tools write its own log files diff --git a/tools/redhat/arkdaemon b/tools/redhat/arkdaemon new file mode 100755 index 0000000..be4be54 --- /dev/null +++ b/tools/redhat/arkdaemon @@ -0,0 +1,84 @@ +#!/bin/bash +# +# /etc/rc.d/init.d/arkdaemon +# +# ARK manager daemon +# +# chkconfig: 2345 80 20 +# description: ARK manager daemon used to start the server and keep it updated +# processname: ShooterGameServer +# config: /etc/arkmanager/arkmanager.cfg + +### 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: ARK manager daemon used to start the server and keep it updated +# +### END INIT INFO + +# Using the lsb functions to perform the operations. +. /etc/rc.d/init.d/functions + +# Global variables +source /etc/arkmanager/arkmanager.cfg + +NAME="ShooterGameServer" +LOGFILE="${logdir}/${NAME}.log" +DAEMON="/usr/bin/arkmanager" + +set -e + +# If the daemon is not there, then exit. +test -x $DAEMON || exit 5 + +case "$1" in + start) + echo -n "Starting $NAME: " + su -s /bin/sh -c "$DAEMON start" $steamcmd_user + sleep 5 + PID=`ps -ef | grep $NAME | grep -v grep | awk '{print $2}'` + if [ -n "$PID" ]; then + touch /var/lock/subsys/arkdaemon + echo "OK" + exit 0 + else + echo "Failed" + exit 1 + fi + ;; + + stop) + echo -n "Stopping $NAME: " + su -s /bin/sh -c "$DAEMON stop" $steamcmd_user + sleep 5 + PID=`ps -ef | grep $NAME | grep -v grep | awk '{print $2}'` + if [ -n "$PID" ]; then + echo "Failed" + exit 1 + else + echo "OK" + rm -f /var/lock/subsys/arkdaemon + exit 0 + fi + ;; + + restart) + su -s /bin/sh -c "$DAEMON restart" $steamcmd_user + exit 0 + ;; + + status) + su -s /bin/sh -c "$DAEMON status" $steamcmd_user + exit 0 + ;; + + *) + # For invalid arguments, print the usage message. + echo "Usage: $0 {start|stop|restart|status}" + exit 1 + ;; +esac From a891e71e753dfb032d6bd84b8efacc4b8083f3aa Mon Sep 17 00:00:00 2001 From: Ben Peddell Date: Tue, 23 Jun 2015 23:15:28 +1000 Subject: [PATCH 26/62] Add OpenRC init script --- tools/install.sh | 9 +++++++++ tools/openrc/arkdaemon | 38 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 47 insertions(+) create mode 100644 tools/openrc/arkdaemon diff --git a/tools/install.sh b/tools/install.sh index 4c972d9..ec1f5ea 100644 --- a/tools/install.sh +++ b/tools/install.sh @@ -27,6 +27,15 @@ if [ ! -z "$1" ]; then echo "Ark server will now start on boot, if you want to remove this feature run the following line" echo "chkconfig arkmanager off" fi + elif [ -f /sbin/runscript ]; then + cp openrc/arkdaemon "${INSTALL_ROOT}/etc/init.d/arkmanager" + chmod +x "${INSTALL_ROOT}/etc/init.d/arkmanager" + sed -i "s@^DAEMON=\"/usr/bin@DAEMON=\"${EXECPREFIX}@" "${INSTALL_ROOT}/etc/init.d/arkmanager" + if [ -x /sbin/rc-update -a -z "${INSTALL_ROOT}" ]; then + rc-update add arkmanager default + echo "Ark server will now start on boot, if you want to remove this feature run the following line" + echo "rc-update del arkmanager default" + fi fi # Create a folder in /var/log to let Ark tools write its own log files diff --git a/tools/openrc/arkdaemon b/tools/openrc/arkdaemon new file mode 100644 index 0000000..7104607 --- /dev/null +++ b/tools/openrc/arkdaemon @@ -0,0 +1,38 @@ +#!/sbin/runscript +# Short-Description: ARK manager deamon +# Description: ARK manager daemon used to start the server and keep it updated + +source /etc/arkmanager/arkmanager.cfg + +NAME="ShooterGameServer" +LOGFILE="${logdir}/${NAME}.log" +DAEMON="/usr/bin/arkmanager" + +depend(){ + require net +} + +start(){ + ebegin "Starting ARK manager daemon" + su -s /bin/sh -c "$DAEMON start" $steamcmd_user + sleep 5 + PID=`ps -ef | grep $NAME | grep -v grep | awk '{print $2}'` + if [ -n "$PID" ]; then + eend 0 + else + eend 1 + fi +} + +stop(){ + ebegin "Stopping ARK manager daemon" + su -s /bin/sh -c "$DAEMON start" $steamcmd_user + sleep 5 + PID=`ps -ef | grep $NAME | grep -v grep | awk '{print $2}'` + if [ -n "$PID" ]; then + eend 0 + else + eend 1 + fi +} + From 8582efc4bece5fb6330d71cfec8dc6a7f255e610 Mon Sep 17 00:00:00 2001 From: FezVrasta Date: Tue, 23 Jun 2015 18:35:38 +0200 Subject: [PATCH 27/62] improved checkupdates output --- tools/arkmanager | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/tools/arkmanager b/tools/arkmanager index 29079a3..eddb2b0 100755 --- a/tools/arkmanager +++ b/tools/arkmanager @@ -49,12 +49,14 @@ function testfunction(){ # 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" + echo -e "Current version:" "$RED" $instver "$NORMAL" + echo -e "Available version:" "$GREEN" $bnumber "$NORMAL" + echo -e "Your server needs to be restarted in order to receive the latest update." + echo -e "Run \"arkmanager update\" to do so" else - echo "No update available" + echo -e "Current version:" "$GREEN" $instver "$NORMAL" + echo -e "Available version:" "$GREEN" $bnumber "$NORMAL" + echo "Your server is up to date!" fi } From b94be728586474a4887ef7888520d0114d9445c8 Mon Sep 17 00:00:00 2001 From: FezVrasta Date: Tue, 23 Jun 2015 23:00:38 +0200 Subject: [PATCH 28/62] fixed format of checkupdate output --- tools/arkmanager | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/tools/arkmanager b/tools/arkmanager index eddb2b0..90c2d9d 100755 --- a/tools/arkmanager +++ b/tools/arkmanager @@ -223,19 +223,18 @@ doUpdate() { # printStatus(){ if isTheServerRunning ;then - echo -e "$NORMAL" "Server running:" "$GREEN" "Yes" + echo -e "$NORMAL" "Server running:" "$GREEN" "Yes" "$NORMAL" else - echo -e "$NORMAL" "Server running:" "$RED" "No" + echo -e "$NORMAL" "Server running:" "$RED" "No" "$NORMAL" fi if isTheServerDown ;then - echo -e "$NORMAL" "Server online:" "$RED" " No" + echo -e "$NORMAL" "Server online:" "$RED" " No" "$NORMAL" else - echo -e "$NORMAL" "Server online:" "$GREEN" " Yes" + echo -e "$NORMAL" "Server online:" "$GREEN" " Yes" "$NORMAL" fi getCurrentVersion - echo -e "$NORMAL" "Server version:" "$GREEN" $instver - echo -e "$NORMAL" + echo -e "$NORMAL" "Server version:" "$GREEN" $instver "$NORMAL" } From f9c97a2bd2e2de4295bdee07566ed71659bb658e Mon Sep 17 00:00:00 2001 From: FezVrasta Date: Tue, 23 Jun 2015 23:26:32 +0200 Subject: [PATCH 29/62] improved help messages --- tools/arkmanager | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/tools/arkmanager b/tools/arkmanager index 90c2d9d..17420f0 100755 --- a/tools/arkmanager +++ b/tools/arkmanager @@ -272,7 +272,20 @@ case "$1" in status) printStatus ;; + -h|--help) + echo -e "Usage: arkmanager [OPTION]\n" + echo "Option Description" + echo "start Starts the server" + echo "stop Stops the server" + echo "restart Stops the server and then starts it" + echo "install Install the ARK server files from steamcmd" + echo "update Check for a new ARK server version, if needed, stops the server, updates it, and starts it again" + echo "checkupdate Check for a new ARK server version" + echo "boradcast PLACEHOLDER, not supported yet" + echo "status Returns the status of the current ARK server instance" + ;; *) - echo "use arkmanager " + echo "arkmanager: no command specified" + echo "Try 'arkmanager -h' or 'arkmanager --help' for more information." ;; esac From 911ec781b781bffac51549f1ddb35a9a8de8181a Mon Sep 17 00:00:00 2001 From: FezVrasta Date: Tue, 23 Jun 2015 23:38:06 +0200 Subject: [PATCH 30/62] improved outputs --- tools/arkmanager | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/tools/arkmanager b/tools/arkmanager index 17420f0..aa94592 100755 --- a/tools/arkmanager +++ b/tools/arkmanager @@ -49,11 +49,13 @@ function testfunction(){ # function checkForUpdate(){ if isUpdateNeeded; then + tput rc; tput ed; echo -e "Current version:" "$RED" $instver "$NORMAL" echo -e "Available version:" "$GREEN" $bnumber "$NORMAL" echo -e "Your server needs to be restarted in order to receive the latest update." echo -e "Run \"arkmanager update\" to do so" else + tput rc; tput ed; echo -e "Current version:" "$GREEN" $instver "$NORMAL" echo -e "Available version:" "$GREEN" $bnumber "$NORMAL" echo "Your server is up to date!" @@ -165,10 +167,13 @@ doStart() { # doStop() { if isTheServerRunning; then + tput sc echo "Stopping server..." # kill the server with the PID PID=`ps -ef | grep "$arkserverroot/$arkserverexec" | grep -v grep | awk '{print $2}'` kill -9 $PID + + tput rc; tput ed; echo "$timestamp: stop" >> "$logdir/arkserver.log" else echo "The server is already stopped" @@ -264,6 +269,8 @@ case "$1" in #testfunction ;; checkupdate) + tput sc + echo "Querying Steam database for latest version..." checkForUpdate ;; broadcast) From 69e6c8e42172e1ed5ac361acfa7627fb2e4bb988 Mon Sep 17 00:00:00 2001 From: FezVrasta Date: Tue, 23 Jun 2015 23:42:54 +0200 Subject: [PATCH 31/62] revert printf escape --- tools/arkmanager | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/arkmanager b/tools/arkmanager index aa94592..a73ca39 100755 --- a/tools/arkmanager +++ b/tools/arkmanager @@ -131,7 +131,7 @@ doStart() { if isTheServerRunning; then echo "The server is already running" else - ark_SessionName=`printf "%q" "${ark_SessionName:-${sessionname}}"` # Escape SessionName to prevent conflicts in the startup sequence + ark_SessionName="${ark_SessionName:-${sessionname}}" ark_Port="${ark_Port:-${arkserverport}}" ark_QueryPort="${ark_QueryPort:-${arkqueryport}}" ark_ServerPassword="${ark_ServerPassword:-${arkserverpass}}" From 2366c21fd563c197dbad42d764af6b3faf3abb8f Mon Sep 17 00:00:00 2001 From: FezVrasta Date: Tue, 23 Jun 2015 23:51:59 +0200 Subject: [PATCH 32/62] improved output of update command --- tools/arkmanager | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/tools/arkmanager b/tools/arkmanager index a73ca39..7520d41 100755 --- a/tools/arkmanager +++ b/tools/arkmanager @@ -217,9 +217,8 @@ doUpdate() { doStart fi else - echo "No update available" - echo "$timestamp: No update needed." >> "$logdir/update.log" - tail -n 1 "$logdir/update.log" + echo "Your server is already up to date! The most recent version is ${bnumber}." + echo "$timestamp: No update needed." >> "$logdir/update.log" fi; } From 362fa3a3c5bd507ee7610e515d3d91434390931d Mon Sep 17 00:00:00 2001 From: FezVrasta Date: Wed, 24 Jun 2015 12:01:37 +0200 Subject: [PATCH 33/62] standardize server options, now they work all in the same way --- tools/arkmanager | 9 ++------- tools/arkmanager.cfg | 17 ++++++++++------- 2 files changed, 12 insertions(+), 14 deletions(-) diff --git a/tools/arkmanager b/tools/arkmanager index 7520d41..2f4b7a6 100755 --- a/tools/arkmanager +++ b/tools/arkmanager @@ -118,7 +118,7 @@ function isTheServerRunning(){ # Check if the server is down and not visible in steam server list # function isTheServerDown(){ - lsof -i |grep $arkserverport > /dev/null + lsof -i |grep $ark_Port > /dev/null result=$? return $result } @@ -131,12 +131,7 @@ doStart() { if isTheServerRunning; then echo "The server is already running" else - ark_SessionName="${ark_SessionName:-${sessionname}}" - ark_Port="${ark_Port:-${arkserverport}}" - ark_QueryPort="${ark_QueryPort:-${arkqueryport}}" - ark_ServerPassword="${ark_ServerPassword:-${arkserverpass}}" - ark_ServerAdminPassword="${ark_ServerAdminPassword:-${arkserverapass}}" - arkserveropts="TheIsland" + arkserveropts=$serverMap # bring in ark_... options for varname in "${!ark_@}"; do diff --git a/tools/arkmanager.cfg b/tools/arkmanager.cfg index b3af50c..b0571d1 100644 --- a/tools/arkmanager.cfg +++ b/tools/arkmanager.cfg @@ -3,16 +3,19 @@ steamcmdroot="/home/steam/steamcmd" # path of yo steamcmdexec="steamcmd.sh" # name of steamcmd executable steamcmd_user="steam" # name of the system user who own steamcmd folder -# config Server -sessioname=YourLinuxSessionName +# config environment 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) -arkserverpass="SERVERPASSWORD" # ARK server password, empty: no password required to login -arkserverapass="ADMINPASSWORD" # ARK server admin password, KEEP IT SAFE! -# other options - use ark_= +# ARK server options - use ark_= +# comment out these values if you want to define them +# inside your GameUserSettings.ini file +serverMap="TheIsland" # server map (default TheIsland) +ark_SessionName="ARK Server Tools" # if your session name needs special characters please use the .ini instead +ark_Port="7778" # ARK server port (default 7778) +ark_QueryPort="27016" # ARK query port (default 27016) +ark_ServerPassword="" # ARK server password, empty: no password required to login +ark_ServerAdminPassword="keyboardcat" # ARK server admin password, KEEP IT SAFE! ark_MaxPlayers="70" # config Service From b9b157c7e50fe85b722cda0f500d28ebf38d78da Mon Sep 17 00:00:00 2001 From: FezVrasta Date: Wed, 24 Jun 2015 12:13:41 +0200 Subject: [PATCH 34/62] fixed output spaces --- tools/arkmanager | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/tools/arkmanager b/tools/arkmanager index 2f4b7a6..56631fd 100755 --- a/tools/arkmanager +++ b/tools/arkmanager @@ -222,18 +222,18 @@ doUpdate() { # printStatus(){ if isTheServerRunning ;then - echo -e "$NORMAL" "Server running:" "$GREEN" "Yes" "$NORMAL" + echo -e "$NORMAL" "Server running: " "$GREEN" "Yes" "$NORMAL" else - echo -e "$NORMAL" "Server running:" "$RED" "No" "$NORMAL" + echo -e "$NORMAL" "Server running: " "$RED" "No" "$NORMAL" fi if isTheServerDown ;then - echo -e "$NORMAL" "Server online:" "$RED" " No" "$NORMAL" + echo -e "$NORMAL" "Server online: " "$RED" "No" "$NORMAL" else - echo -e "$NORMAL" "Server online:" "$GREEN" " Yes" "$NORMAL" + echo -e "$NORMAL" "Server online: " "$GREEN" "Yes" "$NORMAL" fi getCurrentVersion - echo -e "$NORMAL" "Server version:" "$GREEN" $instver "$NORMAL" + echo -e "$NORMAL" "Server version: " "$GREEN" $instver "$NORMAL" } From eabb3412b2bae3d49f6527fad2d69f9209c832d5 Mon Sep 17 00:00:00 2001 From: FezVrasta Date: Wed, 24 Jun 2015 12:22:59 +0200 Subject: [PATCH 35/62] improved configuration section of readme --- README.md | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 1b7e270..440cbc5 100644 --- a/README.md +++ b/README.md @@ -47,9 +47,24 @@ NB: You may want to change the `bash -s` parameter to fit your steam user if dif This will copy the `arkmanager` script and its daemon to the proper directories and will create an empty log directory in `/var/log` for ARK Server Tools. -## Configure ARK Server +## Configuration -All the needed variables are stored in the /etc/arkmanager/arkmanager.cfg configuration file change them following the comments. +Stored in `/etc/arkmanager/arkmanager.cfg` you can find the variables needed to start the server, like the port numbers, the system environment variables and so on. + +Also, in this file, you can specify any parameter you want to add to the startup command of ARK server. +These parameters must be prefixed by the `ark_` string, some example could be: + +```sh +ark_SessionName="My ARK server" +ark_MaxPlayers=50 +ark_ServerPVE=False +ark_DifficultyOffset=1 +``` + +Your session name may contain special characters (eg. `!![EU]!! Aw&some ARK`) which could break the startup command. +In this case you may want to comment out the `ark_SessionName` variable and define it inside your **GameUserSettings.ini** file. + +You can override or add variables for a specific system user creating a file called `.arkmanager.cfg` in the home directory of the system user. ## Install ARK Server From 969d73a4115d6dd47c1895ffe7974efa8b0ea4f0 Mon Sep 17 00:00:00 2001 From: FezVrasta Date: Wed, 24 Jun 2015 12:25:54 +0200 Subject: [PATCH 36/62] added documentation about --help argument --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 440cbc5..377e07a 100644 --- a/README.md +++ b/README.md @@ -75,6 +75,8 @@ arkmanager install ``` ## Commands +To get a complete list of the script commands you can run `arkmanager --help` or `arkmanager -h`. + #### arkmanager install installs arkmanager to the directory specified in `.arkmanager.cfg` From ee050cffae98537f34d9b578db00908b9575d780 Mon Sep 17 00:00:00 2001 From: FezVrasta Date: Wed, 24 Jun 2015 12:53:25 +0200 Subject: [PATCH 37/62] use git.io url for the net installer (shorter) --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 377e07a..05c0dab 100644 --- a/README.md +++ b/README.md @@ -40,7 +40,7 @@ iptables -I INPUT -p udp --dport 7778 -j ACCEPT To install ARK Server Tools run this command: ```sh -curl -s https://raw.githubusercontent.com/FezVrasta/ark-server-tools/master/netinstall.sh | sudo bash -s steam +curl -s http://git.io/vtf5N | sudo bash -s steam ``` NB: You may want to change the `bash -s` parameter to fit your steam user if different from `steam`. From 00510c87b19b8af5a170bad884790744e8350440 Mon Sep 17 00:00:00 2001 From: FezVrasta Date: Wed, 24 Jun 2015 14:00:59 +0200 Subject: [PATCH 38/62] fixed iptables informations --- README.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/README.md b/README.md index 05c0dab..7b64a76 100644 --- a/README.md +++ b/README.md @@ -32,9 +32,13 @@ After these edits, you'll need to restart your bash session or reconnect to your ```sh iptables -I INPUT -p udp --dport 27016 -j ACCEPT +iptables -I INPUT -p tcp --dport 27016 -j ACCEPT iptables -I INPUT -p udp --dport 7778 -j ACCEPT +iptables -I INPUT -p tcp --dport 7778 -j ACCEPT ``` +NB: Change the ports according to the ones set in your `arkmanager.cfg` file. + ## Install ARK Server Tools To install ARK Server Tools run this command: From 6b531dea7e62609be19d353b6083165ca7f06f46 Mon Sep 17 00:00:00 2001 From: FezVrasta Date: Wed, 24 Jun 2015 17:36:27 +0200 Subject: [PATCH 39/62] improved start and stop messages --- tools/arkmanager | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/tools/arkmanager b/tools/arkmanager index 56631fd..463c74c 100755 --- a/tools/arkmanager +++ b/tools/arkmanager @@ -131,6 +131,9 @@ doStart() { if isTheServerRunning; then echo "The server is already running" else + tput sc + echo "The server is starting..." + arkserveropts=$serverMap # bring in ark_... options @@ -154,6 +157,8 @@ doStart() { # run the server in background nohup "$arkserverroot/$arkserverexec" "$arkserveropts" /dev/null 2>&1 & echo "$timestamp: start" >> "$logdir/arkserver.log" + tput rc; tput ed; + echo "The server is now up" fi } @@ -167,8 +172,9 @@ doStop() { # kill the server with the PID PID=`ps -ef | grep "$arkserverroot/$arkserverexec" | grep -v grep | awk '{print $2}'` kill -9 $PID - + tput rc; tput ed; + echo "The server has been stopped" echo "$timestamp: stop" >> "$logdir/arkserver.log" else echo "The server is already stopped" From 8e2d92f7674adff1596cb01effe7fbb890f1ebc4 Mon Sep 17 00:00:00 2001 From: FezVrasta Date: Wed, 24 Jun 2015 18:08:59 +0200 Subject: [PATCH 40/62] log output of ShooterGameServer and moved arkmanager logs to arkmanager.log --- tools/arkmanager | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/tools/arkmanager b/tools/arkmanager index 463c74c..ebb5469 100755 --- a/tools/arkmanager +++ b/tools/arkmanager @@ -34,6 +34,9 @@ GREEN="\\033[1;32m" RED="\\033[1;31m" NORMAL="\\033[0;39m" +arkmanagerLog="arkmanager.log" # here are logged the actions performed by arkmanager +arkserverLog="arkserver.log" # here is logged the output of ShooterGameServer + #--------------------- # functions #--------------------- @@ -155,8 +158,9 @@ doStart() { arkserveropts="${arkserveropts}?listen" # run the server in background - nohup "$arkserverroot/$arkserverexec" "$arkserveropts" /dev/null 2>&1 & - echo "$timestamp: start" >> "$logdir/arkserver.log" + echo "$timestamp: start" >> "$logdir/$arkserverLog" + nohup "$arkserverroot/$arkserverexec" "$arkserveropts" "$logdir/$arkserverLog" 2>&1 & # output of this command is logged + echo "$timestamp: start" >> "$logdir/$arkmanagerLog" tput rc; tput ed; echo "The server is now up" fi @@ -175,7 +179,7 @@ doStop() { tput rc; tput ed; echo "The server has been stopped" - echo "$timestamp: stop" >> "$logdir/arkserver.log" + echo "$timestamp: stop" >> "$logdir/$arkmanagerLog" else echo "The server is already stopped" fi @@ -255,11 +259,11 @@ case "$1" in ;; restart) doStop - echo "$timestamp: stop" >> "$logdir/arkserver.log" + echo "$timestamp: stop" >> "$logdir/$arkmanagerLog" sleep 10 doStart - echo "$timestamp: start" >> "$logdir/arkserver.log" - echo "$timestamp: restart" >> "$logdir/arkserver.log" + echo "$timestamp: start" >> "$logdir/$arkmanagerLog" + echo "$timestamp: restart" >> "$logdir/$arkmanagerLog" ;; install) doInstall From 12322876f0ee7fe0f86b9276ecc345f23cd702f9 Mon Sep 17 00:00:00 2001 From: FezVrasta Date: Wed, 24 Jun 2015 18:08:59 +0200 Subject: [PATCH 41/62] added Contributors line instead of putting them together with maintainers --- tools/arkmanager | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tools/arkmanager b/tools/arkmanager index ebb5469..c350fe7 100755 --- a/tools/arkmanager +++ b/tools/arkmanager @@ -3,7 +3,8 @@ # ARK: survival evolved manager # # Original author: LeXaT -# Maintainer: FezVrasta, Sispheor +# Maintainer: FezVrasta +# Contributors: Sispheor, Atriusftw, lexat, puseidr # Check the user is not currently running this script as root if [ "$(id -u)" == "0" ]; then From 13913709d4d6b7a997c2e97f45df3b919842dbc2 Mon Sep 17 00:00:00 2001 From: Sispheor Date: Wed, 24 Jun 2015 20:28:38 +0200 Subject: [PATCH 42/62] add systemd unit file and update install to use it --- tools/install.sh | 25 ++++++++++++++++++------- tools/systemd/arkdeamon.service | 11 +++++++++++ 2 files changed, 29 insertions(+), 7 deletions(-) mode change 100644 => 100755 tools/install.sh create mode 100644 tools/systemd/arkdeamon.service diff --git a/tools/install.sh b/tools/install.sh old mode 100644 new mode 100755 index ec1f5ea..102f804 --- a/tools/install.sh +++ b/tools/install.sh @@ -9,14 +9,22 @@ if [ ! -z "$1" ]; then # Copy arkdaemon to /etc/init.d ,set permissions and add it to boot if [ -f /lib/lsb/init-functions ]; then - cp lsb/arkdaemon "${INSTALL_ROOT}/etc/init.d/arkmanager" - chmod +x "${INSTALL_ROOT}/etc/init.d/arkmanager" - sed -i "s|^DAEMON=\"/usr|DAEMON=\"${EXECPREFIX}|" "${INSTALL_ROOT}/etc/init.d/arkmanager" - # add to startup if the system use sysinit - if [ -x /usr/sbin/update-rc.d -a -z "${INSTALL_ROOT}" ]; then - update-rc.d arkmanager defaults + # on debian 8, sysvinit and systemd are present. If systemd is available we use it instead of sysvinit + if [[ -f /etc/systemd/system.conf ]]; then # used by systemd + cp systemd/arkdeamon.service /etc/systemd/system/arkdaemon.service + systemctl enable arkdeamon.service echo "Ark server will now start on boot, if you want to remove this feature run the following line" - echo "update-rc.d -f arkmanager remove" + echo "systemctl disable unit" + else # systemd not present, so use sysvinit + cp lsb/arkdaemon "${INSTALL_ROOT}/etc/init.d/arkmanager" + chmod +x "${INSTALL_ROOT}/etc/init.d/arkmanager" + sed -i "s|^DAEMON=\"/usr|DAEMON=\"${EXECPREFIX}|" "${INSTALL_ROOT}/etc/init.d/arkmanager" + # add to startup if the system use sysinit + if [ -x /usr/sbin/update-rc.d -a -z "${INSTALL_ROOT}" ]; then + update-rc.d arkmanager 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 arkmanager remove" + fi fi elif [ -f /etc/rc.d/init.d/functions ]; then cp redhat/arkdaemon "${INSTALL_ROOT}/etc/rc.d/init.d/arkmanager" @@ -36,6 +44,9 @@ if [ ! -z "$1" ]; then echo "Ark server will now start on boot, if you want to remove this feature run the following line" echo "rc-update del arkmanager default" fi + elif [[ /etc/systemd/system.conf ]]; then # used by systemd + cp systemd/arkdeamon.service /etc/systemd/system/arkdaemon.service + systemctl enable arkdeamon.service fi # Create a folder in /var/log to let Ark tools write its own log files diff --git a/tools/systemd/arkdeamon.service b/tools/systemd/arkdeamon.service new file mode 100644 index 0000000..3d93a01 --- /dev/null +++ b/tools/systemd/arkdeamon.service @@ -0,0 +1,11 @@ +[Unit] +Description=Daemon to start ark server +After=network.target + +[Service] +ExecStart=/etc/init.d/arkdaemon start +ExecStop=/etc/init.d/arkdaemon stop +Type=forking + +[Install] +WantedBy=multi-user.target From c860735e0c5f0e508aac15550310b9444f04229c Mon Sep 17 00:00:00 2001 From: Sispheor Date: Wed, 24 Jun 2015 21:33:13 +0200 Subject: [PATCH 43/62] fix issue #31 and add forceupdate function --- README.md | 5 +++- tools/arkmanager | 65 ++++++++++++++++++++++++++++-------------------- tools/install.sh | 1 + 3 files changed, 43 insertions(+), 28 deletions(-) diff --git a/README.md b/README.md index 7b64a76..7bb845e 100644 --- a/README.md +++ b/README.md @@ -94,7 +94,10 @@ stops ARK server restarts ARK server #### arkmanager update -manually updates ARK server +manually updates ARK server if a new version is available + +#### arkmanager forceupdate +Apply update without check the current version #### arkmanager status Get the status of the server. Show if the process is running, if the server is up and the current version number diff --git a/tools/arkmanager b/tools/arkmanager index c350fe7..b3548c5 100755 --- a/tools/arkmanager +++ b/tools/arkmanager @@ -41,12 +41,6 @@ arkserverLog="arkserver.log" # here is logged the output of ShooterGameServer #--------------------- # functions #--------------------- -function testfunction(){ - if [ -z $servermail ]; then - echo "mail ok" - fi - -} # # Check if a new version is available but not apply it @@ -94,7 +88,9 @@ function isUpdateNeeded(){ # function getCurrentVersion(){ cd "$arkserverroot" - touch arkversion # If the file doesn't exist + if ! [ -f arkversion ];then + touch arkversion + fi instver=`cat "arkversion"` return $instver @@ -121,13 +117,20 @@ function isTheServerRunning(){ # # Check if the server is down and not visible in steam server list # -function isTheServerDown(){ - lsof -i |grep $ark_Port > /dev/null +# +function isTheServerUp(){ + lsof -i :"$ark_Port" > /dev/null result=$? - return $result + # In this case, the result is: + # 1 if the command fail. The port is not listenning + # 0 if the command succeed. The port is listenning + if [ $result -eq 0 ];then + return 1 + else + return 0 + fi } - # # start function # @@ -207,27 +210,31 @@ doUpdate() { cd "$arkserverroot" 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 - echo "$bnumber" > "$arkserverroot/arkversion" - 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 + forceUpdate else echo "Your server is already up to date! The most recent version is ${bnumber}." echo "$timestamp: No update needed." >> "$logdir/update.log" fi; } +forceUpdate(){ + # 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 + echo "$bnumber" > "$arkserverroot/arkversion" + 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 +} + # # Print the status of the server (running? online? version?) # @@ -238,7 +245,7 @@ printStatus(){ echo -e "$NORMAL" "Server running: " "$RED" "No" "$NORMAL" fi - if isTheServerDown ;then + if isTheServerUp ;then echo -e "$NORMAL" "Server online: " "$RED" "No" "$NORMAL" else echo -e "$NORMAL" "Server online: " "$GREEN" "Yes" "$NORMAL" @@ -273,6 +280,9 @@ case "$1" in doUpdate #testfunction ;; + forceupdate) + forceUpdate + ;; checkupdate) tput sc echo "Querying Steam database for latest version..." @@ -292,6 +302,7 @@ case "$1" in echo "restart Stops the server and then starts it" echo "install Install the ARK server files from steamcmd" echo "update Check for a new ARK server version, if needed, stops the server, updates it, and starts it again" + echo "forceupdate Apply update without check the current version" echo "checkupdate Check for a new ARK server version" echo "boradcast PLACEHOLDER, not supported yet" echo "status Returns the status of the current ARK server instance" diff --git a/tools/install.sh b/tools/install.sh index 102f804..d4f008f 100755 --- a/tools/install.sh +++ b/tools/install.sh @@ -12,6 +12,7 @@ if [ ! -z "$1" ]; then # on debian 8, sysvinit and systemd are present. If systemd is available we use it instead of sysvinit if [[ -f /etc/systemd/system.conf ]]; then # used by systemd cp systemd/arkdeamon.service /etc/systemd/system/arkdaemon.service + systemctl daemon-reload systemctl enable arkdeamon.service echo "Ark server will now start on boot, if you want to remove this feature run the following line" echo "systemctl disable unit" From b0936f2f1348c69c9ab92e65b9be9b7b775a617f Mon Sep 17 00:00:00 2001 From: Ben Peddell Date: Wed, 24 Jun 2015 18:36:05 +1000 Subject: [PATCH 44/62] Parse steamcmd output and extract buildid buildid for public branch is under depots.branches.public.buildid The output from app_info_print is a line-oriented json-like structure which is easily parsed by bash. --- tools/arkmanager | 26 +++++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/tools/arkmanager b/tools/arkmanager index b3548c5..4fe34f8 100755 --- a/tools/arkmanager +++ b/tools/arkmanager @@ -96,11 +96,35 @@ function getCurrentVersion(){ } +# +# Parse the buildid from steamcmd +# +function parseSteamAppVer(){ + local sname + while read name val; do + name="${name#\"}" + name="${name%\"}" + val="${val#\"}" + val="${val%\"}" + if [ "$name" = "}" ]; then + break + elif [ "$name" == "{" ]; then + parseSteamAppVer "${1}.${sname}" + else + if [ "$1" == ".depots.branches.public" -a "$name" == "buildid" ]; then + echo "$val" + break + fi + sname="${name}" + fi + done +} + # # Get the current available server version on steamdb # function getAvailableVersion(){ - 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` + bnumber=`$steamcmdroot/$steamcmdexec +login anonymous +app_info_print "$appid" +quit | while read name val; do if [ "${name}" == "{" ]; then parseSteamAppVer; break; fi; done` return $bnumber } From 0676552a48f3c7bc9429648393173b7053a299e8 Mon Sep 17 00:00:00 2001 From: Ben Peddell Date: Wed, 24 Jun 2015 13:20:39 +0000 Subject: [PATCH 45/62] Fix typo in init script modification --- tools/install.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tools/install.sh b/tools/install.sh index d4f008f..b5d97a6 100755 --- a/tools/install.sh +++ b/tools/install.sh @@ -30,7 +30,7 @@ if [ ! -z "$1" ]; then elif [ -f /etc/rc.d/init.d/functions ]; then cp redhat/arkdaemon "${INSTALL_ROOT}/etc/rc.d/init.d/arkmanager" chmod +x "${INSTALL_ROOT}/etc/rc.d/init.d/arkmanager" - sed -i "s@^DAEMON=\"/usr/bin@DAEMON=\"${EXECPREFIX}@" "${INSTALL_ROOT}/etc/rc.d/init.d/arkmanager" + sed -i "s@^DAEMON=\"/usr@DAEMON=\"${EXECPREFIX}@" "${INSTALL_ROOT}/etc/rc.d/init.d/arkmanager" if [ -x /sbin/chkconfig -a -z "${INSTALL_ROOT}" ]; then chkconfig --add arkmanager echo "Ark server will now start on boot, if you want to remove this feature run the following line" @@ -39,7 +39,7 @@ if [ ! -z "$1" ]; then elif [ -f /sbin/runscript ]; then cp openrc/arkdaemon "${INSTALL_ROOT}/etc/init.d/arkmanager" chmod +x "${INSTALL_ROOT}/etc/init.d/arkmanager" - sed -i "s@^DAEMON=\"/usr/bin@DAEMON=\"${EXECPREFIX}@" "${INSTALL_ROOT}/etc/init.d/arkmanager" + sed -i "s@^DAEMON=\"/usr@DAEMON=\"${EXECPREFIX}@" "${INSTALL_ROOT}/etc/init.d/arkmanager" if [ -x /sbin/rc-update -a -z "${INSTALL_ROOT}" ]; then rc-update add arkmanager default echo "Ark server will now start on boot, if you want to remove this feature run the following line" From 7e9e1b05ae486cccbd38e7ec5c99f76f2c476cdb Mon Sep 17 00:00:00 2001 From: Ben Peddell Date: Wed, 24 Jun 2015 13:24:46 +0000 Subject: [PATCH 46/62] Modify config user to match install user --- tools/install.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/tools/install.sh b/tools/install.sh index b5d97a6..a30ec63 100755 --- a/tools/install.sh +++ b/tools/install.sh @@ -62,6 +62,7 @@ if [ ! -z "$1" ]; then else cp -n arkmanager.cfg "${INSTALL_ROOT}/etc/arkmanager/arkmanager.cfg" chown "$1" "${INSTALL_ROOT}/etc/arkmanager/arkmanager.cfg" + sed -i "s|^steamcmd_user=\"steam\"|steamcmd_user=\"$1\"|;s|\"/home/steam|\"/home/$1|" "${INSTALL_ROOT}/etc/arkmanager/arkmanager.cfg" fi else From ebb1ccb2c81a418d93aab326c7f5ac3a64931927 Mon Sep 17 00:00:00 2001 From: FezVrasta Date: Thu, 25 Jun 2015 11:58:53 +0200 Subject: [PATCH 47/62] improved output of rhel daemon --- tools/redhat/arkdaemon | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/tools/redhat/arkdaemon b/tools/redhat/arkdaemon index be4be54..7b3c683 100755 --- a/tools/redhat/arkdaemon +++ b/tools/redhat/arkdaemon @@ -30,6 +30,10 @@ NAME="ShooterGameServer" LOGFILE="${logdir}/${NAME}.log" DAEMON="/usr/bin/arkmanager" +GREEN="\\033[1;32m" +RED="\\033[1;31m" +NORMAL="\\033[0;39m" + set -e # If the daemon is not there, then exit. @@ -38,37 +42,38 @@ test -x $DAEMON || exit 5 case "$1" in start) echo -n "Starting $NAME: " - su -s /bin/sh -c "$DAEMON start" $steamcmd_user + su -s /bin/sh -c "$DAEMON start" $steamcmd_user > /dev/null sleep 5 PID=`ps -ef | grep $NAME | grep -v grep | awk '{print $2}'` if [ -n "$PID" ]; then touch /var/lock/subsys/arkdaemon - echo "OK" + echo "[" "$GREEN" " OK " "$NORMAL" "]" exit 0 else - echo "Failed" + echo "[" "$RED" " FAILED " "$NORMAL" "]" exit 1 fi ;; stop) echo -n "Stopping $NAME: " - su -s /bin/sh -c "$DAEMON stop" $steamcmd_user + su -s /bin/sh -c "$DAEMON stop" $steamcmd_user > /dev/null sleep 5 PID=`ps -ef | grep $NAME | grep -v grep | awk '{print $2}'` if [ -n "$PID" ]; then - echo "Failed" + echo "[" "$RED" " FAILED " "$NORMAL" "]" exit 1 else - echo "OK" + echo "[" "$GREEN" " OK " "$NORMAL" "]" rm -f /var/lock/subsys/arkdaemon exit 0 fi ;; restart) - su -s /bin/sh -c "$DAEMON restart" $steamcmd_user - exit 0 + echo -n "Restarting $NAME: " + su -s /bin/sh -c "$DAEMON restart" $steamcmd_user > /dev/null + echo "OK" ;; status) From f196df51c69f691779f6dcfbb46f6a1e90c1b2ab Mon Sep 17 00:00:00 2001 From: Ben Peddell Date: Thu, 25 Jun 2015 20:29:00 +1000 Subject: [PATCH 48/62] Copy Debian init script to /usr/libexec/arkmanager --- tools/install.sh | 7 +++++-- tools/systemd/arkdeamon.service | 4 ++-- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/tools/install.sh b/tools/install.sh index a30ec63..d2d8933 100755 --- a/tools/install.sh +++ b/tools/install.sh @@ -11,11 +11,14 @@ if [ ! -z "$1" ]; then if [ -f /lib/lsb/init-functions ]; then # on debian 8, sysvinit and systemd are present. If systemd is available we use it instead of sysvinit if [[ -f /etc/systemd/system.conf ]]; then # used by systemd + mkdir -p "/usr/libexec/arkmanager" + cp lsb/arkdaemon "/usr/libexec/arkmanager/arkmanager.init" + chmod +x "/usr/libexec/arkmanager/arkmanager.init" cp systemd/arkdeamon.service /etc/systemd/system/arkdaemon.service systemctl daemon-reload - systemctl enable arkdeamon.service + systemctl enable arkdaemon.service echo "Ark server will now start on boot, if you want to remove this feature run the following line" - echo "systemctl disable unit" + echo "systemctl disable arkmanager.service" else # systemd not present, so use sysvinit cp lsb/arkdaemon "${INSTALL_ROOT}/etc/init.d/arkmanager" chmod +x "${INSTALL_ROOT}/etc/init.d/arkmanager" diff --git a/tools/systemd/arkdeamon.service b/tools/systemd/arkdeamon.service index 3d93a01..fd67b61 100644 --- a/tools/systemd/arkdeamon.service +++ b/tools/systemd/arkdeamon.service @@ -3,8 +3,8 @@ Description=Daemon to start ark server After=network.target [Service] -ExecStart=/etc/init.d/arkdaemon start -ExecStop=/etc/init.d/arkdaemon stop +ExecStart=/usr/libexec/arkmanager/arkmanager.init start +ExecStop=/usr/libexec/arkmanager/arkmanager.init stop Type=forking [Install] From b2d5554cf4e0e12065e07afa11f9b33be62d5384 Mon Sep 17 00:00:00 2001 From: Ben Peddell Date: Thu, 25 Jun 2015 20:45:52 +1000 Subject: [PATCH 49/62] Rename arkdaemon.service to arkmanager.service --- tools/install.sh | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/tools/install.sh b/tools/install.sh index d2d8933..836436f 100755 --- a/tools/install.sh +++ b/tools/install.sh @@ -14,9 +14,9 @@ if [ ! -z "$1" ]; then mkdir -p "/usr/libexec/arkmanager" cp lsb/arkdaemon "/usr/libexec/arkmanager/arkmanager.init" chmod +x "/usr/libexec/arkmanager/arkmanager.init" - cp systemd/arkdeamon.service /etc/systemd/system/arkdaemon.service + cp systemd/arkdeamon.service /etc/systemd/system/arkmanager.service systemctl daemon-reload - systemctl enable arkdaemon.service + systemctl enable arkmanager.service echo "Ark server will now start on boot, if you want to remove this feature run the following line" echo "systemctl disable arkmanager.service" else # systemd not present, so use sysvinit @@ -49,8 +49,8 @@ if [ ! -z "$1" ]; then echo "rc-update del arkmanager default" fi elif [[ /etc/systemd/system.conf ]]; then # used by systemd - cp systemd/arkdeamon.service /etc/systemd/system/arkdaemon.service - systemctl enable arkdeamon.service + cp systemd/arkdeamon.service /etc/systemd/system/arkmanager.service + systemctl enable arkmanager.service fi # Create a folder in /var/log to let Ark tools write its own log files From 9bfdc8ccbae469076ed8c32842967e5f0e9c4614 Mon Sep 17 00:00:00 2001 From: Ben Peddell Date: Thu, 25 Jun 2015 21:02:22 +1000 Subject: [PATCH 50/62] Add RedHat systemd unit --- tools/install.sh | 24 ++++++++++++++++++------ 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/tools/install.sh b/tools/install.sh index 836436f..87dcf23 100755 --- a/tools/install.sh +++ b/tools/install.sh @@ -31,13 +31,25 @@ if [ ! -z "$1" ]; then fi fi elif [ -f /etc/rc.d/init.d/functions ]; then - cp redhat/arkdaemon "${INSTALL_ROOT}/etc/rc.d/init.d/arkmanager" - chmod +x "${INSTALL_ROOT}/etc/rc.d/init.d/arkmanager" - sed -i "s@^DAEMON=\"/usr@DAEMON=\"${EXECPREFIX}@" "${INSTALL_ROOT}/etc/rc.d/init.d/arkmanager" - if [ -x /sbin/chkconfig -a -z "${INSTALL_ROOT}" ]; then - chkconfig --add arkmanager + # on RHEL 7, sysvinit and systemd are present. If systemd is available we use it instead of sysvinit + if [[ -f /etc/systemd/system.conf ]]; then # used by systemd + mkdir -p "/usr/libexec/arkmanager" + cp redhat/arkdaemon "/usr/libexec/arkmanager/arkmanager.init" + chmod +x "/usr/libexec/arkmanager/arkmanager.init" + cp systemd/arkdeamon.service /etc/systemd/system/arkmanager.service + systemctl daemon-reload + systemctl enable arkmanager.service echo "Ark server will now start on boot, if you want to remove this feature run the following line" - echo "chkconfig arkmanager off" + echo "systemctl disable arkmanager.service" + else # systemd not preset, so use sysvinit + cp redhat/arkdaemon "${INSTALL_ROOT}/etc/rc.d/init.d/arkmanager" + chmod +x "${INSTALL_ROOT}/etc/rc.d/init.d/arkmanager" + sed -i "s@^DAEMON=\"/usr@DAEMON=\"${EXECPREFIX}@" "${INSTALL_ROOT}/etc/rc.d/init.d/arkmanager" + if [ -x /sbin/chkconfig -a -z "${INSTALL_ROOT}" ]; then + chkconfig --add arkmanager + echo "Ark server will now start on boot, if you want to remove this feature run the following line" + echo "chkconfig arkmanager off" + fi fi elif [ -f /sbin/runscript ]; then cp openrc/arkdaemon "${INSTALL_ROOT}/etc/init.d/arkmanager" From 9ca3d5f3c50de8bfcf24c59daf3f316f88590d9e Mon Sep 17 00:00:00 2001 From: Ben Peddell Date: Thu, 25 Jun 2015 21:07:58 +1000 Subject: [PATCH 51/62] Add distro-agnostic systemd init script --- tools/install.sh | 5 +++ tools/systemd/arkdaemon.init | 86 ++++++++++++++++++++++++++++++++++++ 2 files changed, 91 insertions(+) create mode 100755 tools/systemd/arkdaemon.init diff --git a/tools/install.sh b/tools/install.sh index 87dcf23..2cb6be6 100755 --- a/tools/install.sh +++ b/tools/install.sh @@ -61,8 +61,13 @@ if [ ! -z "$1" ]; then echo "rc-update del arkmanager default" fi elif [[ /etc/systemd/system.conf ]]; then # used by systemd + mkdir -p /usr/libexec/arkmanager + cp systemd/arkdaemon.init "/usr/libexec/arkmanager/arkmanager.init" + chmod +x "/usr/libexec/arkmanager/arkmanager.init" cp systemd/arkdeamon.service /etc/systemd/system/arkmanager.service systemctl enable arkmanager.service + echo "Ark server will now start on boot, if you want to remove this feature run the following line" + echo "systemctl disable arkmanager.service" fi # Create a folder in /var/log to let Ark tools write its own log files diff --git a/tools/systemd/arkdaemon.init b/tools/systemd/arkdaemon.init new file mode 100755 index 0000000..6faa93e --- /dev/null +++ b/tools/systemd/arkdaemon.init @@ -0,0 +1,86 @@ +#!/bin/bash +# +# /usr/libexec/arkmanager/arkmanager.init +# +# ARK manager daemon +# +# chkconfig: 2345 80 20 +# description: ARK manager daemon used to start the server and keep it updated +# processname: ShooterGameServer +# config: /etc/arkmanager/arkmanager.cfg + +### 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: ARK manager daemon used to start the server and keep it updated +# +### END INIT INFO + +# Global variables +source /etc/arkmanager/arkmanager.cfg + +NAME="ShooterGameServer" +LOGFILE="${logdir}/${NAME}.log" +DAEMON="/usr/bin/arkmanager" + +GREEN="\\033[1;32m" +RED="\\033[1;31m" +NORMAL="\\033[0;39m" + +set -e + +# If the daemon is not there, then exit. +test -x $DAEMON || exit 5 + +case "$1" in + start) + echo -n "Starting $NAME: " + su -s /bin/sh -c "$DAEMON start" $steamcmd_user > /dev/null + sleep 5 + PID=`ps -ef | grep $NAME | grep -v grep | awk '{print $2}'` + if [ -n "$PID" ]; then + echo "$PID" >/var/run/arkmanager.pid + echo "[" "$GREEN" " OK " "$NORMAL" "]" + exit 0 + else + echo "[" "$RED" " FAILED " "$NORMAL" "]" + exit 1 + fi + ;; + + stop) + echo -n "Stopping $NAME: " + su -s /bin/sh -c "$DAEMON stop" $steamcmd_user > /dev/null + sleep 5 + PID=`ps -ef | grep $NAME | grep -v grep | awk '{print $2}'` + if [ -n "$PID" ]; then + echo "[" "$RED" " FAILED " "$NORMAL" "]" + exit 1 + else + echo "[" "$GREEN" " OK " "$NORMAL" "]" + rm /var/run/arkmanager.pid + exit 0 + fi + ;; + + restart) + echo -n "Restarting $NAME: " + su -s /bin/sh -c "$DAEMON restart" $steamcmd_user > /dev/null + echo "OK" + ;; + + status) + su -s /bin/sh -c "$DAEMON status" $steamcmd_user + exit 0 + ;; + + *) + # For invalid arguments, print the usage message. + echo "Usage: $0 {start|stop|restart|status}" + exit 1 + ;; +esac From 89d7b9889c50f012c87ae8701888962cc78a62c5 Mon Sep 17 00:00:00 2001 From: Ben Peddell Date: Thu, 25 Jun 2015 21:22:46 +1000 Subject: [PATCH 52/62] Use INSTALL_ROOT and EXECPREFIX for systemd --- tools/install.sh | 61 +++++++++++++++++++++++++++--------------------- 1 file changed, 35 insertions(+), 26 deletions(-) diff --git a/tools/install.sh b/tools/install.sh index 2cb6be6..0797ec2 100755 --- a/tools/install.sh +++ b/tools/install.sh @@ -10,15 +10,18 @@ if [ ! -z "$1" ]; then # Copy arkdaemon to /etc/init.d ,set permissions and add it to boot if [ -f /lib/lsb/init-functions ]; then # on debian 8, sysvinit and systemd are present. If systemd is available we use it instead of sysvinit - if [[ -f /etc/systemd/system.conf ]]; then # used by systemd - mkdir -p "/usr/libexec/arkmanager" - cp lsb/arkdaemon "/usr/libexec/arkmanager/arkmanager.init" - chmod +x "/usr/libexec/arkmanager/arkmanager.init" - cp systemd/arkdeamon.service /etc/systemd/system/arkmanager.service - systemctl daemon-reload - systemctl enable arkmanager.service - echo "Ark server will now start on boot, if you want to remove this feature run the following line" - echo "systemctl disable arkmanager.service" + if [ -f /etc/systemd/system.conf ]; then # used by systemd + mkdir -p "${INSTALL_ROOT}${EXECPREFIX}/libexec/arkmanager" + cp lsb/arkdaemon "${INSTALL_ROOT}${EXECPREFIX}/libexec/arkmanager/arkmanager.init" + chmod +x "${INSTALL_ROOT}${EXECPREFIX}/libexec/arkmanager/arkmanager.init" + cp systemd/arkdeamon.service "${INSTALL_ROOT}/etc/systemd/system/arkmanager.service" + sed -i "s|=\"/usr/|=\"${EXECPREFIX}/|" "${INSTALL_ROOT}/etc/systemd/system/arkmanager.service" + if [ -z "${INSTALL_ROOT}" ]; then + systemctl daemon-reload + systemctl enable arkmanager.service + echo "Ark server will now start on boot, if you want to remove this feature run the following line" + echo "systemctl disable arkmanager.service" + fi else # systemd not present, so use sysvinit cp lsb/arkdaemon "${INSTALL_ROOT}/etc/init.d/arkmanager" chmod +x "${INSTALL_ROOT}/etc/init.d/arkmanager" @@ -32,15 +35,18 @@ if [ ! -z "$1" ]; then fi elif [ -f /etc/rc.d/init.d/functions ]; then # on RHEL 7, sysvinit and systemd are present. If systemd is available we use it instead of sysvinit - if [[ -f /etc/systemd/system.conf ]]; then # used by systemd - mkdir -p "/usr/libexec/arkmanager" - cp redhat/arkdaemon "/usr/libexec/arkmanager/arkmanager.init" - chmod +x "/usr/libexec/arkmanager/arkmanager.init" - cp systemd/arkdeamon.service /etc/systemd/system/arkmanager.service - systemctl daemon-reload - systemctl enable arkmanager.service - echo "Ark server will now start on boot, if you want to remove this feature run the following line" - echo "systemctl disable arkmanager.service" + if [ -f /etc/systemd/system.conf ]; then # used by systemd + mkdir -p "${INSTALL_ROOT}${EXECPREFIX}/libexec/arkmanager" + cp redhat/arkdaemon "${INSTALL_ROOT}${EXECPREFIX}/libexec/arkmanager/arkmanager.init" + chmod +x "${INSTALL_ROOT}${EXECPREFIX}/libexec/arkmanager/arkmanager.init" + cp systemd/arkdeamon.service "${INSTALL_ROOT}/etc/systemd/system/arkmanager.service" + sed -i "s|=\"/usr/|=\"${EXECPREFIX}/|" "${INSTALL_ROOT}/etc/systemd/system/arkmanager.service" + if [ -z "${INSTALL_ROOT}" ]; then + systemctl daemon-reload + systemctl enable arkmanager.service + echo "Ark server will now start on boot, if you want to remove this feature run the following line" + echo "systemctl disable arkmanager.service" + fi else # systemd not preset, so use sysvinit cp redhat/arkdaemon "${INSTALL_ROOT}/etc/rc.d/init.d/arkmanager" chmod +x "${INSTALL_ROOT}/etc/rc.d/init.d/arkmanager" @@ -60,14 +66,17 @@ if [ ! -z "$1" ]; then echo "Ark server will now start on boot, if you want to remove this feature run the following line" echo "rc-update del arkmanager default" fi - elif [[ /etc/systemd/system.conf ]]; then # used by systemd - mkdir -p /usr/libexec/arkmanager - cp systemd/arkdaemon.init "/usr/libexec/arkmanager/arkmanager.init" - chmod +x "/usr/libexec/arkmanager/arkmanager.init" - cp systemd/arkdeamon.service /etc/systemd/system/arkmanager.service - systemctl enable arkmanager.service - echo "Ark server will now start on boot, if you want to remove this feature run the following line" - echo "systemctl disable arkmanager.service" + elif [ -f /etc/systemd/system.conf ]; then # used by systemd + mkdir -p "${INSTALL_ROOT}${EXECPREFIX}/libexec/arkmanager" + cp systemd/arkdaemon.init "${INSTALL_ROOT}${EXECPREFIX}/libexec/arkmanager/arkmanager.init" + chmod +x "${INSTALL_ROOT}${EXECPREFIX}/libexec/arkmanager/arkmanager.init" + cp systemd/arkdeamon.service "${INSTALL_ROOT}/etc/systemd/system/arkmanager.service" + sed -i "s|=\"/usr/|=\"${EXECPREFIX}/|" "${INSTALL_ROOT}/etc/systemd/system/arkmanager.service" + if [ -z "${INSTALL_ROOT}" ]; then + systemctl enable arkmanager.service + echo "Ark server will now start on boot, if you want to remove this feature run the following line" + echo "systemctl disable arkmanager.service" + fi fi # Create a folder in /var/log to let Ark tools write its own log files From 2b16b5e7079bc5805fdf2fa6b769a4a3c8cbc60f Mon Sep 17 00:00:00 2001 From: Ben Peddell Date: Thu, 25 Jun 2015 21:35:42 +1000 Subject: [PATCH 53/62] Add pidfile support --- tools/lsb/arkdaemon | 2 ++ tools/redhat/arkdaemon | 8 +++++--- tools/systemd/arkdeamon.service | 1 + 3 files changed, 8 insertions(+), 3 deletions(-) diff --git a/tools/lsb/arkdaemon b/tools/lsb/arkdaemon index a4fae1f..ad802c3 100755 --- a/tools/lsb/arkdaemon +++ b/tools/lsb/arkdaemon @@ -32,6 +32,7 @@ case "$1" in sleep 5 PID=`ps -ef | grep $NAME | grep -v grep | awk '{print $2}'` if [ -n "$PID" ]; then + echo "$PID" >/var/run/arkmanager.pid log_end_msg 0 else log_end_msg 1 @@ -46,6 +47,7 @@ case "$1" in if [ -n "$PID" ]; then log_end_msg 1 else + rm /var/run/arkmanager.pid log_end_msg 0 fi ;; diff --git a/tools/redhat/arkdaemon b/tools/redhat/arkdaemon index 7b3c683..e51925c 100755 --- a/tools/redhat/arkdaemon +++ b/tools/redhat/arkdaemon @@ -1,6 +1,6 @@ #!/bin/bash # -# /etc/rc.d/init.d/arkdaemon +# /etc/rc.d/init.d/arkmanager # # ARK manager daemon # @@ -46,7 +46,8 @@ case "$1" in sleep 5 PID=`ps -ef | grep $NAME | grep -v grep | awk '{print $2}'` if [ -n "$PID" ]; then - touch /var/lock/subsys/arkdaemon + echo "${PID}" >/var/run/arkmanager.pid + touch /var/lock/subsys/arkmanager echo "[" "$GREEN" " OK " "$NORMAL" "]" exit 0 else @@ -65,7 +66,8 @@ case "$1" in exit 1 else echo "[" "$GREEN" " OK " "$NORMAL" "]" - rm -f /var/lock/subsys/arkdaemon + rm -f /var/lock/subsys/arkmanager + rm -f /var/run/arkmanager.pid exit 0 fi ;; diff --git a/tools/systemd/arkdeamon.service b/tools/systemd/arkdeamon.service index fd67b61..d1fb5da 100644 --- a/tools/systemd/arkdeamon.service +++ b/tools/systemd/arkdeamon.service @@ -6,6 +6,7 @@ After=network.target ExecStart=/usr/libexec/arkmanager/arkmanager.init start ExecStop=/usr/libexec/arkmanager/arkmanager.init stop Type=forking +PIDFile=/var/run/arkmanager.pid [Install] WantedBy=multi-user.target From bcd25812d9a7b754d94c971534976619bafbfde4 Mon Sep 17 00:00:00 2001 From: Ben Peddell Date: Thu, 25 Jun 2015 21:37:27 +1000 Subject: [PATCH 54/62] Fix EXECPREFIX modification in systemd install --- tools/install.sh | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tools/install.sh b/tools/install.sh index 0797ec2..420aba1 100755 --- a/tools/install.sh +++ b/tools/install.sh @@ -15,7 +15,7 @@ if [ ! -z "$1" ]; then cp lsb/arkdaemon "${INSTALL_ROOT}${EXECPREFIX}/libexec/arkmanager/arkmanager.init" chmod +x "${INSTALL_ROOT}${EXECPREFIX}/libexec/arkmanager/arkmanager.init" cp systemd/arkdeamon.service "${INSTALL_ROOT}/etc/systemd/system/arkmanager.service" - sed -i "s|=\"/usr/|=\"${EXECPREFIX}/|" "${INSTALL_ROOT}/etc/systemd/system/arkmanager.service" + sed -i "s|=/usr/|=${EXECPREFIX}/|" "${INSTALL_ROOT}/etc/systemd/system/arkmanager.service" if [ -z "${INSTALL_ROOT}" ]; then systemctl daemon-reload systemctl enable arkmanager.service @@ -40,7 +40,7 @@ if [ ! -z "$1" ]; then cp redhat/arkdaemon "${INSTALL_ROOT}${EXECPREFIX}/libexec/arkmanager/arkmanager.init" chmod +x "${INSTALL_ROOT}${EXECPREFIX}/libexec/arkmanager/arkmanager.init" cp systemd/arkdeamon.service "${INSTALL_ROOT}/etc/systemd/system/arkmanager.service" - sed -i "s|=\"/usr/|=\"${EXECPREFIX}/|" "${INSTALL_ROOT}/etc/systemd/system/arkmanager.service" + sed -i "s|=/usr/|=${EXECPREFIX}/|" "${INSTALL_ROOT}/etc/systemd/system/arkmanager.service" if [ -z "${INSTALL_ROOT}" ]; then systemctl daemon-reload systemctl enable arkmanager.service @@ -71,7 +71,7 @@ if [ ! -z "$1" ]; then cp systemd/arkdaemon.init "${INSTALL_ROOT}${EXECPREFIX}/libexec/arkmanager/arkmanager.init" chmod +x "${INSTALL_ROOT}${EXECPREFIX}/libexec/arkmanager/arkmanager.init" cp systemd/arkdeamon.service "${INSTALL_ROOT}/etc/systemd/system/arkmanager.service" - sed -i "s|=\"/usr/|=\"${EXECPREFIX}/|" "${INSTALL_ROOT}/etc/systemd/system/arkmanager.service" + sed -i "s|=/usr/|=${EXECPREFIX}/|" "${INSTALL_ROOT}/etc/systemd/system/arkmanager.service" if [ -z "${INSTALL_ROOT}" ]; then systemctl enable arkmanager.service echo "Ark server will now start on boot, if you want to remove this feature run the following line" From 2e12cdedeb8b24567bbd7e5df4113d3d10890e70 Mon Sep 17 00:00:00 2001 From: FezVrasta Date: Thu, 25 Jun 2015 17:29:44 +0200 Subject: [PATCH 55/62] fixed forceUpdate function --- tools/arkmanager | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/tools/arkmanager b/tools/arkmanager index 4fe34f8..2be3091 100755 --- a/tools/arkmanager +++ b/tools/arkmanager @@ -250,8 +250,10 @@ forceUpdate(){ doStop cd "$steamcmdroot" ./$steamcmdexec +login anonymous +force_install_dir "$arkserverroot" +app_update $appid +quit - echo "$bnumber" > "$arkserverroot/arkversion" - echo "$timestamp: update to $bnumber complete" >> "$logdir/update.log" + # the current version should be the last version. We set our version + getAvailableVersion + setCurrentVersion + echo "$timestamp: update to $instver complete" >> "$logdir/update.log" # we restart the server only if it was started before the update if [ $serverWasAlive -eq 1 ]; then From 721491975b37954b968adbb264923aad672deadc Mon Sep 17 00:00:00 2001 From: Ben Peddell Date: Fri, 26 Jun 2015 12:54:12 +1000 Subject: [PATCH 56/62] Get current version from appmanifest_${appid}.acf forceUpdate had a window of time between initiating the update and getting the current version where it could miss an update. Close that window by getting the installed version from the appmanifest file. --- tools/arkmanager | 38 ++++++++++++++++++++------------------ 1 file changed, 20 insertions(+), 18 deletions(-) diff --git a/tools/arkmanager b/tools/arkmanager index 2be3091..267a6d7 100755 --- a/tools/arkmanager +++ b/tools/arkmanager @@ -84,22 +84,12 @@ function isUpdateNeeded(){ } # -# Return the current version number +# Parse an ACF structure +# $1 is the desired path +# $2 is the desired property +# $3 is the current path # -function getCurrentVersion(){ - cd "$arkserverroot" - if ! [ -f arkversion ];then - touch arkversion - fi - instver=`cat "arkversion"` - return $instver - -} - -# -# Parse the buildid from steamcmd -# -function parseSteamAppVer(){ +function parseSteamACF(){ local sname while read name val; do name="${name#\"}" @@ -109,9 +99,9 @@ function parseSteamAppVer(){ if [ "$name" = "}" ]; then break elif [ "$name" == "{" ]; then - parseSteamAppVer "${1}.${sname}" + parseSteamACF "$1" "$2" "${3}.${sname}" else - if [ "$1" == ".depots.branches.public" -a "$name" == "buildid" ]; then + if [ "$3" == "$1" -a "$name" == "$2" ]; then echo "$val" break fi @@ -120,11 +110,23 @@ function parseSteamAppVer(){ done } +# +# Return the current version number +# +function getCurrentVersion(){ + if [ -f "${arkserverroot}/steamapps/appmanifest_${appid}.acf" ]; then + instver=`while read name val; do if [ "${name}" == "{" ]; then parseSteamACF "" "buildid"; break; fi; done <"${arkserverroot}/steamapps/appmanifest_${appid}.acf"` + else + instver="" + fi + return $instver +} + # # Get the current available server version on steamdb # function getAvailableVersion(){ - bnumber=`$steamcmdroot/$steamcmdexec +login anonymous +app_info_print "$appid" +quit | while read name val; do if [ "${name}" == "{" ]; then parseSteamAppVer; break; fi; done` + bnumber=`$steamcmdroot/$steamcmdexec +login anonymous +app_info_print "$appid" +quit | while read name val; do if [ "${name}" == "{" ]; then parseSteamACF ".depots.branches.public" "buildid"; break; fi; done` return $bnumber } From 6fb7f6a4e6004596ca483d2afd4a422e6cfb26bc Mon Sep 17 00:00:00 2001 From: Ben Peddell Date: Fri, 26 Jun 2015 16:34:30 +1000 Subject: [PATCH 57/62] Add app_info_update --- tools/arkmanager | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/arkmanager b/tools/arkmanager index 267a6d7..a62781c 100755 --- a/tools/arkmanager +++ b/tools/arkmanager @@ -126,7 +126,7 @@ function getCurrentVersion(){ # Get the current available server version on steamdb # function getAvailableVersion(){ - bnumber=`$steamcmdroot/$steamcmdexec +login anonymous +app_info_print "$appid" +quit | while read name val; do if [ "${name}" == "{" ]; then parseSteamACF ".depots.branches.public" "buildid"; break; fi; done` + bnumber=`$steamcmdroot/$steamcmdexec +login anonymous +app_info_update 1 +app_info_print "$appid" +quit | while read name val; do if [ "${name}" == "{" ]; then parseSteamACF ".depots.branches.public" "buildid"; break; fi; done` return $bnumber } From 42ce0a99acc2a0698bb549ed175e24371ad9dca5 Mon Sep 17 00:00:00 2001 From: FezVrasta Date: Fri, 26 Jun 2015 15:20:34 +0200 Subject: [PATCH 58/62] clear cache before fetching the available version --- tools/arkmanager | 3 ++- tools/arkmanager.cfg | 1 + 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/tools/arkmanager b/tools/arkmanager index a62781c..cf5605b 100755 --- a/tools/arkmanager +++ b/tools/arkmanager @@ -126,7 +126,8 @@ function getCurrentVersion(){ # Get the current available server version on steamdb # function getAvailableVersion(){ - bnumber=`$steamcmdroot/$steamcmdexec +login anonymous +app_info_update 1 +app_info_print "$appid" +quit | while read name val; do if [ "${name}" == "{" ]; then parseSteamACF ".depots.branches.public" "buildid"; break; fi; done` + rm -f $steamcmd_appinfocache + bnumber=`$steamcmdroot/$steamcmdexec +login anonymous +app_info_update 1 +app_info_print "$appid" +quit | while read name val; do if [ "${name}" == "{" ]; then parseSteamAppVer; break; fi; done` return $bnumber } diff --git a/tools/arkmanager.cfg b/tools/arkmanager.cfg index b0571d1..95e298c 100644 --- a/tools/arkmanager.cfg +++ b/tools/arkmanager.cfg @@ -2,6 +2,7 @@ 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 +steamcmd_appinfocache="/home/steam/Steam/appinfo.vdf" # cache of the appinfo command # config environment arkserverroot="/home/steam/ARK" # path of your ARK server files (default ~/ARK) From 24863a5be65e8a9e2bac822d281b26ae482412c2 Mon Sep 17 00:00:00 2001 From: FezVrasta Date: Fri, 26 Jun 2015 15:22:40 +0200 Subject: [PATCH 59/62] typo --- tools/arkmanager | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/arkmanager b/tools/arkmanager index cf5605b..c1784a5 100755 --- a/tools/arkmanager +++ b/tools/arkmanager @@ -126,7 +126,7 @@ function getCurrentVersion(){ # Get the current available server version on steamdb # function getAvailableVersion(){ - rm -f $steamcmd_appinfocache + rm -f "$steamcmd_appinfocache" bnumber=`$steamcmdroot/$steamcmdexec +login anonymous +app_info_update 1 +app_info_print "$appid" +quit | while read name val; do if [ "${name}" == "{" ]; then parseSteamAppVer; break; fi; done` return $bnumber } From 410ee769bf6deedd39e845d2d10376224ea5a8cd Mon Sep 17 00:00:00 2001 From: FezVrasta Date: Fri, 26 Jun 2015 15:37:22 +0200 Subject: [PATCH 60/62] added @klightspeed as contributor --- tools/arkmanager | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/arkmanager b/tools/arkmanager index c1784a5..0a28b95 100755 --- a/tools/arkmanager +++ b/tools/arkmanager @@ -4,7 +4,7 @@ # # Original author: LeXaT # Maintainer: FezVrasta -# Contributors: Sispheor, Atriusftw, lexat, puseidr +# Contributors: Sispheor, Atriusftw, klightspeed, lexat, puseidr # Check the user is not currently running this script as root if [ "$(id -u)" == "0" ]; then From 2d8fde09f44ecf643de876156abdadda0e8957c8 Mon Sep 17 00:00:00 2001 From: FezVrasta Date: Fri, 26 Jun 2015 15:38:53 +0200 Subject: [PATCH 61/62] fixed comment --- tools/arkmanager | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/arkmanager b/tools/arkmanager index 0a28b95..86157f7 100755 --- a/tools/arkmanager +++ b/tools/arkmanager @@ -142,7 +142,7 @@ function isTheServerRunning(){ } # -# Check if the server is down and not visible in steam server list +# Check if the server is up and visible in steam server list # # function isTheServerUp(){ From e288448de7dc680e1ce48f9901c5741b06517488 Mon Sep 17 00:00:00 2001 From: FezVrasta Date: Fri, 26 Jun 2015 15:39:50 +0200 Subject: [PATCH 62/62] moved message to function --- tools/arkmanager | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/tools/arkmanager b/tools/arkmanager index 86157f7..2680774 100755 --- a/tools/arkmanager +++ b/tools/arkmanager @@ -46,6 +46,9 @@ arkserverLog="arkserver.log" # here is logged the output of ShooterGameServer # Check if a new version is available but not apply it # function checkForUpdate(){ + tput sc + echo "Querying Steam database for latest version..." + if isUpdateNeeded; then tput rc; tput ed; echo -e "Current version:" "$RED" $instver "$NORMAL" @@ -313,8 +316,6 @@ case "$1" in forceUpdate ;; checkupdate) - tput sc - echo "Querying Steam database for latest version..." checkForUpdate ;; broadcast)