From 2c877336d7024b8c31a251171c06fc1e15457b8a Mon Sep 17 00:00:00 2001 From: Ben Peddell Date: Wed, 2 Mar 2016 00:47:14 +1000 Subject: [PATCH 01/14] Use serverMapModId to set map name and MapModID option --- tools/arkmanager | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/tools/arkmanager b/tools/arkmanager index 52c7633..92a8559 100755 --- a/tools/arkmanager +++ b/tools/arkmanager @@ -593,7 +593,17 @@ doRun() { arkserveropts="$serverMap" if [ -n "$serverMapModId" ]; then - arkserveropts="-MapModID=$serverMapModId" + serverMap="$(perl -e ' + my $data; + { local $/; $data = <>; } + my $mapnamelen = unpack("@0 L<", $data); + my $mapname = substr($data, 4, $mapnamelen - 1); + $mapnamelen += 4; + my $mapfilelen = unpack("@" . ($mapnamelen + 4) . " L<", $data); + my $mapfile = substr($data, $mapnamelen + 8, $mapfilelen - 1); + print $mapfile; + ' <"${arkserverroot}/ShooterGame/Content/Mods/${serverMapModId}/mod.info")" + arkserveropts="${serverMap}?MapModID=${serverMapModId}" fi if [ -z "$arkserveropts" ]; then From 46e468d94112e1d4cd4d50ebf9f9a1a05291510d Mon Sep 17 00:00:00 2001 From: Ben Peddell Date: Mon, 7 Mar 2016 15:56:33 +1000 Subject: [PATCH 02/14] Return -1 from numplayers if server unreachable --- tools/arkmanager | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/arkmanager b/tools/arkmanager index 92a8559..88b30ff 100755 --- a/tools/arkmanager +++ b/tools/arkmanager @@ -577,7 +577,7 @@ function numPlayersConnected(){ my $sockaddr = pack_sockaddr_in($port, inet_aton($ARGV[1])); send($socket, "\xff\xff\xff\xffTSource Engine Query\x00", 0, $sockaddr); my $data = ""; - recv($socket, $data, 1400, 0) or (print "0" and exit(1)); + recv($socket, $data, 1400, 0) or (print "-1" and exit(1)); my ($servername, $mapname, $game, $fullname, $rest) = split(/\x00/, substr($data, 6), 5); my $players = ord(substr($rest, 2, 1)); print "$players\n"; From 1ea02d9f1ff5494e98a29c83c935edf3c3a608cd Mon Sep 17 00:00:00 2001 From: Ben Peddell Date: Wed, 9 Mar 2016 19:32:01 +1000 Subject: [PATCH 03/14] Fix a couple of potential issues with player count checking --- tools/arkmanager | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tools/arkmanager b/tools/arkmanager index 88b30ff..58b0bde 100755 --- a/tools/arkmanager +++ b/tools/arkmanager @@ -913,7 +913,7 @@ doWarn(){ doBroadcastWithEcho "$warnmsg" for (( min = warnminutes - 1; min >= warninterval; min-- )); do numplayers=$(numPlayersConnected) - if (( numplayers + 0 == 0 )); then + if (( (numplayers + 0) == 0 )); then echo "Nobody is connected. Shutting down immediately" return 0 fi @@ -940,7 +940,7 @@ doWarn(){ doBroadcastWithEcho "$warnmsg" if (( warnseconds >= 20 )); then numplayers=$(numPlayersConnected) - if (( numplayers + 0 == 0 )); then + if (( (numplayers + 0) == 0 )); then echo "Nobody is connected. Shutting down immediately" return 0 fi @@ -1078,7 +1078,7 @@ doUpdate() { fi elif [ "$updatetype" == "ifempty" ]; then numplayers=$(( $(numPlayersConnected) + 0 )) - if (( numplayers == 0 )); then + if (( numplayers != 0 )); then echo "${numplayers} players are still connected" return 1 fi From 9b714824f544fe28bd2d140b8e9460525c67f814 Mon Sep 17 00:00:00 2001 From: Ben Peddell Date: Tue, 17 May 2016 08:11:40 +1000 Subject: [PATCH 04/14] Fix an inconsistency between install.sh and arkmanager.init --- tools/systemd/arkmanager.init | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/systemd/arkmanager.init b/tools/systemd/arkmanager.init index fa760d2..c63be0c 100755 --- a/tools/systemd/arkmanager.init +++ b/tools/systemd/arkmanager.init @@ -1,6 +1,6 @@ #!/bin/bash -DAEMON=/usr/bin/arkmanager +DAEMON="/usr/bin/arkmanager" for service in $(${DAEMON} list-instances --brief); do case "$1" in From 92923df0ebc31a0ae9eddcbdf2502eabb8e90ae0 Mon Sep 17 00:00:00 2001 From: Ben Peddell Date: Sat, 28 May 2016 20:19:06 +1000 Subject: [PATCH 05/14] " \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 58b0bde..4000b47 100755 --- a/tools/arkmanager +++ b/tools/arkmanager @@ -320,10 +320,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 273879aa23f657d95d8c2e5bc22b471c2aab03e9 Mon Sep 17 00:00:00 2001 From: Ben Peddell Date: Sun, 12 Jun 2016 15:12:18 +1000 Subject: [PATCH 06/14] Fix update --force with arkStagingDir --- tools/arkmanager | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/arkmanager b/tools/arkmanager index 4000b47..37ffde6 100755 --- a/tools/arkmanager +++ b/tools/arkmanager @@ -1025,7 +1025,7 @@ doUpdate() { cd "$arkserverroot" - if isUpdateNeeded; then + if [ -n "$appupdate" ] || isUpdateNeeded; then appupdate=1 if [ -n "${arkStagingDir}" -a "${arkStagingDir}" != "${arkserverroot}" ]; then From 9382c43b5b941330679e8b19a2e639191430c9de Mon Sep 17 00:00:00 2001 From: Ben Peddell Date: Tue, 28 Jun 2016 19:58:26 +1000 Subject: [PATCH 07/14] Fix --stagingdir= parameter --- tools/arkmanager | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/arkmanager b/tools/arkmanager index 37ffde6..812cc10 100755 --- a/tools/arkmanager +++ b/tools/arkmanager @@ -987,7 +987,7 @@ doUpdate() { modupdate=1 elif [ "$arg" == "--backup" ]; then arkBackupPreUpdate=true - elif [[ "$arg" =~ "^--stagingdir=" ]]; then + elif [[ "$arg" =~ ^--stagingdir= ]]; then arkStagingDir="${ark#--stagingdir=}" elif [ "$arg" == "--downloadonly" ]; then downloadonly=1 From 8dda5784f1bdc71f81a3fd15dda3b8dfc73eafc9 Mon Sep 17 00:00:00 2001 From: Ben Peddell Date: Sat, 9 Jul 2016 14:26:43 +1000 Subject: [PATCH 08/14] Change systemd service type to forking --- tools/systemd/arkmanager.service | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/systemd/arkmanager.service b/tools/systemd/arkmanager.service index c2d4053..97ec6bd 100644 --- a/tools/systemd/arkmanager.service +++ b/tools/systemd/arkmanager.service @@ -5,7 +5,7 @@ After=network.target [Service] ExecStart=/usr/libexec/arkmanager/arkmanager.init start ExecStop=/usr/libexec/arkmanager/arkmanager.init stop -Type=oneshot +Type=forking [Install] WantedBy=multi-user.target From 7fbb47ad5c892f1357db12778442a2c6e57e38a3 Mon Sep 17 00:00:00 2001 From: Ben Peddell Date: Sat, 9 Jul 2016 16:34:43 +1000 Subject: [PATCH 09/14] Add RemainAfterExit=yes to arkmanager.service --- tools/systemd/arkmanager.service | 1 + 1 file changed, 1 insertion(+) diff --git a/tools/systemd/arkmanager.service b/tools/systemd/arkmanager.service index 97ec6bd..55ab37d 100644 --- a/tools/systemd/arkmanager.service +++ b/tools/systemd/arkmanager.service @@ -6,6 +6,7 @@ After=network.target ExecStart=/usr/libexec/arkmanager/arkmanager.init start ExecStop=/usr/libexec/arkmanager/arkmanager.init stop Type=forking +RemainAfterExit=yes [Install] WantedBy=multi-user.target From 7de6c8ed245b2cc699d828ca93b5f42f3817c976 Mon Sep 17 00:00:00 2001 From: Ben Peddell Date: Sun, 10 Jul 2016 18:44:49 +1000 Subject: [PATCH 10/14] Create the saved arks directory if it doesn't exist --- tools/arkmanager | 1 + 1 file changed, 1 insertion(+) diff --git a/tools/arkmanager b/tools/arkmanager index 812cc10..7d200ea 100755 --- a/tools/arkmanager +++ b/tools/arkmanager @@ -199,6 +199,7 @@ checkConfig() { # SavedArks directory if [ -n "$arkserverroot" ]; then local savedarksdir="${arkserverroot}/ShooterGame/Saved/${ark_AltSaveDirectoryName:-SavedArks}" + mkdir -p "${savedarksdir}" if [ ! -w "${savedarksdir}" ]; then echo -e "[" "$RED" "ERROR" "$NORMAL" "]" "\tThe ARK SavedArks directory is not writable, and saveworld will fail" fi From 30af1a92a13d0ab35f2e7d77153e2db313a10230 Mon Sep 17 00:00:00 2001 From: Andrej Rode Date: Wed, 13 Jul 2016 14:18:15 +0200 Subject: [PATCH 11/14] Default non-privileged instance-config path Default non-privileged instance-config path seems to have changed to ~/.config/ --- README.asciidoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.asciidoc b/README.asciidoc index 31abc77..00ed4ac 100644 --- a/README.asciidoc +++ b/README.asciidoc @@ -368,7 +368,7 @@ Instance config files Instance config files are stored under `/etc/arkmanager/instances/.cfg`, -`~/.local/config/arkmanager/instances/.cfg` +`~/.config/arkmanager/instances/.cfg` or as specified in the `configfile_` options in the global config. From beaa42d80f8ad371e0ac531b25438318780b4974 Mon Sep 17 00:00:00 2001 From: Ben Peddell Date: Sat, 30 Jul 2016 03:32:00 +1000 Subject: [PATCH 12/14] Get version from version.txt --- tools/arkmanager | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/tools/arkmanager b/tools/arkmanager index 90a4f23..a54a668 100755 --- a/tools/arkmanager +++ b/tools/arkmanager @@ -1061,6 +1061,7 @@ printWarnMessage(){ fi reason="${reason//\{time\}/${msgtime}}" reason="${reason//\{modnamesupdated\}/${modnamesupdated}}" + reason="${reason//\{version\}/${arkversion}}" msg="${msg//\{reason\}/${reason}}" else if [ "$1" == "update" ]; then @@ -1337,6 +1338,7 @@ doUpdate() { cp -al "$arkserverroot/linux64/." "$arkStagingDir/linux64" cp -al "$arkserverroot/PackageInfo.bin" "$arkStagingDir/PackageInfo.bin" cp -al "$arkserverroot/steamclient.so" "$arkStagingDir/steamclient.so" + cp -al "$arkserverroot/version.txt" "$arkStagingDir/version.txt" cp -a "$arkserverroot/steamapps/." "$arkStagingDir/steamapps" else rsync -a "$arkserverroot/." "$arkStagingDir/." @@ -1370,6 +1372,7 @@ doUpdate() { fi echo "Not applying update - download-only enabled" elif [ -n "$appupdate" -o -n "$modupdate" ]; then + arkversion="$(<"$arkserverroot/version.txt")" if isTheServerRunning; then if [ "$updatetype" == "safe" ]; then while [ ! `find $arkserverroot/ShooterGame/Saved/SavedArks -mmin -1 -name ${serverMap##*/}.ark` ]; do @@ -1418,6 +1421,7 @@ doUpdate() { cp -alu --remove-destination "$arkStagingDir/linux64/." "$arkserverroot/linux64" cp -alu --remove-destination "$arkStagingDir/PackageInfo.bin" "$arkserverroot/PackageInfo.bin" cp -alu --remove-destination "$arkStagingDir/steamclient.so" "$arkserverroot/steamclient.so" + cp -alu --remove-destination "$arkStagingDir/version.txt" "$arkserverroot/version.txt" cp -au --remove-destination "$arkStagingDir/steamapps/." "$arkserverroot/steamapps" else rsync -a "$arkStagingDir/." "$arkserverroot" @@ -2107,7 +2111,8 @@ printStatus(){ fi getCurrentVersion - echo -e "$NORMAL" "Server version: " "$GREEN" $instver "$NORMAL" + echo -e "$NORMAL" "Server build ID: " "$GREEN" $instver "$NORMAL" + echo -e "$NORMAL" "Server version: " "$GREEN" "$(<"$arkserverroot/version.txt")" "$NORMAL" } getAllInstanceNames(){ From 89f765eb7b4f8eedeacf227c1840fd757653028f Mon Sep 17 00:00:00 2001 From: Ben Peddell Date: Sat, 30 Jul 2016 03:35:15 +1000 Subject: [PATCH 13/14] Bypass Primitive+ modid --- tools/arkmanager | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/tools/arkmanager b/tools/arkmanager index 7d200ea..84e9b8e 100755 --- a/tools/arkmanager +++ b/tools/arkmanager @@ -1218,6 +1218,10 @@ doDownloadMod(){ # doDownloadAllMods(){ for modid in $(getModIds); do + # Bypass the 111111111 modid used by Primitive+ + if [ "$modid" = "111111111" ]; then + continue + fi doDownloadMod $modid || return 1 done } From 8a59a8c78c2b1cc052207474e5be132a54fb10b5 Mon Sep 17 00:00:00 2001 From: Ben Peddell Date: Sun, 31 Jul 2016 17:37:08 +1000 Subject: [PATCH 14/14] Exclude Primitive+ from mod download and extraction --- tools/arkmanager | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/tools/arkmanager b/tools/arkmanager index 84e9b8e..2b9fc93 100755 --- a/tools/arkmanager +++ b/tools/arkmanager @@ -1184,6 +1184,11 @@ doDownloadMod(){ cd "$steamcmdroot" retries=10 + # Bypass the 111111111 modid used by Primitive+ + if [ "$modid" = "111111111" ]; then + return 0 + fi + while true; do echo -n "Downloading mod $modid" runSteamCMDspinner +workshop_download_item $mod_appid $modid @@ -1218,10 +1223,6 @@ doDownloadMod(){ # doDownloadAllMods(){ for modid in $(getModIds); do - # Bypass the 111111111 modid used by Primitive+ - if [ "$modid" = "111111111" ]; then - continue - fi doDownloadMod $modid || return 1 done } @@ -1235,6 +1236,11 @@ isModUpdateNeeded(){ local moddestdir="$arkserverroot/ShooterGame/Content/Mods/$modid" local modbranch="${mod_branch:-Windows}" + # Bypass the 111111111 modid used by Primitive+ + if [ "$modid" = "111111111" ]; then + return 1 + fi + for varname in "${!mod_branch_@}"; do if [ "mod_branch_$modid" == "$varname" ]; then modbranch="${!varname}" @@ -1282,6 +1288,11 @@ doExtractMod(){ local moddestdir="$arkserverroot/ShooterGame/Content/Mods/$modid" local modbranch="${mod_branch:-Windows}" + # Bypass the 111111111 modid used by Primitive+ + if [ "$modid" = "111111111" ]; then + return 0 + fi + for varname in "${!mod_branch_@}"; do if [ "mod_branch_$modid" == "$varname" ]; then modbranch="${!varname}"