From 5f317c8d5754e2b03019ce8f9a2089d743c76b81 Mon Sep 17 00:00:00 2001 From: Ben Peddell Date: Sat, 28 May 2016 13:25:01 +1000 Subject: [PATCH 01/19] Allow {time} in warning reason --- README.asciidoc | 2 +- tools/arkmanager | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/README.asciidoc b/README.asciidoc index a6a68e3..07b896e 100644 --- a/README.asciidoc +++ b/README.asciidoc @@ -377,7 +377,7 @@ The following options can be overridden on a per-instance basis: Valid in `msgWarnReason`, replaced at runtime with the appropriate `msgReason*` template `{time}`;; - Valid in `msgWarnReason`, replaced at runtime with the appropriate `msgTime*` template + Valid in `msgWarnReason` and `msgReason*`, replaced at runtime with the appropriate `msgTime*` template `{modnamesupdate}`;; Valid in `msgReason*Mod`, replaced at runtime with a comma-delimited list of updated mod names diff --git a/tools/arkmanager b/tools/arkmanager index d5488e1..2d4775c 100755 --- a/tools/arkmanager +++ b/tools/arkmanager @@ -988,6 +988,7 @@ printWarnMessage(){ reason="maintenance" fi fi + reason="${reason//\{time\}/${msgtime}}" reason="${reason//\{modnamesupdated\}/${modnamesupdated}}" msg="${msg//\{reason\}/${reason}}" printf "%s\n" "$msg" From f9668ceae05bc46d9b2726f1dd29e5e42aa871bc Mon Sep 17 00:00:00 2001 From: Ben Peddell Date: Sat, 28 May 2016 13:35:03 +1000 Subject: [PATCH 02/19] Fix a typo in the documentation --- README.asciidoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.asciidoc b/README.asciidoc index 07b896e..ac3784f 100644 --- a/README.asciidoc +++ b/README.asciidoc @@ -379,7 +379,7 @@ The following options can be overridden on a per-instance basis: `{time}`;; Valid in `msgWarnReason` and `msgReason*`, replaced at runtime with the appropriate `msgTime*` template - `{modnamesupdate}`;; + `{modnamesupdated}`;; Valid in `msgReason*Mod`, replaced at runtime with a comma-delimited list of updated mod names `{minutes}`;; From ea6de39917175edd3af434736c6467a2c71adc88 Mon Sep 17 00:00:00 2001 From: Ben Peddell Date: Sat, 28 May 2016 20:19:06 +1000 Subject: [PATCH 03/19] " \n " added to empty response message Server response when a command returns no response is "Server received, But no response!! \n " --- tools/arkmanager | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tools/arkmanager b/tools/arkmanager index 2d4775c..3fa123a 100755 --- a/tools/arkmanager +++ b/tools/arkmanager @@ -323,10 +323,10 @@ rconcmd() { auth($socket, $password); sendpkt($socket, 2, 2, $command); my ($resid, $restype, $rcvbody) = recvpkt($socket); - if ($rcvbody eq "Server received, But no response!!") { + if ($rcvbody eq "Server received, But no response!! \n ") { print "Command processed\n"; } else { - print $rcvbody, "\n"; + print "\"", $rcvbody, "\"\n"; } ' "$(getRconPort)" "${ark_MultiHome:-127.0.0.1}" "$adminpass" "$1" } From 957a5689dc7b0cc4b3793f43ac7b982fbe53ce41 Mon Sep 17 00:00:00 2001 From: Ben Peddell Date: Sat, 28 May 2016 20:41:25 +1000 Subject: [PATCH 04/19] Fix an error in doWarn that was causing duplicate warnings --- tools/arkmanager | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tools/arkmanager b/tools/arkmanager index 3fa123a..a854b88 100755 --- a/tools/arkmanager +++ b/tools/arkmanager @@ -1099,7 +1099,7 @@ doWarn(){ sleep 1m & sleeppid=$! printWarnMessage "$1" "$2" "minutes" "$warnminutes" - for (( min = warnminutes - 1; min >= warninterval; min-- )); do + for (( min = warnminutes; min >= warninterval; min-- )); do numplayers=$(numPlayersConnected) echo "There are ${numplayers} players connected" if (( (numplayers + 0) == 0 )); then @@ -1113,7 +1113,7 @@ doWarn(){ sleeppid=$! fi done - warnminutes=$warninterval + warnminutes=$(( warninterval - 1 )) fi done From 0be8a67ba0ff4222ffd7328cb02b849b8e0aa0e2 Mon Sep 17 00:00:00 2001 From: Ben Peddell Date: Mon, 30 May 2016 02:25:11 +1000 Subject: [PATCH 05/19] Actually cancel warning when Ctrl-C etc are pressed --- tools/arkmanager | 1 + 1 file changed, 1 insertion(+) diff --git a/tools/arkmanager b/tools/arkmanager index a854b88..2b82806 100755 --- a/tools/arkmanager +++ b/tools/arkmanager @@ -1071,6 +1071,7 @@ doWarn(){ msg="Shutdown cancelled by operator ($1)" fi doBroadcastWithEcho "${msg}" + exit 1 } trap "update_cancelled 'Ctrl+C'" SIGINT From e2c3fa3c683dc12bb3c2590699cd797070fd814a Mon Sep 17 00:00:00 2001 From: Ben Peddell Date: Mon, 30 May 2016 02:27:37 +1000 Subject: [PATCH 06/19] Fix warning in runSteamCMDspinner --- tools/arkmanager | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/arkmanager b/tools/arkmanager index 2b82806..504d1b6 100755 --- a/tools/arkmanager +++ b/tools/arkmanager @@ -386,7 +386,7 @@ function runSteamCMDspinner(){ progressDisplayType=dots fi fi - if command >&3; then + if (command >&3) 2>/dev/null; then runSteamCMD "$@" >&3 & else runSteamCMD "$@" >/dev/null & From ca3ff1e5f6b550acdd71ab2c8a0a6b9ed027591a Mon Sep 17 00:00:00 2001 From: Ben Peddell Date: Mon, 30 May 2016 02:38:19 +1000 Subject: [PATCH 07/19] Fix restart --warn broadcasting shutdown message --- tools/arkmanager | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/arkmanager b/tools/arkmanager index 504d1b6..7b9cb82 100755 --- a/tools/arkmanager +++ b/tools/arkmanager @@ -834,7 +834,7 @@ doStop() { done if [[ -n "$dowarn" ]]; then - if ! doWarn "$1" "$warnreason"; then + if ! doWarn "$stopreason" "$warnreason"; then return 1 fi fi From 6ae8a442990af2306b9318b0a4a2701b44ac2a4e Mon Sep 17 00:00:00 2001 From: Ben Peddell Date: Mon, 30 May 2016 12:54:59 +1000 Subject: [PATCH 08/19] Fix error in runSteamCMDspinnerSubst --- tools/arkmanager | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tools/arkmanager b/tools/arkmanager index 7b9cb82..533deff 100755 --- a/tools/arkmanager +++ b/tools/arkmanager @@ -1383,7 +1383,7 @@ doDownloadMod(){ while true; do echo -n "Downloading mod $modid" - local output=$(runSteamCMDspinnerSubst 5 +workshop_download_item $mod_appid $modid) 5>&1 + local output=$(runSteamCMDspinnerSubst 5 +workshop_download_item $mod_appid $modid) result=$? if [ $result -eq 0 ]; then modsrcdir="$(echo "$output" | sed -n 's@^Success. Downloaded item [0-9][0-9]* to "\([^"]*\)" .*@\1@p')" @@ -1400,7 +1400,7 @@ doDownloadMod(){ fi echo "Mod $modid not fully downloaded - retrying" fi - done + done 5>&1 if [ -f "$modsrcdir/mod.info" ]; then echo "Mod $modid downloaded" From 2b160082aa50f935aedba003fd899858d114416e Mon Sep 17 00:00:00 2001 From: Ben Peddell Date: Mon, 30 May 2016 18:10:01 +1000 Subject: [PATCH 09/19] Fix permission denied error when updating mods --- tools/arkmanager | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/arkmanager b/tools/arkmanager index 533deff..86eeee5 100755 --- a/tools/arkmanager +++ b/tools/arkmanager @@ -1400,7 +1400,7 @@ doDownloadMod(){ fi echo "Mod $modid not fully downloaded - retrying" fi - done 5>&1 + done 5> >(cat) if [ -f "$modsrcdir/mod.info" ]; then echo "Mod $modid downloaded" From 6b9245cb638a51ec83f30d52d9588dc2be45c32b Mon Sep 17 00:00:00 2001 From: Ben Peddell Date: Mon, 30 May 2016 18:18:05 +1000 Subject: [PATCH 10/19] Fix spinner --- tools/arkmanager | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/arkmanager b/tools/arkmanager index 86eeee5..27faac2 100755 --- a/tools/arkmanager +++ b/tools/arkmanager @@ -380,7 +380,7 @@ function runSteamCMDspinner(){ return $? else if [ -z "$progressDisplayType" ]; then - if stty <&1 >/dev/null 2>&1; then + if stty <&2 >/dev/null 2>&1; then progressDisplayType=spinner else progressDisplayType=dots From cbe5e2ea5034213efbbc91d9873e2cc8f3d915cf Mon Sep 17 00:00:00 2001 From: Ben Peddell Date: Mon, 30 May 2016 18:39:03 +1000 Subject: [PATCH 11/19] Fix Blob SHA breakage --- netinstall.sh | 2 -- tools/arkmanager | 5 +++-- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/netinstall.sh b/netinstall.sh index e1e679a..564b3d9 100644 --- a/netinstall.sh +++ b/netinstall.sh @@ -43,8 +43,6 @@ curl -L -k -s https://github.com/FezVrasta/ark-server-tools/archive/${COMMIT}.ta # Install ARK Server Tools cd ark-server-tools-${COMMIT}/tools sed -i "s|^arkstCommit='.*'$|arkstCommit='${COMMIT}'|" arkmanager -version=`<../.version` -sed -i "s|^arkstVersion=\".*\"|arkstVersion='${version}'|" arkmanager chmod +x install.sh bash install.sh "$steamcmd_user" "$@" >"$output" 2>&1 diff --git a/tools/arkmanager b/tools/arkmanager index 27faac2..57d6ef3 100755 --- a/tools/arkmanager +++ b/tools/arkmanager @@ -7,7 +7,7 @@ # Contributors: Sispheor, Atriusftw, klightspeed, lexat, puseidr # Script version -arkstVersion="1.6" +arkstVersion='1.6' arkstCommit='' doUpgradeTools() { @@ -2191,7 +2191,8 @@ while true; do if [ -n "${arkstCommit}" ]; then echo "Commit: ${arkstCommit:0:7}" fi - echo "Blob SHA: $( (echo -ne "blob $(stat -c "%s" "$0")\0"; sed "s@^arkstCommit=.*@arkstCommit=''@" "$0") | sha1sum | cut -d' ' -f1)" + blobsize="$(sed "s@^arkstCommit=.*@arkstCommit=''@" "$0" | wc -c)" + echo "Blob SHA: $( (echo -ne "blob ${blobsize}\0"; sed "s@^arkstCommit=.*@arkstCommit=''@" "$0") | sha1sum | cut -d' ' -f1)" exit 1 ;; -h|--help) From 06e1c190443e20cd7166e800a351733918e1eb79 Mon Sep 17 00:00:00 2001 From: Ben Peddell Date: Mon, 30 May 2016 20:03:16 +1000 Subject: [PATCH 12/19] remove-mods removes mods from workshop directory --- tools/arkmanager | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/tools/arkmanager b/tools/arkmanager index 57d6ef3..2d1f342 100755 --- a/tools/arkmanager +++ b/tools/arkmanager @@ -1672,6 +1672,26 @@ doUninstallMod(){ fi } +# +# Removes mod from steamcmd workshop directory +# +doRemoveMods(){ + local modid + for modid in ${1//,/ }; do + if [ -f "$steamcmdroot/steamapps/workshop/appworkshop_${mod_appid}.acf" ]; then + sed -i "/^\\t\\t\"${modid}\"/,/^\\t\\t}/d" "$steamcmdroot/steamapps/workshop/appworkshop_${mod_appid}.acf" + fi + + if [ -d "$steamcmdroot/steamapps/workshop/content/${mod_appid}/${modid}" ]; then + rm -rf "$steamcmdroot/steamapps/workshop/content/${mod_appid}/${modid}" + fi + + if [ -d "$steamcmdroot/steamapps/workshop/downloads/${mod_appid}/${modid}" ]; then + rm -rf "$steamcmdroot/steamapps/workshop/downloads/${mod_appid}/${modid}" + fi + done +} + # # Copies server state to a backup directory # @@ -2125,6 +2145,7 @@ while true; do useconfig) nrarg=1; ;; install-cronjob) nrarg=1; ;; remove-cronjob) nrarg=1; ;; + remove-mods) nrarg=1; ;; esac # Enumerate the options and arguments @@ -2181,6 +2202,10 @@ while true; do defaultinstance="${args[0]}" continue ;; + remove-mods) + doRemoveMods "${args[0]}" + continue + ;; list-instances) doListAllInstances "${options[@]}" exit From f0ef9fdaf7e7329e482499f0c3067fa1f947aa4c Mon Sep 17 00:00:00 2001 From: Ben Peddell Date: Mon, 30 May 2016 20:18:45 +1000 Subject: [PATCH 13/19] Add remove-mods to readme --- README.asciidoc | 3 +++ 1 file changed, 3 insertions(+) diff --git a/README.asciidoc b/README.asciidoc index ac3784f..21c43a7 100644 --- a/README.asciidoc +++ b/README.asciidoc @@ -129,6 +129,9 @@ Instanceless commands `useconfig`:: Legacy command for specifying an instance for the following command(s) +`remove-mods`:: + Remove the specified mods from the `steamcmd` workshop directory + Commands acting on instances ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ From e8de3826c985b4619abe2192aea1abac8cf03b6f Mon Sep 17 00:00:00 2001 From: Ben Peddell Date: Mon, 30 May 2016 20:29:15 +1000 Subject: [PATCH 14/19] Avoid "no command" message if remove-mods is only command --- tools/arkmanager | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/tools/arkmanager b/tools/arkmanager index 2d1f342..4263495 100755 --- a/tools/arkmanager +++ b/tools/arkmanager @@ -2204,7 +2204,11 @@ while true; do ;; remove-mods) doRemoveMods "${args[0]}" - continue + if [ $# -eq 0 ]; then + exit 0 + else + continue + fi ;; list-instances) doListAllInstances "${options[@]}" From cb22f09df283291f5aad28065a40df86d4774573 Mon Sep 17 00:00:00 2001 From: Ben Peddell Date: Tue, 31 May 2016 18:46:37 +1000 Subject: [PATCH 15/19] Fix mod download not being retried --- tools/arkmanager | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/tools/arkmanager b/tools/arkmanager index 4263495..9c143c9 100755 --- a/tools/arkmanager +++ b/tools/arkmanager @@ -372,8 +372,8 @@ function runSteamCMDspinner(){ printf "Executing" printf " %q" "$steamcmdroot/$steamcmdexec" +@NoPromptForPassword 1 +login ${steamlogin:-anonymous} "$@" +quit printf "\n" - if command >&3; then - runSteamCMD "$@" | tee /dev/fd/3 + if (command >&3) 2>/dev/null; then + runSteamCMD "$@" > >(tee /dev/fd/3) else runSteamCMD "$@" fi @@ -1383,7 +1383,8 @@ doDownloadMod(){ while true; do echo -n "Downloading mod $modid" - local output=$(runSteamCMDspinnerSubst 5 +workshop_download_item $mod_appid $modid) + local output + output=$(runSteamCMDspinnerSubst 5 +workshop_download_item $mod_appid $modid) result=$? if [ $result -eq 0 ]; then modsrcdir="$(echo "$output" | sed -n 's@^Success. Downloaded item [0-9][0-9]* to "\([^"]*\)" .*@\1@p')" From eb99bb7391c8f5966c245e7c548ea51ff300ee36 Mon Sep 17 00:00:00 2001 From: Ben Peddell Date: Mon, 6 Jun 2016 07:54:47 +1000 Subject: [PATCH 16/19] Add --no-download option to update --- tools/arkmanager | 23 +++++++++++++++-------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/tools/arkmanager b/tools/arkmanager index 9c143c9..5b31a0d 100755 --- a/tools/arkmanager +++ b/tools/arkmanager @@ -1166,6 +1166,7 @@ doUpdate() { local modupdate= local saveworld= local downloadonly= + local nodownload= for arg in "$@"; do if [ "$arg" == "--force" ]; then @@ -1189,6 +1190,8 @@ doUpdate() { arkStagingDir="${ark#--stagingdir=}" elif [ "$arg" == "--downloadonly" ]; then downloadonly=1 + elif [ "$arg" == "--no-download" ]; then + nodownload=1 else echo "Unrecognized option $arg" echo "Try 'arkmanager -h' or 'arkmanager --help' for more information." @@ -1213,8 +1216,10 @@ doUpdate() { rm -f "${arkserverroot}/.ark-update.lock.$$" if [ -n "$modupdate" ]; then - if ! doDownloadAllMods; then - modupdate= + if [ -z "$nodownload" ]; then + if ! doDownloadAllMods; then + modupdate= + fi fi if ! isAnyModUpdateNeeded; then modupdate= @@ -1244,12 +1249,14 @@ doUpdate() { rm -rf "$arkStagingDir/ShooterGame/Saved/"* fi - echo -n "Downloading ARK update" - cd "$steamcmdroot" - runSteamCMDAppUpdate "$arkStagingDir" $validate - if [ -d "${arkStagingDir}/steamapps/downloading/${appid}" ]; then - echo "Update download interrupted" - return 1 + if [ -z "$nodownload" ]; then + echo -n "Downloading ARK update" + cd "$steamcmdroot" + runSteamCMDAppUpdate "$arkStagingDir" $validate + if [ -d "${arkStagingDir}/steamapps/downloading/${appid}" ]; then + echo "Update download interrupted" + return 1 + fi fi fi fi From 91776b27a1078922721a023238583d6fdb39894f Mon Sep 17 00:00:00 2001 From: Ben Peddell Date: Thu, 9 Jun 2016 03:06:04 +1000 Subject: [PATCH 17/19] Clean up after SteamCMD if it returns successful --- tools/arkmanager | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/tools/arkmanager b/tools/arkmanager index 5b31a0d..a6a0e7f 100755 --- a/tools/arkmanager +++ b/tools/arkmanager @@ -1252,8 +1252,11 @@ doUpdate() { if [ -z "$nodownload" ]; then echo -n "Downloading ARK update" cd "$steamcmdroot" - runSteamCMDAppUpdate "$arkStagingDir" $validate - if [ -d "${arkStagingDir}/steamapps/downloading/${appid}" ]; then + if runSteamCMDAppUpdate "$arkStagingDir" $validate; then + rm -rf "${arkStagingDir}/steamapps/downloading/${appid}" + fi + + if [ -d "${arkStagingDir}/steamapps/downloading/${appid}" ]; then echo "Update download interrupted" return 1 fi From 29ffa2f3a35f73b930666761f363f2fc32fbe9d3 Mon Sep 17 00:00:00 2001 From: Ben Peddell Date: Sat, 11 Jun 2016 01:58:35 +1000 Subject: [PATCH 18/19] Make arkmanager script sourceable --- tools/arkmanager | 457 ++++++++++++++++++++++++----------------------- 1 file changed, 233 insertions(+), 224 deletions(-) diff --git a/tools/arkmanager b/tools/arkmanager index a6a0e7f..a477210 100755 --- a/tools/arkmanager +++ b/tools/arkmanager @@ -2114,254 +2114,263 @@ showUsage() { # Main program #--------------------- -# check the configuration and throw errors or warnings if needed -checkConfig +main(){ + # check the configuration and throw errors or warnings if needed + checkConfig -while true; do - options=( ) - allinstances=no - instances=( ) - args=( ) - command="$1" - shift - nrarg=0 + while true; do + options=( ) + allinstances=no + instances=( ) + args=( ) + command="$1" + shift + nrarg=0 - # Handle global options - case "$command" in - --verbose) - verbose=1 - continue - ;; - --dots) - progressDisplayType=dots - continue - ;; - --spinner) - progressDisplayType=spinner - continue - ;; - --cronjob) - inCronJob=true - continue - ;; - esac - - # get the number of arguments for commands that take arguments - case "$command" in - installmod) nrarg=1; ;; - uninstallmod) nrarg=1; ;; - reinstallmod) nrarg=1; ;; - broadcast) nrarg=1; ;; - rconcmd) nrarg=1; ;; - useconfig) nrarg=1; ;; - install-cronjob) nrarg=1; ;; - remove-cronjob) nrarg=1; ;; - remove-mods) nrarg=1; ;; - esac - - # Enumerate the options and arguments - while [ $# -ne 0 ]; do - case "$1" in - --) - shift - break - ;; - --args) - nrarg=$# - ;; + # Handle global options + case "$command" in --verbose) verbose=1 + continue ;; --dots) progressDisplayType=dots + continue ;; --spinner) progressDisplayType=spinner + continue ;; - --*) - options+=( "$1" ) + --cronjob) + inCronJob=true + continue ;; - @all) - allinstances=yes - ;; - @*) - instances+=( "${1#@}" ) - ;; - *) - if [ $nrarg -gt 0 ]; then - args+=( "$1" ) - (( nrarg-- )) - else + esac + + # get the number of arguments for commands that take arguments + case "$command" in + installmod) nrarg=1; ;; + uninstallmod) nrarg=1; ;; + reinstallmod) nrarg=1; ;; + broadcast) nrarg=1; ;; + rconcmd) nrarg=1; ;; + useconfig) nrarg=1; ;; + install-cronjob) nrarg=1; ;; + remove-cronjob) nrarg=1; ;; + remove-mods) nrarg=1; ;; + esac + + # Enumerate the options and arguments + while [ $# -ne 0 ]; do + case "$1" in + --) + shift break + ;; + --args) + nrarg=$# + ;; + --verbose) + verbose=1 + ;; + --dots) + progressDisplayType=dots + ;; + --spinner) + progressDisplayType=spinner + ;; + --*) + options+=( "$1" ) + ;; + @all) + allinstances=yes + ;; + @*) + instances+=( "${1#@}" ) + ;; + *) + if [ $nrarg -gt 0 ]; then + args+=( "$1" ) + (( nrarg-- )) + else + break + fi + ;; + esac + shift + done + + # handle non-instance separately + case "$command" in + upgrade-tools) + doUpgradeTools + exit + ;; + uninstall-tools) + doUninstallTools + exit + ;; + useconfig) + defaultinstance="${args[0]}" + continue + ;; + remove-mods) + doRemoveMods "${args[0]}" + if [ $# -eq 0 ]; then + exit 0 + else + continue fi ;; - esac - shift - done - - # handle non-instance separately - case "$command" in - upgrade-tools) - doUpgradeTools - exit - ;; - uninstall-tools) - doUninstallTools - exit - ;; - useconfig) - defaultinstance="${args[0]}" - continue - ;; - remove-mods) - doRemoveMods "${args[0]}" - if [ $# -eq 0 ]; then - exit 0 - else - continue - fi - ;; - list-instances) - doListAllInstances "${options[@]}" - exit - ;; - --version) - echo "Version: ${arkstVersion}" - echo "Channel: ${arkstChannel}" - if [ -n "${arkstCommit}" ]; then - echo "Commit: ${arkstCommit:0:7}" - fi - blobsize="$(sed "s@^arkstCommit=.*@arkstCommit=''@" "$0" | wc -c)" - echo "Blob SHA: $( (echo -ne "blob ${blobsize}\0"; sed "s@^arkstCommit=.*@arkstCommit=''@" "$0") | sha1sum | cut -d' ' -f1)" - exit 1 - ;; - -h|--help) - showUsage - exit 1 - ;; - "") - echo "arkmanager v${arkstVersion}: no command specified" - showUsage - exit 1 - ;; - esac - - # Handle no instances being specified - if [[ "${#instances[@]}" == 0 && "$allinstances" == "no" ]]; then - if [ -n "$defaultinstance" ]; then - instances=( "$defaultinstance" ) - else - echo "No instances supplied for command ${command} ${options[*]} ${args[*]}" - read -p "Do you wish to run this command for all instances?" -n 1 -r - echo - if [[ "$REPLY" =~ ^[Yy]$ ]]; then - allinstances=yes - else + list-instances) + doListAllInstances "${options[@]}" + exit + ;; + --version) + echo "Version: ${arkstVersion}" + echo "Channel: ${arkstChannel}" + if [ -n "${arkstCommit}" ]; then + echo "Commit: ${arkstCommit:0:7}" + fi + blobsize="$(sed "s@^arkstCommit=.*@arkstCommit=''@" "$0" | wc -c)" + echo "Blob SHA: $( (echo -ne "blob ${blobsize}\0"; sed "s@^arkstCommit=.*@arkstCommit=''@" "$0") | sha1sum | cut -d' ' -f1)" exit 1 + ;; + -h|--help) + showUsage + exit 1 + ;; + "") + echo "arkmanager v${arkstVersion}: no command specified" + showUsage + exit 1 + ;; + esac + + # Handle no instances being specified + if [[ "${#instances[@]}" == 0 && "$allinstances" == "no" ]]; then + if [ -n "$defaultinstance" ]; then + instances=( "$defaultinstance" ) + else + echo "No instances supplied for command ${command} ${options[*]} ${args[*]}" + read -p "Do you wish to run this command for all instances?" -n 1 -r + echo + if [[ "$REPLY" =~ ^[Yy]$ ]]; then + allinstances=yes + else + exit 1 + fi fi fi - fi - # Handle all instances being requested - if [[ "$allinstances" == "yes" ]]; then - instances=( $(getAllInstanceNames) ) - fi + # Handle all instances being requested + if [[ "$allinstances" == "yes" ]]; then + instances=( $(getAllInstanceNames) ) + fi - # Run the command for each instance requested - for instance in "${instances[@]}"; do - ( - echo "Running command '${command}' for instance '${instance}'" - useConfig "$instance" - checkConfig - - case "$command" in - run) - doRun - ;; - start) - doStart "${options[@]}" - ;; - stop) - doStop shutdown "${options[@]}" - ;; - restart) - doStop restart "${options[@]}" - echo "`timestamp`: stop" >> "$logdir/$arkmanagerLog" - ;; - cancelshutdown) - doCancelShutdown "${options[@]}" - ;; - install) - doInstall - ;; - update) - doUpdate "${options[@]}" - ;; - checkupdate) - checkForUpdate - ;; - installmod) - doInstallMod "${args[@]}" - ;; - uninstallmod) - doUninstallMod "${args[@]}" - ;; - reinstallmod) - doUninstallMod "${args[@]}" - doInstallMod "${args[@]}" - ;; - backup) - doBackup - ;; - broadcast) - doBroadcast "${args[@]}" - ;; - saveworld) - doSaveWorld - ;; - rconcmd) - rconcmd "${args[@]}" - ;; - status) - printStatus - ;; - install-cronjob) - doInstallCronJob "${args[@]}" "${options[@]}" - ;; - remove-cronjob) - doRemoveCronJob "${args[@]}" - ;; - *) - echo -n "arkmanager v${arkstVersion}: unknown command '$command' specified" - showUsage - exit 255 - ;; - esac - ) - laststatus=$? - if [ $laststatus -eq 255 ]; then - exit 1 - elif [ $laststatus -ne 0 ]; then - status=$laststatus - fi - done - - # Perform the restart portion of the restart command - if [[ "$command" == "restart" ]]; then - sleep 1 + # Run the command for each instance requested for instance in "${instances[@]}"; do ( + echo "Running command '${command}' for instance '${instance}'" useConfig "$instance" - doStart "${options[@]}" - echo "`timestamp`: start" >> "$logdir/$arkmanagerLog" - echo "`timestamp`: restart" >> "$logdir/$arkmanagerLog" + checkConfig + + case "$command" in + run) + doRun + ;; + start) + doStart "${options[@]}" + ;; + stop) + doStop shutdown "${options[@]}" + ;; + restart) + doStop restart "${options[@]}" + echo "`timestamp`: stop" >> "$logdir/$arkmanagerLog" + ;; + cancelshutdown) + doCancelShutdown "${options[@]}" + ;; + install) + doInstall + ;; + update) + doUpdate "${options[@]}" + ;; + checkupdate) + checkForUpdate + ;; + installmod) + doInstallMod "${args[@]}" + ;; + uninstallmod) + doUninstallMod "${args[@]}" + ;; + reinstallmod) + doUninstallMod "${args[@]}" + doInstallMod "${args[@]}" + ;; + backup) + doBackup + ;; + broadcast) + doBroadcast "${args[@]}" + ;; + saveworld) + doSaveWorld + ;; + rconcmd) + rconcmd "${args[@]}" + ;; + status) + printStatus + ;; + install-cronjob) + doInstallCronJob "${args[@]}" "${options[@]}" + ;; + remove-cronjob) + doRemoveCronJob "${args[@]}" + ;; + *) + echo -n "arkmanager v${arkstVersion}: unknown command '$command' specified" + showUsage + exit 255 + ;; + esac ) + laststatus=$? + if [ $laststatus -eq 255 ]; then + exit 1 + elif [ $laststatus -ne 0 ]; then + status=$laststatus + fi done - fi - if [ $# -eq 0 ]; then - break - fi -done + # Perform the restart portion of the restart command + if [[ "$command" == "restart" ]]; then + sleep 1 + for instance in "${instances[@]}"; do + ( + useConfig "$instance" + doStart "${options[@]}" + echo "`timestamp`: start" >> "$logdir/$arkmanagerLog" + echo "`timestamp`: restart" >> "$logdir/$arkmanagerLog" + ) + done + fi + + if [ $# -eq 0 ]; then + break + fi + done + + exit $status +} + +# Only execute main function if script is not being sourced +# by another script +if [[ "$(caller)" =~ ^0 ]]; then + main "$@" +fi -exit $status From 6e1627c80175013cba1253efdf362985416f1223 Mon Sep 17 00:00:00 2001 From: Ben Peddell Date: Sun, 12 Jun 2016 15:12:18 +1000 Subject: [PATCH 19/19] Fix update --force with arkStagingDir --- tools/arkmanager | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/arkmanager b/tools/arkmanager index a477210..afd72cb 100755 --- a/tools/arkmanager +++ b/tools/arkmanager @@ -1228,7 +1228,7 @@ doUpdate() { cd "$arkserverroot" - if isUpdateNeeded; then + if [ -n "$appupdate" ] || isUpdateNeeded; then appupdate=1 if [ -n "${arkStagingDir}" -a "${arkStagingDir}" != "${arkserverroot}" ]; then