From 2ef86c9028e6b3a3e30bb4d33658b7af5fab6c1c Mon Sep 17 00:00:00 2001 From: Ben Peddell Date: Sat, 12 Sep 2015 18:13:29 +1000 Subject: [PATCH 01/85] Add mod installation support --- tools/arkmanager | 86 ++++++++++++++++++++++++++++++++++++++++++++ tools/arkmanager.cfg | 1 + 2 files changed, 87 insertions(+) diff --git a/tools/arkmanager b/tools/arkmanager index 0eaef0d..2db1b1a 100755 --- a/tools/arkmanager +++ b/tools/arkmanager @@ -42,6 +42,9 @@ maxOpenFiles=100000 arkmanagerLog="arkmanager.log" # here are logged the actions performed by arkmanager arkserverLog="arkserver.log" # here is logged the output of ShooterGameServer +appid="${appid:-376030}" +mod_appid="${mod_appid:-346110}" + # Script version arkstVersion="1.3" arkstCommit='' @@ -442,6 +445,89 @@ doSafeUpdate(){ fi } +# +# Downloads mod and installs it into mods directory +# +doInstallMod(){ + local modid=$1 + cd "$steamcmdroot" + ./$steamcmdexec +login anonymous +workshop_download_item $mod_appid $modid +quit + + local modsrcdir="$steamcmdroot/steamapps/workshop/content/$mod_appid/$modid" + local moddestdir="$arkserverroot/ShooterGame/Content/Mods/$modid" + if [ -f "$modsrcdir/mod.info" ]; then + echo "Mod $modid downloaded" + echo "Copying files to $moddestdir" + if [ -f "$modsrcdir/LinuxNoEditor/mod.info" ]; then + modsrcdir="$modsrcdir/LinuxNoEditor" + fi + + find "$modsrcdir" -type d -printf "$moddestdir/%P\0" | xargs -0 -r mkdir -p + find "$modsrcdir" -type f ! \( -name '*.z' -or -name '*.z.uncompressed_size' \) -printf "%P\0" | xargs -0 -r tar -c -C "$modsrcdir" | tar -x -C "$moddestdir" + find "$modsrcdir" -type f -name '*.z' -printf "%P\n" | while read f; do + printf "%10d %s " "`stat -c '%s' "$modsrcdir/$f"`" "${f%.z}" + perl -M'Compress::Raw::Zlib' -e ' + my $sig; + read(STDIN, $sig, 8) or die "Unable to read compressed file"; + if ($sig != "\xC1\x83\x2A\x9E\x00\x00\x00\x00"){ + die "Bad file magic"; + } + my $data; + read(STDIN, $data, 24) or die "Unable to read compressed file"; + my ($chunksizelo, $chunksizehi, + $comprtotlo, $comprtothi, + $uncomtotlo, $uncomtothi) = unpack("(LLLLLL)<", $data); + my @chunks = (); + my $comprused = 0; + while ($comprused < $comprtotlo) { + read(STDIN, $data, 16) or die "Unable to read compressed file"; + my ($comprsizelo, $comprsizehi, + $uncomsizelo, $uncomsizehi) = unpack("(LLLL)<", $data); + push @chunks, $comprsizelo; + $comprused += $comprsizelo; + } + foreach my $comprsize (@chunks) { + read(STDIN, $data, $comprsize) or die "File read failed"; + my ($inflate, $status) = new Compress::Raw::Zlib::Inflate(); + my $output; + $status = $inflate->inflate($data, $output, 1); + if ($status != Z_STREAM_END) { + die "Bad compressed stream; status: " . ($status); + } + if (length($data) != 0) { + die "Unconsumed data in input" + } + print $output; + } + ' <"$modsrcdir/$f" >"$moddestdir/${f%.z}" + echo -ne "\r\\033[K" + done + + 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); + print pack("L< L< L< Z8 L< C L< L<", $ARGV[0], 0, 8, "ModName", 1, 0, 1, $mapfilelen); + print $mapfile; + print "\x33\xFF\x22\xFF\x02\x00\x00\x00\x01"; + ' $modid <"$moddestdir/mod.info" >"$moddestdir/.mod" + + if [ -f "$moddestdir/modmeta.info" ]; then + cat "$moddestdir/modmeta.info" >>"$moddestdir/.mod" + else + echo -ne '\x01\x00\x00\x00\x08\x00\x00\x00ModType\x00\x02\x00\x00\x001\x00' >>"$moddestdir/.mod" + fi + + echo "Mod $modid installed" + else + echo "Mod $modid was not successfully downloaded" + fi +} + # # Copies server state to a backup directory # diff --git a/tools/arkmanager.cfg b/tools/arkmanager.cfg index 394230a..459c543 100644 --- a/tools/arkmanager.cfg +++ b/tools/arkmanager.cfg @@ -32,6 +32,7 @@ logdir="/var/log/arktools" # Logs path # steamdb specific appid=376030 # Linux server App ID +mod_appid=346110 # App ID for mods # alternate configs # example for config name "ark1": From 5c5cd58e341466dd621f8082d54ce0cc258e344c Mon Sep 17 00:00:00 2001 From: Ben Peddell Date: Sat, 12 Sep 2015 18:53:13 +1000 Subject: [PATCH 02/85] Retry mod download after steamcmd timeouts --- tools/arkmanager | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/tools/arkmanager b/tools/arkmanager index 2db1b1a..44e7fa2 100755 --- a/tools/arkmanager +++ b/tools/arkmanager @@ -450,11 +450,20 @@ doSafeUpdate(){ # doInstallMod(){ local modid=$1 - cd "$steamcmdroot" - ./$steamcmdexec +login anonymous +workshop_download_item $mod_appid $modid +quit - local modsrcdir="$steamcmdroot/steamapps/workshop/content/$mod_appid/$modid" + local moddldir="$steamcmdroot/steamapps/workshop/downloads/$mod_appid/$modid" local moddestdir="$arkserverroot/ShooterGame/Content/Mods/$modid" + local dlsize=0 + cd "$steamcmdroot" + + while true; do + ./$steamcmdexec +login anonymous +workshop_download_item $mod_appid $modid +quit + if [ ! -d "$moddldir" ]; then break; fi + local newsize="`du -s "$moddldir" | cut -f1`" + if [ $newsize -eq $dlsize ]; then break; fi + dlsize=$newsize + done + if [ -f "$modsrcdir/mod.info" ]; then echo "Mod $modid downloaded" echo "Copying files to $moddestdir" From 5b9a3db3c6e2a29334ace7f9c9f0078a80f675db Mon Sep 17 00:00:00 2001 From: Ben Peddell Date: Sat, 12 Sep 2015 18:54:34 +1000 Subject: [PATCH 03/85] Add installmod command --- tools/arkmanager | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/tools/arkmanager b/tools/arkmanager index 44e7fa2..80fa4a3 100755 --- a/tools/arkmanager +++ b/tools/arkmanager @@ -748,6 +748,10 @@ while true; do checkupdate) checkForUpdate ;; + installmod) + doInstallMod "$2" + shift + ;; backup) doBackup ;; From c0793a818632e3507d561db24a97aec82793f330 Mon Sep 17 00:00:00 2001 From: Ben Peddell Date: Mon, 14 Sep 2015 17:02:07 +1000 Subject: [PATCH 04/85] Make warning broadcast message customisable --- tools/arkmanager | 17 +++++++++++++++-- tools/arkmanager.cfg | 5 +++++ 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/tools/arkmanager b/tools/arkmanager index 65b02c1..df92d7d 100755 --- a/tools/arkmanager +++ b/tools/arkmanager @@ -554,6 +554,7 @@ doWarnUpdate(){ if isUpdateNeeded; then local pid=`getServerPID` if [ -n "$pid" ]; then + local warnmsg local warnminutes=$(( arkwarnminutes )) if (( warnminutes == 0 )); then warnminutes=60 @@ -564,9 +565,15 @@ doWarnUpdate(){ for warninterval in "${warnintervals[@]}"; do if [ "`getServerPID`" != "$pid" ]; then echo "Server has stopped. Aborting update" + return 1 fi if (( arkwarnminutes > warninterval )); then - doBroadcastWithEcho "This ARK server will shutdown for an update in $warnminutes minutes" + if [ -n "$msgWarnUpdateMinutes" ]; then + warnmsg="$(printf "$msgWarnUpdateMinutes" "$warnminutes")" + else + warnmsg="$(printf "This ARK server will shutdown for an update in %d minutes" "$warnminutes")" + fi + doBroadcastWithEcho "$warnmsg" sleep $(( warnminutes - warninterval ))m warnminutes=$warninterval fi @@ -577,8 +584,14 @@ doWarnUpdate(){ for warninterval in "${warnintervals[@]}"; do if [ "`getServerPID`" != "$pid" ]; then echo "Server has stopped. Aborting update" + return 1 fi - doBroadcastWithEcho "This ARK server will shutdown for an update in $warnseconds seconds" + if [ -n "$msgWarnUpdateMinutes" ]; then + warnmsg="$(printf "$msgWarnUpdateMinutes" "$warnminutes")" + else + warnmsg="$(printf "This ARK server will shutdown for an update in %d seconds" "$warnseconds")" + fi + doBroadcastWithEcho "$warnmsg" sleep $(( warnseconds - warninterval ))s done fi diff --git a/tools/arkmanager.cfg b/tools/arkmanager.cfg index 8c7f165..6d55038 100644 --- a/tools/arkmanager.cfg +++ b/tools/arkmanager.cfg @@ -12,6 +12,11 @@ arkserverexec="ShooterGame/Binaries/Linux/ShooterGameServer" # name of AR arkbackupdir="/home/steam/ARK-Backups" # path to backup directory arkwarnminutes="60" # number of minutes to warn players when using update --warn +# Update warning messages +# Modify as desired, putting the %d replacement operator where the number belongs +msgWarnUpdateMinutes="This ARK server will shutdown for an update in %d minutes" +msgWarnUpdateSeconds="This ARK server will shutdown for an update in %d seconds" + # ARK server options - use ark_= # comment out these values if you want to define them # inside your GameUserSettings.ini file From 0080e3c81a9c1b7ad3be52a28bf8badb5a9bfa5a Mon Sep 17 00:00:00 2001 From: Ben Peddell Date: Fri, 7 Aug 2015 23:28:22 +1000 Subject: [PATCH 05/85] Add start --all and stop --all commands These commands will start and stop all servers specified in the configfile_xxxxxx settings in the config file --- tools/arkmanager | 60 +++++++++++++++++++++++++++++++++++++++++--- tools/arkmanager.cfg | 2 +- 2 files changed, 57 insertions(+), 5 deletions(-) diff --git a/tools/arkmanager b/tools/arkmanager index 80fa4a3..76984f9 100755 --- a/tools/arkmanager +++ b/tools/arkmanager @@ -338,6 +338,21 @@ doStart() { fi } +# +# starts all servers specified by configfile_xxxxx in config file +# +doStartAll(){ + doStart + for cfg in "${!configfile_@}"; do + if [ -f "${!cfg}" ]; then + ( + source "${!cfg}" + doStart + ) + fi + done +} + # # stop the ARK server # @@ -371,6 +386,21 @@ doStop() { fi } +# +# stops all servers specified by configfile_xxxxx in config file +# +doStopAll(){ + doStop + for cfg in "${!configfile_@}"; do + if [ -f "${!cfg}" ]; then + ( + source "${!cfg}" + doStop + ) + fi + done +} + # # install of ARK server # @@ -718,16 +748,35 @@ checkConfig while true; do case "$1" in start) - doStart + if [ "$2" == "--all" ]; then + doStartAll + shift + else + doStart + fi ;; stop) - doStop + if [ "$2" == "--all" ]; then + doStopAll + shift + else + doStop + fi ;; restart) - doStop + if [ "$2" == "--all" ]; then + doStopAll + else + doStop + fi echo "`timestamp`: stop" >> "$logdir/$arkmanagerLog" sleep 1 - doStart + if [ "$2" == "--all" ]; then + doStartAll + shift + else + doStart + fi echo "`timestamp`: start" >> "$logdir/$arkmanagerLog" echo "`timestamp`: restart" >> "$logdir/$arkmanagerLog" ;; @@ -786,8 +835,11 @@ while true; do echo "checkupdate Check for a new ARK server version" echo "install Install the ARK server files from steamcmd" echo "restart Stops the server and then starts it" + echo "restart --all Restarts all servers specified in configfile_xxxxx" echo "start Starts the server" + echo "start --all Starts all servers specified in configfile_xxxxx" echo "stop Stops the server" + echo "stop --all Stops all servers specified in configfile_xxxxx" echo "status Returns the status of the current ARK server instance" echo "update Check for a new ARK server version, if needed, stops the server, updates it, and starts it again" echo "update --force Apply update without check the current version" diff --git a/tools/arkmanager.cfg b/tools/arkmanager.cfg index 459c543..6bba610 100644 --- a/tools/arkmanager.cfg +++ b/tools/arkmanager.cfg @@ -36,4 +36,4 @@ mod_appid=346110 # App ID for # alternate configs # example for config name "ark1": -#config_ark1="/path/to/config/file" +#configfile_ark1="/path/to/config/file" From d6fc1f7078c4fad6cd220bdc1b1c9ef66b5b8cfb Mon Sep 17 00:00:00 2001 From: Ben Peddell Date: Fri, 7 Aug 2015 23:40:22 +1000 Subject: [PATCH 06/85] Update init scripts to use start/stop/restart --all --- tools/lsb/arkdaemon | 6 +++--- tools/openrc/arkdaemon | 4 ++-- tools/redhat/arkdaemon | 6 +++--- tools/systemd/arkdeamon.service | 4 ++-- 4 files changed, 10 insertions(+), 10 deletions(-) diff --git a/tools/lsb/arkdaemon b/tools/lsb/arkdaemon index f728ede..484d5d8 100755 --- a/tools/lsb/arkdaemon +++ b/tools/lsb/arkdaemon @@ -29,7 +29,7 @@ case "$1" in start) log_daemon_msg "Starting" "$NAME" ulimit -n 100000 - su -s /bin/sh -c "$DAEMON start" $steamcmd_user + su -s /bin/sh -c "$DAEMON start --all" $steamcmd_user sleep 5 PID=`ps -ef | grep $NAME | grep -v grep | awk '{print $2}'` if [ -n "$PID" ]; then @@ -42,7 +42,7 @@ case "$1" in stop) log_daemon_msg "Stopping" "$NAME" - su -s /bin/sh -c "$DAEMON stop" $steamcmd_user + su -s /bin/sh -c "$DAEMON stop --all" $steamcmd_user sleep 5 PID=`ps -ef | grep $NAME | grep -v grep | awk '{print $2}'` if [ -n "$PID" ]; then @@ -55,7 +55,7 @@ case "$1" in restart) ulimit -n 100000 - su -s /bin/sh -c "$DAEMON restart" $steamcmd_user + su -s /bin/sh -c "$DAEMON restart --all" $steamcmd_user ;; status) diff --git a/tools/openrc/arkdaemon b/tools/openrc/arkdaemon index 4c2ddd0..5aa9340 100644 --- a/tools/openrc/arkdaemon +++ b/tools/openrc/arkdaemon @@ -15,7 +15,7 @@ depend(){ start(){ ebegin "Starting ARK manager daemon" ulimit -n 100000 - su -s /bin/sh -c "$DAEMON start" $steamcmd_user + su -s /bin/sh -c "$DAEMON start --all" $steamcmd_user sleep 5 PID=`ps -ef | grep $NAME | grep -v grep | awk '{print $2}'` if [ -n "$PID" ]; then @@ -27,7 +27,7 @@ start(){ stop(){ ebegin "Stopping ARK manager daemon" - su -s /bin/sh -c "$DAEMON start" $steamcmd_user + su -s /bin/sh -c "$DAEMON stop --all" $steamcmd_user sleep 5 PID=`ps -ef | grep $NAME | grep -v grep | awk '{print $2}'` if [ -n "$PID" ]; then diff --git a/tools/redhat/arkdaemon b/tools/redhat/arkdaemon index 411bcd1..fa0ed1a 100755 --- a/tools/redhat/arkdaemon +++ b/tools/redhat/arkdaemon @@ -43,7 +43,7 @@ case "$1" in start) echo -n "Starting $NAME: " ulimit -n 100000 - su -s /bin/sh -c "$DAEMON start" $steamcmd_user > /dev/null + su -s /bin/sh -c "$DAEMON start --all" $steamcmd_user > /dev/null sleep 5 PID=`ps -ef | grep $NAME | grep -v grep | awk '{print $2}'` if [ -n "$PID" ]; then @@ -59,7 +59,7 @@ case "$1" in stop) echo -n "Stopping $NAME: " - su -s /bin/sh -c "$DAEMON stop" $steamcmd_user > /dev/null + su -s /bin/sh -c "$DAEMON stop --all" $steamcmd_user > /dev/null sleep 5 PID=`ps -ef | grep $NAME | grep -v grep | awk '{print $2}'` if [ -n "$PID" ]; then @@ -76,7 +76,7 @@ case "$1" in restart) echo -n "Restarting $NAME: " ulimit -n 100000 - su -s /bin/sh -c "$DAEMON restart" $steamcmd_user > /dev/null + su -s /bin/sh -c "$DAEMON restart --all" $steamcmd_user > /dev/null echo "OK" ;; diff --git a/tools/systemd/arkdeamon.service b/tools/systemd/arkdeamon.service index d1fb5da..a92f7ed 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=/usr/libexec/arkmanager/arkmanager.init start -ExecStop=/usr/libexec/arkmanager/arkmanager.init stop +ExecStart=/usr/libexec/arkmanager/arkmanager.init start --all +ExecStop=/usr/libexec/arkmanager/arkmanager.init stop --all Type=forking PIDFile=/var/run/arkmanager.pid From b294cb622a4a185e7c7c1f8647cb94f78c55e09d Mon Sep 17 00:00:00 2001 From: Ben Peddell Date: Sat, 15 Aug 2015 22:18:23 +1000 Subject: [PATCH 07/85] ARK -flag support --- tools/arkmanager | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/tools/arkmanager b/tools/arkmanager index 76984f9..1ef81a4 100755 --- a/tools/arkmanager +++ b/tools/arkmanager @@ -295,6 +295,8 @@ doRun() { arkserveropts="-MapModID=$serverMapModId" fi + arkextraopts=( ) + # bring in ark_... options for varname in "${!ark_@}"; do name="${varname#ark_}" @@ -312,12 +314,23 @@ doRun() { fi done + # bring in arkflag_... flags + for varname in "${!arkflag_@}"; do + name="${varname#arkflag_}" + val="${!varname}" + + if [ -n "$val" ]; then + arkextraopts=( "${arkextraopts[@]}" "-${name}" ) + fi + done + + arkserveropts="${arkserveropts}?listen" # run the server in background echo "`timestamp`: start" # set max open files limit before we start the server ulimit -n $maxOpenFiles - "$arkserverroot/$arkserverexec" "$arkserveropts" + "$arkserverroot/$arkserverexec" "$arkserveropts" "${arkextraopts[@]}" echo "`timestamp`: exited with status $?" } From 544a78267d50764f5d16c52723bcd8014a4d9039 Mon Sep 17 00:00:00 2001 From: Ben Peddell Date: Sat, 15 Aug 2015 22:33:51 +1000 Subject: [PATCH 08/85] Add example config options to config --- tools/arkmanager.cfg | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/tools/arkmanager.cfg b/tools/arkmanager.cfg index 6bba610..d635225 100644 --- a/tools/arkmanager.cfg +++ b/tools/arkmanager.cfg @@ -16,6 +16,7 @@ arkbackupdir="/home/steam/ARK-Backups" # path to ba # inside your GameUserSettings.ini file serverMap="TheIsland" # server map (default TheIsland) #serverMapModId="469987622" # Uncomment this to specify the Map Mod Id ( in http://steamcommunity.com/sharedfiles/filedetails/?id=) +#ark_TotalConversionMod="496735411" # Uncomment this to specify a total-conversion mod ark_RCONEnabled="True" # Enable RCON Protocol ark_RCONPort="32330" # RCON Port ark_SessionName="ARK Server Tools" # if your session name needs special characters please use the .ini instead @@ -26,6 +27,10 @@ ark_ServerAdminPassword="keyboardcat" # ARK server ark_MaxPlayers="70" #ark_GameModIds="487516323,487516324,487516325" # Uncomment to specify additional mods by Mod Id separated by commas +# ARK server flags - use arkflag_=true +#arkflag_OnlyAdminRejoinAsSpectator=true # Uncomment to only allow admins to rejoin as spectator +#arkflag_DisableDeathSpectator=true # Uncomment to disable players from becoming spectators when they die + # 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 3eb123fa6131df3c33c81b617e2f4b593a9b3eae Mon Sep 17 00:00:00 2001 From: Ben Peddell Date: Sat, 15 Aug 2015 22:25:48 +1000 Subject: [PATCH 09/85] Add AltSaveDirectoryName support in backup --- tools/arkmanager | 16 +++++++++++----- tools/arkmanager.cfg | 1 + 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/tools/arkmanager b/tools/arkmanager index 1ef81a4..3e789a5 100755 --- a/tools/arkmanager +++ b/tools/arkmanager @@ -586,6 +586,7 @@ doInstallMod(){ doBackup(){ local datestamp=`date +"%Y-%m-%d_%H.%M.%S"` local backupdir="${arkbackupdir}/${datestamp}" + local savedir="SavedArks" mkdir -p "$backupdir" # extract the map name from the active map mod @@ -602,17 +603,22 @@ doBackup(){ ' <"${arkserverroot}/ShooterGame/Content/Mods/${serverMapModId}/mod.info")" fi + # Get save directory name + if [ -n "${ark_AltSaveDirectoryName}" ]; then + savedir="${ark_AltSaveDirectoryName}" + fi + # ARK server uses Write-Unlink-Rename echo -ne "${NORMAL} Copying ARK world file " - cp -p "${arkserverroot}/ShooterGame/Saved/SavedArks/${serverMap##*/}.ark" "${backupdir}/${serverMap##*/}.ark" + cp -p "${arkserverroot}/ShooterGame/Saved/${savedir}/${serverMap##*/}.ark" "${backupdir}/${serverMap##*/}.ark" if [ ! -f "${backupdir}/${serverMap##*/}.ark" ]; then sleep 2 - cp -p "${arkserverroot}/ShooterGame/Saved/SavedArks/${serverMap##*/}.ark" "${backupdir}/${serverMap##*/}.ark" + cp -p "${arkserverroot}/ShooterGame/Saved/${savedir}/${serverMap##*/}.ark" "${backupdir}/${serverMap##*/}.ark" fi # If both attempts fail, server may have # crashed between unlink and rename if [ ! -f "${backupdir}/${serverMap##*/}.ark" ]; then - cp -p "${arkserverroot}/ShooterGame/Saved/SavedArks/${serverMap##*/}.tmp" "${backupdir##*/}/${serverMap##*/}.ark" + cp -p "${arkserverroot}/ShooterGame/Saved/${savedir}/${serverMap##*/}.tmp" "${backupdir##*/}/${serverMap##*/}.ark" fi if [ -f "${backupdir}/${serverMap##*/}.ark" ]; then echo -e "${NORMAL}[ ${GREEN}OK${NORMAL} ]" @@ -625,7 +631,7 @@ doBackup(){ # ARK server uses a non-blocking lock and will # fail to update the file if the lock fails. echo -e "${NORMAL} Copying ARK profile files" - for f in "${arkserverroot}/ShooterGame/Saved/SavedArks/"*.arkprofile; do + for f in "${arkserverroot}/ShooterGame/Saved/${savedir}/"*.arkprofile; do echo -ne "${NORMAL} ${f##*/} " cp -p "${f}" "${backupdir}/${f##*/}" if [ ! -s "${backupdir}/${f##*/}" ]; then @@ -646,7 +652,7 @@ doBackup(){ # ARK server uses Lock-Truncate-Write-Unlock echo -e "${NORMAL} Copying ARK tribe files " - for f in "${arkserverroot}/ShooterGame/Saved/SavedArks/"*.arktribe; do + for f in "${arkserverroot}/ShooterGame/Saved/${savedir}/"*.arktribe; do echo -ne "${NORMAL} ${f##*/} " cp -p "${f}" "${backupdir}/${f##*/}" if [ ! -s "${backupdir}/${f##*/}" ]; then diff --git a/tools/arkmanager.cfg b/tools/arkmanager.cfg index d635225..aac1599 100644 --- a/tools/arkmanager.cfg +++ b/tools/arkmanager.cfg @@ -26,6 +26,7 @@ ark_ServerPassword="" # ARK server ark_ServerAdminPassword="keyboardcat" # ARK server admin password, KEEP IT SAFE! ark_MaxPlayers="70" #ark_GameModIds="487516323,487516324,487516325" # Uncomment to specify additional mods by Mod Id separated by commas +#ark_AltSaveDirectoryName="SotF" # Uncomment to specify a different save directory name # ARK server flags - use arkflag_=true #arkflag_OnlyAdminRejoinAsSpectator=true # Uncomment to only allow admins to rejoin as spectator From b0e41d088f1142412f705852842d0add06e65ce7 Mon Sep 17 00:00:00 2001 From: Ben Peddell Date: Mon, 14 Sep 2015 17:17:15 +1000 Subject: [PATCH 10/85] Add update --warn to readme --- README.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/README.md b/README.md index 9cafe98..63b194c 100644 --- a/README.md +++ b/README.md @@ -88,6 +88,9 @@ Apply update without check the current version #### arkmanager update --safe Waits for server to perform world save and then updates. +#### arkmanager update --warn +Warns the players for a configurable amount of time before updating. Should be suitable for adding to a cron job. + #### arkmanager status Get the status of the server. Show if the process is running, if the server is up and the current version number From c329f28fee40b7ad6d5ea0620011d2f08bac8b2f Mon Sep 17 00:00:00 2001 From: Ben Peddell Date: Wed, 16 Sep 2015 18:45:19 +1000 Subject: [PATCH 11/85] Move --force argument into doUpdate --- tools/arkmanager | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/tools/arkmanager b/tools/arkmanager index f4b1d56..2db9e71 100755 --- a/tools/arkmanager +++ b/tools/arkmanager @@ -448,9 +448,21 @@ doInstall() { # Stop the server, update it and then start it back. # doUpdate() { + local appupdate= + + for arg in "$@"; do + if [ "$arg" == "--force" ]; then + appupdate=1 + fi + done + cd "$arkserverroot" if isUpdateNeeded; then + appupdate=1 + fi + + if [ -n "$appupdate" ]; then forceUpdate else echo "Your server is already up to date! The most recent version is ${bnumber}." @@ -870,7 +882,7 @@ while true; do ;; update) if [ "$2" == "--force" ]; then - forceUpdate + doUpdate --force shift elif [ "$2" == "--safe" ]; then doSafeUpdate From e3dbe2847a09e69b407ac996d132e86cd9a1fbf9 Mon Sep 17 00:00:00 2001 From: Ben Peddell Date: Wed, 16 Sep 2015 18:48:42 +1000 Subject: [PATCH 12/85] Merge safe update into doUpdate --- tools/arkmanager | 34 ++++++++++++++-------------------- 1 file changed, 14 insertions(+), 20 deletions(-) diff --git a/tools/arkmanager b/tools/arkmanager index 2db9e71..5c2710a 100755 --- a/tools/arkmanager +++ b/tools/arkmanager @@ -449,10 +449,13 @@ doInstall() { # doUpdate() { local appupdate= + local updatetype=normal for arg in "$@"; do if [ "$arg" == "--force" ]; then appupdate=1 + elif [ "$arg" == "--safe" ]; then + updatetype=safe fi done @@ -463,6 +466,16 @@ doUpdate() { fi if [ -n "$appupdate" ]; then + if isTheServerRunning; then + if [ "$updatetype" == "safe" ]; then + while [ ! `find $arkserverroot/ShooterGame/Saved/SavedArks -mmin -1 -name ${serverMap##*/}.ark` ]; do + echo "`timestamp`: Save file older than 1 minute. Delaying update." >> "$logdir/update.log" + sleep 30s + done + echo "`timestamp`: Save file newer than 1 minute. Performing an update." >> "$logdir/update.log" + fi + fi + forceUpdate else echo "Your server is already up to date! The most recent version is ${bnumber}." @@ -489,25 +502,6 @@ forceUpdate(){ fi } -# -# Waits for server to perform save before update (until save file is newer than 1 minute) -# -doSafeUpdate(){ - cd "$arkserverroot" - - if isUpdateNeeded; then - while [ ! `find $arkserverroot/ShooterGame/Saved/SavedArks -mmin -1 -name ${serverMap##*/}.ark` ]; do - echo "`timestamp`: Save file older than 1 minute. Delaying update." >> "$logdir/update.log" - sleep 30s - done - echo "`timestamp`: Save file newer than 1 minute. Performing an update." >> "$logdir/update.log" - 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 -} - # # Downloads mod and installs it into mods directory # @@ -885,7 +879,7 @@ while true; do doUpdate --force shift elif [ "$2" == "--safe" ]; then - doSafeUpdate + doUpdate --safe shift elif [ "$2" == "--warn" ]; then doWarnUpdate From e86f7b0ba3764de393dad1d6093e312a7482f250 Mon Sep 17 00:00:00 2001 From: Ben Peddell Date: Wed, 16 Sep 2015 18:52:35 +1000 Subject: [PATCH 13/85] Merge doWarnUpdate into doUpdate --- tools/arkmanager | 124 +++++++++++++++++++++++++---------------------- 1 file changed, 65 insertions(+), 59 deletions(-) diff --git a/tools/arkmanager b/tools/arkmanager index 5c2710a..116fc41 100755 --- a/tools/arkmanager +++ b/tools/arkmanager @@ -444,6 +444,64 @@ doInstall() { getCurrentVersion } +# +# Waits for a configurable number of minutes before updating the server +# +doUpdateWarn(){ + cd "$arkserverroot" + + local pid=`getServerPID` + if [ -n "$pid" ]; then + local warnmsg + local warnminutes=$(( arkwarnminutes )) + if (( warnminutes == 0 )); then + warnminutes=60 + fi + + local warnintervals=( 90 60 45 30 20 15 10 5 4 3 2 1 ) + + for warninterval in "${warnintervals[@]}"; do + if [ "`getServerPID`" != "$pid" ]; then + echo "Server has stopped. Aborting update" + return 1 + fi + if (( arkwarnminutes > warninterval )); then + if [ -n "$msgWarnUpdateMinutes" ]; then + warnmsg="$(printf "$msgWarnUpdateMinutes" "$warnminutes")" + else + warnmsg="$(printf "This ARK server will shutdown for an update in %d minutes" "$warnminutes")" + fi + doBroadcastWithEcho "$warnmsg" + sleep $(( warnminutes - warninterval ))m + warnminutes=$warninterval + fi + done + + local warnseconds=90 + warnintervals=( 60 45 30 20 15 10 5 0 ) + for warninterval in "${warnintervals[@]}"; do + if [ "`getServerPID`" != "$pid" ]; then + echo "Server has stopped. Aborting update" + return 1 + fi + if [ -n "$msgWarnUpdateMinutes" ]; then + warnmsg="$(printf "$msgWarnUpdateMinutes" "$warnminutes")" + else + warnmsg="$(printf "This ARK server will shutdown for an update in %d seconds" "$warnseconds")" + fi + doBroadcastWithEcho "$warnmsg" + sleep $(( warnseconds - warninterval ))s + done + fi + + if [ "`getServerPID`" != "$pid" ]; then + echo "Server has stopped. Aborting update" + return 1 + fi + + return 0 +} + # # Stop the server, update it and then start it back. # @@ -456,6 +514,8 @@ doUpdate() { appupdate=1 elif [ "$arg" == "--safe" ]; then updatetype=safe + elif [ "$arg" == "--warn" ]; then + updatetype=warn fi done @@ -473,6 +533,10 @@ doUpdate() { sleep 30s done echo "`timestamp`: Save file newer than 1 minute. Performing an update." >> "$logdir/update.log" + elif [ "$updatetype" == "warn" ]; then + if ! doUpdateWarn; then + return 1 + fi fi fi @@ -594,64 +658,6 @@ doInstallMod(){ fi } -# -# Waits for a configurable number of minutes before updating the server -# -doWarnUpdate(){ - cd "$arkserverroot" - - if isUpdateNeeded; then - local pid=`getServerPID` - if [ -n "$pid" ]; then - local warnmsg - local warnminutes=$(( arkwarnminutes )) - if (( warnminutes == 0 )); then - warnminutes=60 - fi - - local warnintervals=( 90 60 45 30 20 15 10 5 4 3 2 1 ) - - for warninterval in "${warnintervals[@]}"; do - if [ "`getServerPID`" != "$pid" ]; then - echo "Server has stopped. Aborting update" - return 1 - fi - if (( arkwarnminutes > warninterval )); then - if [ -n "$msgWarnUpdateMinutes" ]; then - warnmsg="$(printf "$msgWarnUpdateMinutes" "$warnminutes")" - else - warnmsg="$(printf "This ARK server will shutdown for an update in %d minutes" "$warnminutes")" - fi - doBroadcastWithEcho "$warnmsg" - sleep $(( warnminutes - warninterval ))m - warnminutes=$warninterval - fi - done - - local warnseconds=90 - warnintervals=( 60 45 30 20 15 10 5 0 ) - for warninterval in "${warnintervals[@]}"; do - if [ "`getServerPID`" != "$pid" ]; then - echo "Server has stopped. Aborting update" - return 1 - fi - if [ -n "$msgWarnUpdateMinutes" ]; then - warnmsg="$(printf "$msgWarnUpdateMinutes" "$warnminutes")" - else - warnmsg="$(printf "This ARK server will shutdown for an update in %d seconds" "$warnseconds")" - fi - doBroadcastWithEcho "$warnmsg" - sleep $(( warnseconds - warninterval ))s - done - fi - - if [ "`getServerPID`" != "$pid" ]; then - echo "Server has stopped. Aborting update" - fi - doUpdate - fi -} - # # Copies server state to a backup directory # @@ -882,7 +888,7 @@ while true; do doUpdate --safe shift elif [ "$2" == "--warn" ]; then - doWarnUpdate + doUpdate --warn shift else doUpdate From 9b5435fe493bf8d487700dd6b952b49038240258 Mon Sep 17 00:00:00 2001 From: Ben Peddell Date: Wed, 16 Sep 2015 18:59:43 +1000 Subject: [PATCH 14/85] Allow update to take multiple options --- tools/arkmanager | 18 +++++++----------- 1 file changed, 7 insertions(+), 11 deletions(-) diff --git a/tools/arkmanager b/tools/arkmanager index 116fc41..d1c0caa 100755 --- a/tools/arkmanager +++ b/tools/arkmanager @@ -881,18 +881,14 @@ while true; do doInstall ;; update) - if [ "$2" == "--force" ]; then - doUpdate --force + args=() + + while [[ "$2" =~ ^-- ]]; do + args=( "${args[@]}" "$2" ) shift - elif [ "$2" == "--safe" ]; then - doUpdate --safe - shift - elif [ "$2" == "--warn" ]; then - doUpdate --warn - shift - else - doUpdate - fi + done + + doUpdate "${args[@]}" ;; checkupdate) checkForUpdate From 39c649d296bd2d216bd10fe5b76e4a1d46928b6e Mon Sep 17 00:00:00 2001 From: Ben Peddell Date: Wed, 16 Sep 2015 19:02:48 +1000 Subject: [PATCH 15/85] Merge forceUpdate into doUpdate --- tools/arkmanager | 37 +++++++++++++++++-------------------- 1 file changed, 17 insertions(+), 20 deletions(-) diff --git a/tools/arkmanager b/tools/arkmanager index d1c0caa..4cd7195 100755 --- a/tools/arkmanager +++ b/tools/arkmanager @@ -540,32 +540,29 @@ doUpdate() { fi 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 + # the current version should be the last version. We set our version + getCurrentVersion + 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 + doStart + fi 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 - # the current version should be the last version. We set our version - getCurrentVersion - 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 - doStart - fi -} - # # Downloads mod and installs it into mods directory # From fddbec4f004f03ca291eed3e2bd9c9c062c192ec Mon Sep 17 00:00:00 2001 From: Ben Peddell Date: Wed, 16 Sep 2015 19:10:42 +1000 Subject: [PATCH 16/85] Add --validate option to update --- tools/arkmanager | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/tools/arkmanager b/tools/arkmanager index 4cd7195..104081e 100755 --- a/tools/arkmanager +++ b/tools/arkmanager @@ -508,6 +508,7 @@ doUpdateWarn(){ doUpdate() { local appupdate= local updatetype=normal + local validate= for arg in "$@"; do if [ "$arg" == "--force" ]; then @@ -516,6 +517,9 @@ doUpdate() { updatetype=safe elif [ "$arg" == "--warn" ]; then updatetype=warn + elif [ "$arg" == "--validate" ]; then + validate=validate + appupdate=1 fi done @@ -548,7 +552,7 @@ doUpdate() { doStop cd "$steamcmdroot" - ./$steamcmdexec +login anonymous +force_install_dir "$arkserverroot" +app_update $appid +quit + ./$steamcmdexec +login anonymous +force_install_dir "$arkserverroot" +app_update $appid $validate +quit # the current version should be the last version. We set our version getCurrentVersion echo "`timestamp`: update to $instver complete" >> "$logdir/update.log" From 2207ff160acd98c4dd6a56e9cd6fcede118b5ecb Mon Sep 17 00:00:00 2001 From: Ben Peddell Date: Wed, 16 Sep 2015 19:20:43 +1000 Subject: [PATCH 17/85] Move Mod download out of doInstallMod --- tools/arkmanager | 23 ++++++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/tools/arkmanager b/tools/arkmanager index 104081e..383b3fd 100755 --- a/tools/arkmanager +++ b/tools/arkmanager @@ -568,13 +568,12 @@ doUpdate() { } # -# Downloads mod and installs it into mods directory +# Downloads a mod from the Steam workshop # -doInstallMod(){ +doDownloadMod(){ local modid=$1 local modsrcdir="$steamcmdroot/steamapps/workshop/content/$mod_appid/$modid" local moddldir="$steamcmdroot/steamapps/workshop/downloads/$mod_appid/$modid" - local moddestdir="$arkserverroot/ShooterGame/Content/Mods/$modid" local dlsize=0 cd "$steamcmdroot" @@ -588,6 +587,22 @@ doInstallMod(){ if [ -f "$modsrcdir/mod.info" ]; then echo "Mod $modid downloaded" + return 0 + else + echo "Mod $modid was not successfully downloaded" + return 1 + fi +} + +# +# Downloads mod and installs it into mods directory +# +doInstallMod(){ + local modid=$1 + local modsrcdir="$steamcmdroot/steamapps/workshop/content/$mod_appid/$modid" + local moddestdir="$arkserverroot/ShooterGame/Content/Mods/$modid" + + if doDownloadMod $modid; then echo "Copying files to $moddestdir" if [ -f "$modsrcdir/LinuxNoEditor/mod.info" ]; then modsrcdir="$modsrcdir/LinuxNoEditor" @@ -654,8 +669,6 @@ doInstallMod(){ fi echo "Mod $modid installed" - else - echo "Mod $modid was not successfully downloaded" fi } From 4bd9da569a076ade4d1a20fd6f6508fe3b094aaf Mon Sep 17 00:00:00 2001 From: Ben Peddell Date: Wed, 16 Sep 2015 19:29:01 +1000 Subject: [PATCH 18/85] Move mod extraction to out of doInstallMod --- tools/arkmanager | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/tools/arkmanager b/tools/arkmanager index 383b3fd..577c8f6 100755 --- a/tools/arkmanager +++ b/tools/arkmanager @@ -595,14 +595,14 @@ doDownloadMod(){ } # -# Downloads mod and installs it into mods directory +# Extracts a mod into the ARK Mods directory # -doInstallMod(){ +doExtractMod(){ local modid=$1 local modsrcdir="$steamcmdroot/steamapps/workshop/content/$mod_appid/$modid" local moddestdir="$arkserverroot/ShooterGame/Content/Mods/$modid" - if doDownloadMod $modid; then + if [ -f "$modsrcdir/mod.info" ]; then echo "Copying files to $moddestdir" if [ -f "$modsrcdir/LinuxNoEditor/mod.info" ]; then modsrcdir="$modsrcdir/LinuxNoEditor" @@ -667,7 +667,17 @@ doInstallMod(){ else echo -ne '\x01\x00\x00\x00\x08\x00\x00\x00ModType\x00\x02\x00\x00\x001\x00' >>"$moddestdir/.mod" fi + fi +} +# +# Downloads mod and installs it into mods directory +# +doInstallMod(){ + local modid=$1 + + if doDownloadMod $modid; then + doExtractMod $modid echo "Mod $modid installed" fi } From b5819d517d149337d0f34817ecd8dcc05e95a633 Mon Sep 17 00:00:00 2001 From: Ben Peddell Date: Wed, 16 Sep 2015 19:36:06 +1000 Subject: [PATCH 19/85] Only copy changed files when extracting a mod --- tools/arkmanager | 81 +++++++++++++++++++++++++++--------------------- 1 file changed, 46 insertions(+), 35 deletions(-) diff --git a/tools/arkmanager b/tools/arkmanager index 577c8f6..e69626b 100755 --- a/tools/arkmanager +++ b/tools/arkmanager @@ -609,44 +609,55 @@ doExtractMod(){ fi find "$modsrcdir" -type d -printf "$moddestdir/%P\0" | xargs -0 -r mkdir -p - find "$modsrcdir" -type f ! \( -name '*.z' -or -name '*.z.uncompressed_size' \) -printf "%P\0" | xargs -0 -r tar -c -C "$modsrcdir" | tar -x -C "$moddestdir" + + find "$modsrcdir" -type f ! \( -name '*.z' -or -name '*.z.uncompressed_size' \) -printf "%P\n" | while read f; do + if [ ! -f "$moddestdir/$f" -o "$modsrcdir/$f" -nt "$moddestdir/$f" ]; then + printf "%10d %s " "`stat -c '%s' "$modsrcdir/$f"`" "$f" + cp "$modsrcdir/$f" "$moddestdir/$f" + echo -ne "\r\\033[K" + fi + done + find "$modsrcdir" -type f -name '*.z' -printf "%P\n" | while read f; do - printf "%10d %s " "`stat -c '%s' "$modsrcdir/$f"`" "${f%.z}" - perl -M'Compress::Raw::Zlib' -e ' - my $sig; - read(STDIN, $sig, 8) or die "Unable to read compressed file"; - if ($sig != "\xC1\x83\x2A\x9E\x00\x00\x00\x00"){ - die "Bad file magic"; - } - my $data; - read(STDIN, $data, 24) or die "Unable to read compressed file"; - my ($chunksizelo, $chunksizehi, - $comprtotlo, $comprtothi, - $uncomtotlo, $uncomtothi) = unpack("(LLLLLL)<", $data); - my @chunks = (); - my $comprused = 0; - while ($comprused < $comprtotlo) { - read(STDIN, $data, 16) or die "Unable to read compressed file"; - my ($comprsizelo, $comprsizehi, - $uncomsizelo, $uncomsizehi) = unpack("(LLLL)<", $data); - push @chunks, $comprsizelo; - $comprused += $comprsizelo; - } - foreach my $comprsize (@chunks) { - read(STDIN, $data, $comprsize) or die "File read failed"; - my ($inflate, $status) = new Compress::Raw::Zlib::Inflate(); - my $output; - $status = $inflate->inflate($data, $output, 1); - if ($status != Z_STREAM_END) { - die "Bad compressed stream; status: " . ($status); + if [ ! -f "$moddestdir/${f%.z}" -o "$modsrcdir/$f" -nt "$moddestdir/${f%.z}" ]; then + printf "%10d %s " "`stat -c '%s' "$modsrcdir/$f"`" "${f%.z}" + perl -M'Compress::Raw::Zlib' -e ' + my $sig; + read(STDIN, $sig, 8) or die "Unable to read compressed file"; + if ($sig != "\xC1\x83\x2A\x9E\x00\x00\x00\x00"){ + die "Bad file magic"; } - if (length($data) != 0) { - die "Unconsumed data in input" + my $data; + read(STDIN, $data, 24) or die "Unable to read compressed file"; + my ($chunksizelo, $chunksizehi, + $comprtotlo, $comprtothi, + $uncomtotlo, $uncomtothi) = unpack("(LLLLLL)<", $data); + my @chunks = (); + my $comprused = 0; + while ($comprused < $comprtotlo) { + read(STDIN, $data, 16) or die "Unable to read compressed file"; + my ($comprsizelo, $comprsizehi, + $uncomsizelo, $uncomsizehi) = unpack("(LLLL)<", $data); + push @chunks, $comprsizelo; + $comprused += $comprsizelo; } - print $output; - } - ' <"$modsrcdir/$f" >"$moddestdir/${f%.z}" - echo -ne "\r\\033[K" + foreach my $comprsize (@chunks) { + read(STDIN, $data, $comprsize) or die "File read failed"; + my ($inflate, $status) = new Compress::Raw::Zlib::Inflate(); + my $output; + $status = $inflate->inflate($data, $output, 1); + if ($status != Z_STREAM_END) { + die "Bad compressed stream; status: " . ($status); + } + if (length($data) != 0) { + die "Unconsumed data in input" + } + print $output; + } + ' <"$modsrcdir/$f" >"$moddestdir/${f%.z}" + touch -c -r "$modsrcdir/$f" "$moddestdir/${f%.z}" + echo -ne "\r\\033[K" + fi done perl -e ' From e9b987f19ae50aed4b98f37c996b8ceeb71fb3a6 Mon Sep 17 00:00:00 2001 From: Ben Peddell Date: Wed, 16 Sep 2015 19:48:52 +1000 Subject: [PATCH 20/85] Add update --update-mods option --- tools/arkmanager | 139 +++++++++++++++++++++++++++++++++++++---------- 1 file changed, 111 insertions(+), 28 deletions(-) diff --git a/tools/arkmanager b/tools/arkmanager index e69626b..12869e0 100755 --- a/tools/arkmanager +++ b/tools/arkmanager @@ -509,6 +509,7 @@ doUpdate() { local appupdate= local updatetype=normal local validate= + local modupdate= for arg in "$@"; do if [ "$arg" == "--force" ]; then @@ -520,16 +521,27 @@ doUpdate() { elif [ "$arg" == "--validate" ]; then validate=validate appupdate=1 + elif [ "$arg" == "--update-mods" ]; then + modupdate=1 fi done + if [ -n "$modupdate" ]; then + if ! doDownloadAllMods; then + modupdate= + fi + if ! isAnyModUpdateNeeded; then + modupdate= + fi + fi + cd "$arkserverroot" if isUpdateNeeded; then appupdate=1 fi - if [ -n "$appupdate" ]; then + if [ -n "$appupdate" -o -n "$modupdate" ]; then if isTheServerRunning; then if [ "$updatetype" == "safe" ]; then while [ ! `find $arkserverroot/ShooterGame/Saved/SavedArks -mmin -1 -name ${serverMap##*/}.ark` ]; do @@ -551,11 +563,22 @@ doUpdate() { fi doStop - cd "$steamcmdroot" - ./$steamcmdexec +login anonymous +force_install_dir "$arkserverroot" +app_update $appid $validate +quit - # the current version should be the last version. We set our version - getCurrentVersion - echo "`timestamp`: update to $instver complete" >> "$logdir/update.log" + if [ -n "$appupdate" ]; then + cd "$steamcmdroot" + ./$steamcmdexec +login anonymous +force_install_dir "$arkserverroot" +app_update $appid $validate +quit + # the current version should be the last version. We set our version + getCurrentVersion + echo "`timestamp`: update to $instver complete" >> "$logdir/update.log" + fi + + if [ -n "$modupdate" ]; then + for modid in $(getModIds); do + if isModUpdateNeeded $modid; then + doExtractMod $modid + echo "`timestamp`: Mod $modid updated" >> "$logdir/update.log" + fi + done + fi # we restart the server only if it was started before the update if [ $serverWasAlive -eq 1 ]; then @@ -567,6 +590,18 @@ doUpdate() { fi; } +# +# Get the Mod IDs of the installed mods and the requested mods +# +getModIds(){ + ( + echo "${serverMapModId}" + echo "${ark_TotalConversionMod}" + echo "${ark_GameModIds}" | tr ',' '\n' + find "${arkserverroot}/ShooterGame/Content/Mods" -maxdepth 1 -type d -printf "%P\n" + ) | sort | uniq | grep '^[1-9][0-9]*$' +} + # # Downloads a mod from the Steam workshop # @@ -594,6 +629,51 @@ doDownloadMod(){ fi } +# +# Downloads all installed and requested mods from the Steam workshop +# +doDownloadAllMods(){ + for modid in $(getModIds); do + doDownloadMod $modid || return 1 + done +} + +# +# Checks if the files a mod owns need to be updated +# +isModUpdateNeeded(){ + local modid=$1 + local modsrcdir="$steamcmdroot/steamapps/workshop/content/$mod_appid/$modid" + local moddestdir="$arkserverroot/ShooterGame/Content/Mods/$modid" + + if [ -f "$modsrcdir/mod.info" ]; then + if [ -f "$modsrcdir/LinuxNoEditor/mod.info" ]; then + modsrcdir="$modsrcdir/LinuxNoEditor" + fi + + find "$modsrcdir" -type f ! -name "*.z.uncompressed_size" -printf "%P\n" | while read f; do + if [ ! -f "$moddestdir/${f%.z}" -o "$modsrcdir/$f" -nt "$moddestdir/${f%.z}" ]; then + return 0 + fi + done + fi + + return 1 +} + +# +# Checks if any installed or requested mods need to be updated +# +isAnyModUpdateNeeded(){ + for modid in $(getModIds); do + if isModUpdateNeeded $modid; then + return 0 + fi + done + + return 1 +} + # # Extracts a mod into the ARK Mods directory # @@ -609,7 +689,7 @@ doExtractMod(){ fi find "$modsrcdir" -type d -printf "$moddestdir/%P\0" | xargs -0 -r mkdir -p - + find "$modsrcdir" -type f ! \( -name '*.z' -or -name '*.z.uncompressed_size' \) -printf "%P\n" | while read f; do if [ ! -f "$moddestdir/$f" -o "$modsrcdir/$f" -nt "$moddestdir/$f" ]; then printf "%10d %s " "`stat -c '%s' "$modsrcdir/$f"`" "$f" @@ -740,7 +820,7 @@ doBackup(){ fi # ARK server uses Lock-Truncate-Write-Unlock - # Unfortunately we can't lock the file, as + # Unfortunately we can't lock the file, as # ARK server uses a non-blocking lock and will # fail to update the file if the lock fails. echo -e "${NORMAL} Copying ARK profile files" @@ -958,26 +1038,29 @@ while true; do ;; -h|--help) echo -e "Usage: arkmanager [OPTION]\n" - echo "Option Description" - echo "backup Saves a backup of your server inside the backup directory" - echo "broadcast Sends a message to all users connected to server" - echo "saveworld Saves the game world to disk" - echo "rconcmd Execute RCON command on server" - echo "checkupdate Check for a new ARK server version" - echo "install Install the ARK server files from steamcmd" - echo "restart Stops the server and then starts it" - echo "restart --all Restarts all servers specified in configfile_xxxxx" - echo "start Starts the server" - echo "start --all Starts all servers specified in configfile_xxxxx" - echo "stop Stops the server" - echo "stop --all Stops all servers specified in configfile_xxxxx" - echo "status Returns the status of the current ARK server instance" - echo "update Check for a new ARK server version, if needed, stops the server, updates it, and starts it again" - echo "update --force Apply update without check the current version" - echo "update --safe Wait for server to perform world save and update." - echo "update --warn Warn players before updating server" - echo "upgrade Check for a new ARK Server Tools version and upgrades it if needed" - echo "useconfig Use the configuration overrides in the specified config name or file" + echo "Option Description" + echo "backup Saves a backup of your server inside the backup directory" + echo "broadcast Sends a message to all users connected to server" + echo "saveworld Saves the game world to disk" + echo "rconcmd Execute RCON command on server" + echo "checkupdate Check for a new ARK server version" + echo "install Install the ARK server files from steamcmd" + echo "installmod Installs a mod from the Steam workshop" + echo "restart Stops the server and then starts it" + echo "restart --all Restarts all servers specified in configfile_xxxxx" + echo "start Starts the server" + echo "start --all Starts all servers specified in configfile_xxxxx" + echo "stop Stops the server" + echo "stop --all Stops all servers specified in configfile_xxxxx" + echo "status Returns the status of the current ARK server instance" + echo "update Check for a new ARK server version, if needed, stops the server, updates it, and starts it again" + echo "update --force Apply update without checking the current version" + echo "update --safe Wait for server to perform world save and update." + echo "update --warn Warn players before updating server" + echo "update --validate Validates all ARK server files" + echo "update --update-mods Updates installed and requested mods" + echo "upgrade Check for a new ARK Server Tools version and upgrades it if needed" + echo "useconfig Use the configuration overrides in the specified config name or file" exit 1 ;; *) From 4a50d29324c3c719ebbf70a8f3b57fd06388b112 Mon Sep 17 00:00:00 2001 From: Ben Peddell Date: Thu, 17 Sep 2015 18:25:21 +1000 Subject: [PATCH 21/85] Add server auto-restart --- tools/arkmanager | 59 ++++++++++++++++++++++++++++++++++++++++++-- tools/arkmanager.cfg | 1 + 2 files changed, 58 insertions(+), 2 deletions(-) diff --git a/tools/arkmanager b/tools/arkmanager index 12869e0..9930bca 100755 --- a/tools/arkmanager +++ b/tools/arkmanager @@ -44,6 +44,7 @@ arkserverLog="arkserver.log" # here is logged the output of ShooterGameServer appid="${appid:-376030}" mod_appid="${mod_appid:-346110}" +arkautorestartfile="${arkautorestartfile:-ShooterGame/Saved/.autorestart}" # Script version arkstVersion="1.3" @@ -338,8 +339,61 @@ doRun() { echo "`timestamp`: start" # set max open files limit before we start the server ulimit -n $maxOpenFiles - "$arkserverroot/$arkserverexec" "$arkserveropts" "${arkextraopts[@]}" - echo "`timestamp`: exited with status $?" + + serverpid=0 + restartserver=1 + + # Shutdown the server when we are terminated + shutdown_server(){ + restartserver=0 + rm "$arkserverroot/$arkautorestartfile" + if [ "$serverpid" -ne 0 ]; then + kill -INT $serverpid + fi + } + + trap shutdown_server INT TERM + + # Auto-restart loop + while [ $restartserver -ne 0 ]; do + # Put the server process into the background so we can monitor it + "$arkserverroot/$arkserverexec" "$arkserveropts" "${arkextraopts[@]}" & + # Grab the server PID + serverpid=$! + # Disable auto-restart so we don't get caught in a restart loop + rm "$arkserverroot/$arkautorestartfile" + restartserver=0 + + while true; do + # Grab the current server PID + local pid="`getServerPid`" + if [ "$pid" == "$serverpid" ]; then + # Check if the server has fully started + if ! isTheServerUp; then + # Enable auto-restart if the server is up + echo "`timestamp`: server is up" + touch "$arkserverroot/$arkautorestartfile" + restartserver=1 + fi + else + if [ "$pid" != "" ]; then + # Another instance must be running - disable autorestart + restartserver=0 + fi + break + fi + sleep 5 + done + + # Wait on the now-dead process to reap it and get its return status + wait $serverpid + echo "`timestamp`: exited with status $?" + + # doStop will remove the autorestart file + if [ "$restartserver" -ne 0 -a -f "$arkserverroot/$arkautorestartfile" ]; then + echo "`timestamp`: restarting server" + fi + done } # @@ -396,6 +450,7 @@ doStop() { if isTheServerRunning; then tput rc echo "Killing server..." + rm "$arkserverroot/$arkautorestartfile" kill -KILL $PID fi diff --git a/tools/arkmanager.cfg b/tools/arkmanager.cfg index bb0c45c..e3568e2 100644 --- a/tools/arkmanager.cfg +++ b/tools/arkmanager.cfg @@ -11,6 +11,7 @@ arkserverroot="/home/steam/ARK" # path of yo arkserverexec="ShooterGame/Binaries/Linux/ShooterGameServer" # name of ARK server executable arkbackupdir="/home/steam/ARK-Backups" # path to backup directory arkwarnminutes="60" # number of minutes to warn players when using update --warn +arkautorestartfile="ShooterGame/Saved/.autorestart" # path to autorestart file # Update warning messages # Modify as desired, putting the %d replacement operator where the number belongs From 37014ec86d815ef05d145b4bd26af5be2085e340 Mon Sep 17 00:00:00 2001 From: Ben Peddell Date: Fri, 18 Sep 2015 19:06:15 +1000 Subject: [PATCH 22/85] Implement better argument handling in install.sh --- tools/install.sh | 81 ++++++++++++++++++++++++++++++++++++------------ 1 file changed, 62 insertions(+), 19 deletions(-) diff --git a/tools/install.sh b/tools/install.sh index 7084eab..07efeac 100755 --- a/tools/install.sh +++ b/tools/install.sh @@ -1,14 +1,72 @@ #!/bin/bash -if [ "$1" == "--me" ]; then +userinstall=no +steamcmd_user= +showusage=no + +while [ -n "$1" ]; do + case "$1" in + --me) + userinstall=yes + steamcmd_user="--me" + ;; + -h|--help) + showusage=yes + break + ;; + -*) + echo "Invalid option '$1'" + showusage=yes + break; + ;; + *) + if [ -n "$steamcmd_user" ]; then + echo "Multiple users specified" + showusage=yes + break; + elif getent passwd "$1" >/dev/null 2>&1; then + steamcmd_user="$1" + else + echo "Invalid user '$1'" + showusage=yes + break; + fi + ;; + esac + shift +done + +if [ "$userinstall" == "yes" -a "$UID" -eq 0 ]; then + echo "Refusing to perform user-install as root" + showusage=yes +fi + +if [ "$showusage" == "no" -a -z "$steamcmd_user" ]; then + echo "No user specified" + showusage=yes +fi + +if [ "$userinstall" == "yes" ]; then PREFIX="${PREFIX:-${HOME}}" EXECPREFIX="${EXECPREFIX:-${PREFIX}}" else EXECPREFIX="${EXECPREFIX:-/usr/local}" fi -if [ ! -z "$1" ]; then - if [ "$1" == "--me" -a "$UID" -ne 0 ]; then +if [ "$showusage" == "yes" ]; then + echo "You must specify your system steam user who own steamcmd directory to install ARK Tools." + echo "Specify the special used '--me' to perform a user-install." + echo "Usage: ./install.sh steam" + echo + echo "Environment variables affecting install:" + echo "EXECPREFIX: prefix in which to install arkmanager executable" + echo " [${EXECPREFIX}]" + echo "INSTALL_ROOT: staging directory in which to perform install" + echo " [${INSTALL_ROOT}]" + exit 1 +fi + +if [ "$userinstall" == "yes" ]; then # Copy arkmanager to ~/bin mkdir -p "${INSTALL_ROOT}${EXECPREFIX}/bin" cp arkmanager "${INSTALL_ROOT}${EXECPREFIX}/bin/arkmanager" @@ -28,10 +86,7 @@ if [ ! -z "$1" ]; then cp -n arkmanager.cfg "${INSTALL_ROOT}${PREFIX}/.arkmanager.cfg" sed -i "s|^steamcmd_user=\"steam\"|steamcmd_user=\"--me\"|;s|\"/home/steam|\"${PREFIX}|;s|/var/log/arktools|${PREFIX}/logs/arktools|" "${INSTALL_ROOT}${PREFIX}/.arkmanager.cfg" fi - elif [ "$1" == "--me" ]; then - echo "You specified the special '--me' user while running as root. This is not permitted." - exit 1 - else +else # Copy arkmanager to /usr/bin and set permissions cp arkmanager "${INSTALL_ROOT}${EXECPREFIX}/bin/arkmanager" chmod +x "${INSTALL_ROOT}${EXECPREFIX}/bin/arkmanager" @@ -128,18 +183,6 @@ if [ ! -z "$1" ]; then 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 - fi -else - echo "You must specify your system steam user who own steamcmd directory to install ARK Tools." - echo "Specify the special used '--me' to perform a user-install." - echo "Usage: ./install.sh steam" - echo - echo "Environment variables affecting install:" - echo "EXECPREFIX: prefix in which to install arkmanager executable" - echo " [${EXECPREFIX}]" - echo "INSTALL_ROOT: staging directory in which to perform install" - echo " [${INSTALL_ROOT}]" - exit 1 fi exit 0 From 563c34b3f2b348761605dc806a18f94466f1c513 Mon Sep 17 00:00:00 2001 From: Ben Peddell Date: Fri, 18 Sep 2015 19:10:23 +1000 Subject: [PATCH 23/85] Add prefix, exec-prefix and install-root arguments --- tools/install.sh | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/tools/install.sh b/tools/install.sh index 07efeac..d0adf11 100755 --- a/tools/install.sh +++ b/tools/install.sh @@ -14,6 +14,27 @@ while [ -n "$1" ]; do showusage=yes break ;; + --prefix=*) + PREFIX="${1#--prefix=}" + ;; + --prefix) + PREFIX="$2" + shift + ;; + --exec-prefix=*) + EXECPREFIX="${1#--exec-prefix=}" + ;; + --exec-prefix) + EXECPREFIX="$2" + shift + ;; + --install-root=*) + INSTALL_ROOT="${1#--install-root=}" + ;; + --install-root) + INSTALL_ROOT="$2" + shift + ;; -*) echo "Invalid option '$1'" showusage=yes From f597644d595fffe0c34b00ab85e2278abf9ff311 Mon Sep 17 00:00:00 2001 From: Ben Peddell Date: Fri, 18 Sep 2015 19:12:20 +1000 Subject: [PATCH 24/85] Improve install.sh usage message --- tools/install.sh | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/tools/install.sh b/tools/install.sh index d0adf11..1fb4378 100755 --- a/tools/install.sh +++ b/tools/install.sh @@ -75,15 +75,21 @@ else fi if [ "$showusage" == "yes" ]; then + echo "Usage: ./install.sh {|--me} [OPTIONS]" echo "You must specify your system steam user who own steamcmd directory to install ARK Tools." echo "Specify the special used '--me' to perform a user-install." - echo "Usage: ./install.sh steam" echo - echo "Environment variables affecting install:" - echo "EXECPREFIX: prefix in which to install arkmanager executable" - echo " [${EXECPREFIX}]" - echo "INSTALL_ROOT: staging directory in which to perform install" - echo " [${INSTALL_ROOT}]" + echo " The user arkmanager should be run as" + echo + echo "Option Description" + echo "--help, -h Show this help text" + echo "--me Perform a user-install" + echo "--prefix Specify the prefix under which to install arkmanager" + echo " [PREFIX=${PREFIX}]" + echo "--exec-prefix Specify the prefix under which to install executables" + echo " [EXECPREFIX=${EXECPREFIX}]" + echo "--install-root Specify the staging directory in which to perform the install" + echo " [INSTALL_ROOT=${INSTALL_ROOT}]" exit 1 fi From b86967c30c2b6dd336ce2a53c6e6f17d08cf88e1 Mon Sep 17 00:00:00 2001 From: Ben Peddell Date: Fri, 18 Sep 2015 19:16:09 +1000 Subject: [PATCH 25/85] Add bindir argument to install.sh --- tools/install.sh | 33 ++++++++++++++++++++++----------- 1 file changed, 22 insertions(+), 11 deletions(-) diff --git a/tools/install.sh b/tools/install.sh index 1fb4378..3352de1 100755 --- a/tools/install.sh +++ b/tools/install.sh @@ -35,6 +35,13 @@ while [ -n "$1" ]; do INSTALL_ROOT="$2" shift ;; + --bindir=*) + BINDIR="${1#--bindir=}" + ;; + --bindir) + BINDIR="$2" + shift + ;; -*) echo "Invalid option '$1'" showusage=yes @@ -74,6 +81,8 @@ else EXECPREFIX="${EXECPREFIX:-/usr/local}" fi +BINDIR="${BINDIR:-${EXECPREFIX}/bin}" + if [ "$showusage" == "yes" ]; then echo "Usage: ./install.sh {|--me} [OPTIONS]" echo "You must specify your system steam user who own steamcmd directory to install ARK Tools." @@ -90,14 +99,16 @@ if [ "$showusage" == "yes" ]; then echo " [EXECPREFIX=${EXECPREFIX}]" echo "--install-root Specify the staging directory in which to perform the install" echo " [INSTALL_ROOT=${INSTALL_ROOT}]" + echo "--bindir Specify the directory under which to install executables" + echo " [BINDIR=${BINDIR}]" exit 1 fi if [ "$userinstall" == "yes" ]; then # Copy arkmanager to ~/bin - mkdir -p "${INSTALL_ROOT}${EXECPREFIX}/bin" - cp arkmanager "${INSTALL_ROOT}${EXECPREFIX}/bin/arkmanager" - chmod +x "${INSTALL_ROOT}${EXECPREFIX}/bin/arkmanager" + mkdir -p "${INSTALL_ROOT}${BINDIR}" + cp arkmanager "${INSTALL_ROOT}${BINDIR}/arkmanager" + chmod +x "${INSTALL_ROOT}${BINDIR}/arkmanager" # Create a folder in ~/logs to let Ark tools write its own log files mkdir -p "${INSTALL_ROOT}${PREFIX}/logs/arktools" @@ -115,8 +126,8 @@ if [ "$userinstall" == "yes" ]; then fi else # Copy arkmanager to /usr/bin and set permissions - cp arkmanager "${INSTALL_ROOT}${EXECPREFIX}/bin/arkmanager" - chmod +x "${INSTALL_ROOT}${EXECPREFIX}/bin/arkmanager" + cp arkmanager "${INSTALL_ROOT}${BINDIR}/arkmanager" + chmod +x "${INSTALL_ROOT}${BINDIR}/arkmanager" # Copy arkdaemon to /etc/init.d ,set permissions and add it to boot if [ -f /lib/lsb/init-functions ]; then @@ -127,7 +138,7 @@ else 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@^DAEMON=\"/usr@DAEMON=\"${EXECPREFIX}@" "${INSTALL_ROOT}${EXECPREFIX}/libexec/arkmanager/arkmanager.init" + sed -i "s@^DAEMON=\"/usr/bin/@DAEMON=\"${BINDIR}/@" "${INSTALL_ROOT}${EXECPREFIX}/libexec/arkmanager/arkmanager.init" if [ -z "${INSTALL_ROOT}" ]; then systemctl daemon-reload systemctl enable arkmanager.service @@ -137,7 +148,7 @@ else 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" + sed -i "s|^DAEMON=\"/usr/bin/|DAEMON=\"${BINDIR}/|" "${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 @@ -153,7 +164,7 @@ else 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@^DAEMON=\"/usr@DAEMON=\"${EXECPREFIX}@" "${INSTALL_ROOT}${EXECPREFIX}/libexec/arkmanager/arkmanager.init" + sed -i "s@^DAEMON=\"/usr/bin/@DAEMON=\"${BINDIR}/@" "${INSTALL_ROOT}${EXECPREFIX}/libexec/arkmanager/arkmanager.init" if [ -z "${INSTALL_ROOT}" ]; then systemctl daemon-reload systemctl enable arkmanager.service @@ -163,7 +174,7 @@ else 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" + sed -i "s@^DAEMON=\"/usr/bin/@DAEMON=\"${BINDIR}/@" "${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" @@ -173,7 +184,7 @@ else 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@DAEMON=\"${EXECPREFIX}@" "${INSTALL_ROOT}/etc/init.d/arkmanager" + sed -i "s@^DAEMON=\"/usr/bin/@DAEMON=\"${BINDIR}/@" "${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" @@ -185,7 +196,7 @@ else 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@^DAEMON=\"/usr@DAEMON=\"${EXECPREFIX}@" "${INSTALL_ROOT}${EXECPREFIX}/libexec/arkmanager/arkmanager.init" + sed -i "s@^DAEMON=\"/usr/bin/@DAEMON=\"${BINDIR}/@" "${INSTALL_ROOT}${EXECPREFIX}/libexec/arkmanager/arkmanager.init" 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 3977190e7a5762582c33075591583b37f52b09bc Mon Sep 17 00:00:00 2001 From: Ben Peddell Date: Fri, 18 Sep 2015 19:17:49 +1000 Subject: [PATCH 26/85] Use PREFIX for global install --- tools/install.sh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tools/install.sh b/tools/install.sh index 3352de1..1caffaf 100755 --- a/tools/install.sh +++ b/tools/install.sh @@ -78,7 +78,8 @@ if [ "$userinstall" == "yes" ]; then PREFIX="${PREFIX:-${HOME}}" EXECPREFIX="${EXECPREFIX:-${PREFIX}}" else - EXECPREFIX="${EXECPREFIX:-/usr/local}" + PREFIX="${PREFIX:-/usr/local}" + EXECPREFIX="${EXECPREFIX:-${PREFIX}}" fi BINDIR="${BINDIR:-${EXECPREFIX}/bin}" From bfca58c39d25520b82e3d37f1fa585c3f7554b3c Mon Sep 17 00:00:00 2001 From: Ben Peddell Date: Fri, 18 Sep 2015 19:22:38 +1000 Subject: [PATCH 27/85] Add libexecdir argument to install.sh --- tools/install.sh | 39 ++++++++++++++++++++++++--------------- 1 file changed, 24 insertions(+), 15 deletions(-) diff --git a/tools/install.sh b/tools/install.sh index 1caffaf..223d789 100755 --- a/tools/install.sh +++ b/tools/install.sh @@ -42,6 +42,13 @@ while [ -n "$1" ]; do BINDIR="$2" shift ;; + --libexecdir=*) + LIBEXECDIR="${1#--libexecdir=}" + ;; + --libexecdir) + LIBEXECDIR="$2" + shift + ;; -*) echo "Invalid option '$1'" showusage=yes @@ -83,6 +90,7 @@ else fi BINDIR="${BINDIR:-${EXECPREFIX}/bin}" +LIBEXECDIR="${LIBEXECDIR:-${EXECPREFIX}/libexec/arkmanager}" if [ "$showusage" == "yes" ]; then echo "Usage: ./install.sh {|--me} [OPTIONS]" @@ -102,6 +110,7 @@ if [ "$showusage" == "yes" ]; then echo " [INSTALL_ROOT=${INSTALL_ROOT}]" echo "--bindir Specify the directory under which to install executables" echo " [BINDIR=${BINDIR}]" + echo "--libexecdir Specify the directory under which to install executable support files" exit 1 fi @@ -134,12 +143,12 @@ else 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 "${INSTALL_ROOT}${EXECPREFIX}/libexec/arkmanager" - cp lsb/arkdaemon "${INSTALL_ROOT}${EXECPREFIX}/libexec/arkmanager/arkmanager.init" - chmod +x "${INSTALL_ROOT}${EXECPREFIX}/libexec/arkmanager/arkmanager.init" + mkdir -p "${INSTALL_ROOT}${LIBEXECDIRPREFIX}" + cp lsb/arkdaemon "${INSTALL_ROOT}${LIBEXECDIR}/arkmanager.init" + chmod +x "${INSTALL_ROOT}${LIBEXECDIR}/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@^DAEMON=\"/usr/bin/@DAEMON=\"${BINDIR}/@" "${INSTALL_ROOT}${EXECPREFIX}/libexec/arkmanager/arkmanager.init" + sed -i "s|=/usr/libexec/arkmanager/|=${LIBEXECDIR}/|" "${INSTALL_ROOT}/etc/systemd/system/arkmanager.service" + sed -i "s@^DAEMON=\"/usr/bin/@DAEMON=\"${BINDIR}/@" "${INSTALL_ROOT}${LIBEXECDIR}/arkmanager.init" if [ -z "${INSTALL_ROOT}" ]; then systemctl daemon-reload systemctl enable arkmanager.service @@ -160,12 +169,12 @@ else 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 "${INSTALL_ROOT}${EXECPREFIX}/libexec/arkmanager" - cp redhat/arkdaemon "${INSTALL_ROOT}${EXECPREFIX}/libexec/arkmanager/arkmanager.init" - chmod +x "${INSTALL_ROOT}${EXECPREFIX}/libexec/arkmanager/arkmanager.init" + mkdir -p "${INSTALL_ROOT}${LIBEXECDIR}" + cp redhat/arkdaemon "${INSTALL_ROOT}${LIBEXECDIR}/arkmanager.init" + chmod +x "${INSTALL_ROOT}${LIBEXECDIR}/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@^DAEMON=\"/usr/bin/@DAEMON=\"${BINDIR}/@" "${INSTALL_ROOT}${EXECPREFIX}/libexec/arkmanager/arkmanager.init" + sed -i "s|=/usr/libexec/arkmanager/|=${LIBEXECDIR}/|" "${INSTALL_ROOT}/etc/systemd/system/arkmanager.service" + sed -i "s@^DAEMON=\"/usr/bin/@DAEMON=\"${BINDIR}/@" "${INSTALL_ROOT}${LIBEXECDIR}/arkmanager.init" if [ -z "${INSTALL_ROOT}" ]; then systemctl daemon-reload systemctl enable arkmanager.service @@ -192,12 +201,12 @@ else echo "rc-update del arkmanager default" fi 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" + mkdir -p "${INSTALL_ROOT}${LIBEXECDIR}" + cp systemd/arkdaemon.init "${INSTALL_ROOT}${LIBEXECDIR}/arkmanager.init" + chmod +x "${INSTALL_ROOT}${LIBEXECDIR}/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@^DAEMON=\"/usr/bin/@DAEMON=\"${BINDIR}/@" "${INSTALL_ROOT}${EXECPREFIX}/libexec/arkmanager/arkmanager.init" + sed -i "s|=/usr/libexec/arkmanager/|=${LIBEXECDIR}/|" "${INSTALL_ROOT}/etc/systemd/system/arkmanager.service" + sed -i "s@^DAEMON=\"/usr/bin/@DAEMON=\"${BINDIR}/@" "${INSTALL_ROOT}${LIBEXECDIR}/arkmanager.init" 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 d40d9d9df3d93dac5dedec5d7b0fc4b599ff0545 Mon Sep 17 00:00:00 2001 From: Ben Peddell Date: Fri, 18 Sep 2015 19:25:30 +1000 Subject: [PATCH 28/85] Always write arkmanager.cfg.NEW --- tools/install.sh | 25 ++++++++++++++++--------- 1 file changed, 16 insertions(+), 9 deletions(-) diff --git a/tools/install.sh b/tools/install.sh index 223d789..753297e 100755 --- a/tools/install.sh +++ b/tools/install.sh @@ -123,16 +123,21 @@ if [ "$userinstall" == "yes" ]; then # Create a folder in ~/logs to let Ark tools write its own log files mkdir -p "${INSTALL_ROOT}${PREFIX}/logs/arktools" + # Copy arkmanager.cfg to ~/.arkmanager.cfg.NEW + cp arkmanager.cfg "${INSTALL_ROOT}${PREFIX}/.arkmanager.cfg.NEW" + # Change the defaults in the new config file + sed -i -e "s|^steamcmd_user=\"steam\"|steamcmd_user=\"--me\"|" \ + -e "s|\"/home/steam|\"${PREFIX}|" \ + -e "s|/var/log/arktools|${PREFIX}/logs/arktools|" \ + "${INSTALL_ROOT}${PREFIX}/.arkmanager.cfg.NEW" + # Copy arkmanager.cfg to ~/.arkmanager.cfg if it doesn't already exist if [ -f "${INSTALL_ROOT}${PREFIX}/.arkmanager.cfg" ]; then - cp -n arkmanager.cfg "${INSTALL_ROOT}${PREFIX}/.arkmanager.cfg.NEW" - sed -i "s|^steamcmd_user=\"steam\"|steamcmd_user=\"--me\"|;s|\"/home/steam|\"${PREFIX}|;s|/var/log/arktools|${PREFIX}/logs/arktools|" "${INSTALL_ROOT}${PREFIX}/.arkmanager.cfg.NEW" 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 copy of the new configuration file was included in '${INSTALL_ROOT}${PREFIX}/.arkmanager.cfg.NEW'. Make sure to review any changes and update your config accordingly!" exit 2 else - cp -n arkmanager.cfg "${INSTALL_ROOT}${PREFIX}/.arkmanager.cfg" - sed -i "s|^steamcmd_user=\"steam\"|steamcmd_user=\"--me\"|;s|\"/home/steam|\"${PREFIX}|;s|/var/log/arktools|${PREFIX}/logs/arktools|" "${INSTALL_ROOT}${PREFIX}/.arkmanager.cfg" + mv -n "${INSTALL_ROOT}${PREFIX}/.arkmanager.cfg.NEW" "${INSTALL_ROOT}${PREFIX}/.arkmanager.cfg" fi else # Copy arkmanager to /usr/bin and set permissions @@ -220,16 +225,18 @@ else # Copy arkmanager.cfg inside linux configuation folder if it doesn't already exists mkdir -p "${INSTALL_ROOT}/etc/arkmanager" + cp arkmanager.cfg "${INSTALL_ROOT}/etc/arkmanager/arkmanager.cfg.NEW" + chown "$1" "${INSTALL_ROOT}/etc/arkmanager/arkmanager.cfg.NEW" + sed -i -e "s|^steamcmd_user=\"steam\"|steamcmd_user=\"$1\"|" \ + -e "s|\"/home/steam|\"/home/$1|" \ + "${INSTALL_ROOT}/etc/arkmanager/arkmanager.cfg" + if [ -f "${INSTALL_ROOT}/etc/arkmanager/arkmanager.cfg" ]; then - cp -n arkmanager.cfg "${INSTALL_ROOT}/etc/arkmanager/arkmanager.cfg.NEW" - chown "$1" "${INSTALL_ROOT}/etc/arkmanager/arkmanager.cfg.NEW" 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 copy of the new configuration file was included in /etc/arkmanager. Make sure to review any changes and update your config accordingly!" exit 2 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" + mv -n "${INSTALL_ROOT}/etc/arkmanager/arkmanager.cfg.NEW" "${INSTALL_ROOT}/etc/arkmanager/arkmanager.cfg" fi fi From 283c04dd819cced42fed9b6f08297540eb02bbf9 Mon Sep 17 00:00:00 2001 From: Ben Peddell Date: Fri, 18 Sep 2015 19:29:28 +1000 Subject: [PATCH 29/85] Add install_bindir and install_libexecdir to config --- netinstall.sh | 4 +++- tools/arkmanager | 13 +++++++++++-- tools/arkmanager.cfg | 2 ++ tools/install.sh | 4 ++++ 4 files changed, 20 insertions(+), 3 deletions(-) diff --git a/netinstall.sh b/netinstall.sh index e1a2a40..37eb54e 100644 --- a/netinstall.sh +++ b/netinstall.sh @@ -4,7 +4,9 @@ # Net Installer, used with curl # +steamcmd_user="$1" channel=${2:-master} # if defined by 2nd argument install the defined version, otherwise install master +shift 2 # Download and untar installation files cd /tmp @@ -33,7 +35,7 @@ sed -i "s|^arkstCommit='.*'$|arkstCommit='${COMMIT}'|" arkmanager version=`<../.version` sed -i "s|^arkstVersion=\".*\"|arkstVersion='${version}'|" arkmanager chmod +x install.sh -bash install.sh $1 > /dev/null +bash install.sh "$steamcmd_user" "$@" > /dev/null status=$? diff --git a/tools/arkmanager b/tools/arkmanager index 5aadc11..164e0b1 100755 --- a/tools/arkmanager +++ b/tools/arkmanager @@ -45,6 +45,8 @@ arkserverLog="arkserver.log" # here is logged the output of ShooterGameServer appid="${appid:-376030}" mod_appid="${mod_appid:-346110}" arkautorestartfile="${arkautorestartfile:-ShooterGame/Saved/.autorestart}" +install_bindir="${install_bindir:-${0%/*}}" +install_libexecdir="${install_libexecdir:-${install_bindir%/*}/libexec/arkmanager}" # Script version arkstVersion="1.3" @@ -976,11 +978,18 @@ doUpgrade() { echo "arkmanager v${arkstVersion}: Checking for updates..." arkstLatestVersion=`curl -s https://raw.githubusercontent.com/FezVrasta/ark-server-tools/${arkstChannel}/.version` arkstLatestCommit=`curl -s https://api.github.com/repos/FezVrasta/ark-server-tools/git/refs/heads/${arkstChannel} | sed -n 's/^ *"sha": "\(.*\)",.*/\1/p'` + reinstall_args=() + if [ -n "$install_bindir" ]; then + reinstall_args=( "${reinstall_args[@]}" "--bindir" "$install_bindir" ) + fi + if [ -n "$install_libexecdir" ]; then + reinstall_args=( "${reinstall_args[@]}" "--libexecdir" "$install_libexecdir" ) + fi if [[ $arkstLatestVersion > $arkstVersion ]]; then read -p "A new version was found! Do you want to upgrade ARK Server Tools to v${arkstLatestVersion}?" -n 1 -r echo -en "\n" if [[ $REPLY =~ ^[Yy]$ ]]; then - curl -s https://raw.githubusercontent.com/FezVrasta/ark-server-tools/${arkstChannel}/netinstall.sh | $sudo bash -s -- ${steamcmd_user} ${arkstChannel} + curl -s https://raw.githubusercontent.com/FezVrasta/ark-server-tools/${arkstChannel}/netinstall.sh | $sudo bash -s -- ${steamcmd_user} ${arkstChannel} "${reinstall_args[@]}" else exit 0 fi @@ -988,7 +997,7 @@ doUpgrade() { read -p "A hotfix is available for v${arkstLatestVersion}. Do you wish to install it?" -n 1 -r echo -en "\n" if [[ $REPLY =~ ^[Yy]$ ]]; then - curl -s https://raw.githubusercontent.com/FezVrasta/ark-server-tools/${arkstChannel}/netinstall.sh | $sudo bash -s -- ${steamcmd_user} ${arkstChannel} + curl -s https://raw.githubusercontent.com/FezVrasta/ark-server-tools/${arkstChannel}/netinstall.sh | $sudo bash -s -- ${steamcmd_user} ${arkstChannel} "${reinstall_args[@]}" else exit 0 fi diff --git a/tools/arkmanager.cfg b/tools/arkmanager.cfg index e3568e2..ad03cf9 100644 --- a/tools/arkmanager.cfg +++ b/tools/arkmanager.cfg @@ -1,4 +1,6 @@ arkstChannel="master" # change it to a different branch to get non-stable versions +install_bindir="/usr/bin" +install_libexecdir="/usr/libexec/arkmanager" # config SteamCMD steamcmdroot="/home/steam/steamcmd" # path of your steamcmd instance diff --git a/tools/install.sh b/tools/install.sh index 753297e..d190db2 100755 --- a/tools/install.sh +++ b/tools/install.sh @@ -129,6 +129,8 @@ if [ "$userinstall" == "yes" ]; then sed -i -e "s|^steamcmd_user=\"steam\"|steamcmd_user=\"--me\"|" \ -e "s|\"/home/steam|\"${PREFIX}|" \ -e "s|/var/log/arktools|${PREFIX}/logs/arktools|" \ + -e "s|^install_bindir=.*|install_bindir=\"${BINDIR}\"|" \ + -e "s|^install_libexecdir=.*|install_libexecdir=\"${LIBEXECDIR}\"|" \ "${INSTALL_ROOT}${PREFIX}/.arkmanager.cfg.NEW" # Copy arkmanager.cfg to ~/.arkmanager.cfg if it doesn't already exist @@ -229,6 +231,8 @@ else chown "$1" "${INSTALL_ROOT}/etc/arkmanager/arkmanager.cfg.NEW" sed -i -e "s|^steamcmd_user=\"steam\"|steamcmd_user=\"$1\"|" \ -e "s|\"/home/steam|\"/home/$1|" \ + -e "s|^install_bindir=.*|install_bindir=\"${BINDIR}\"|" \ + -e "s|^install_libexecdir=.*|install_libexecdir=\"${LIBEXECDIR}\"|" \ "${INSTALL_ROOT}/etc/arkmanager/arkmanager.cfg" if [ -f "${INSTALL_ROOT}/etc/arkmanager/arkmanager.cfg" ]; then From f8789764dca33c67fa3bce1dcd8ecc0e930bfb35 Mon Sep 17 00:00:00 2001 From: Ben Peddell Date: Fri, 18 Sep 2015 19:37:12 +1000 Subject: [PATCH 30/85] Add datadir and dataprefix arguments to install --- tools/arkmanager | 9 +++++++++ tools/arkmanager.cfg | 1 + tools/install.sh | 24 ++++++++++++++++++++++++ 3 files changed, 34 insertions(+) diff --git a/tools/arkmanager b/tools/arkmanager index 164e0b1..33c52b6 100755 --- a/tools/arkmanager +++ b/tools/arkmanager @@ -48,6 +48,12 @@ arkautorestartfile="${arkautorestartfile:-ShooterGame/Saved/.autorestart}" install_bindir="${install_bindir:-${0%/*}}" install_libexecdir="${install_libexecdir:-${install_bindir%/*}/libexec/arkmanager}" +if [ "$steamcmd_user" == "--me" ]; then + install_datadir="${install_datadir:-${HOME}/.share/local/arkmanager}" +else + install_datadir="${install_datadir:-${install_bindir%/*}/share/arkmanager}" +fi + # Script version arkstVersion="1.3" arkstCommit='' @@ -985,6 +991,9 @@ doUpgrade() { if [ -n "$install_libexecdir" ]; then reinstall_args=( "${reinstall_args[@]}" "--libexecdir" "$install_libexecdir" ) fi + if [ -n "$install_datadir" ]; then + reinstall_args=( "${reinstall_args[@]}" "--datadir" "$install_datadir" ) + fi if [[ $arkstLatestVersion > $arkstVersion ]]; then read -p "A new version was found! Do you want to upgrade ARK Server Tools to v${arkstLatestVersion}?" -n 1 -r echo -en "\n" diff --git a/tools/arkmanager.cfg b/tools/arkmanager.cfg index ad03cf9..024a940 100644 --- a/tools/arkmanager.cfg +++ b/tools/arkmanager.cfg @@ -1,6 +1,7 @@ arkstChannel="master" # change it to a different branch to get non-stable versions install_bindir="/usr/bin" install_libexecdir="/usr/libexec/arkmanager" +install_datadir="/usr/share/arkmanager" # config SteamCMD steamcmdroot="/home/steam/steamcmd" # path of your steamcmd instance diff --git a/tools/install.sh b/tools/install.sh index d190db2..ceaae2d 100755 --- a/tools/install.sh +++ b/tools/install.sh @@ -28,6 +28,13 @@ while [ -n "$1" ]; do EXECPREFIX="$2" shift ;; + --data-prefix=*) + DATAPREFIX="${1#--data-prefix=}" + ;; + --data-prefix) + DATAPREFIX="$2" + shift + ;; --install-root=*) INSTALL_ROOT="${1#--install-root=}" ;; @@ -49,6 +56,13 @@ while [ -n "$1" ]; do LIBEXECDIR="$2" shift ;; + --datadir=*) + DATADIR="${1#--datadir=}" + ;; + --datadir) + DATADIR="$2" + shift + ;; -*) echo "Invalid option '$1'" showusage=yes @@ -84,13 +98,16 @@ fi if [ "$userinstall" == "yes" ]; then PREFIX="${PREFIX:-${HOME}}" EXECPREFIX="${EXECPREFIX:-${PREFIX}}" + DATAPREFIX="${DATAPREFIX:-${PREFIX}/.local/share}" else PREFIX="${PREFIX:-/usr/local}" EXECPREFIX="${EXECPREFIX:-${PREFIX}}" + DATAPREFIX="${DATAPREFIX:-${PREFIX}/share}" fi BINDIR="${BINDIR:-${EXECPREFIX}/bin}" LIBEXECDIR="${LIBEXECDIR:-${EXECPREFIX}/libexec/arkmanager}" +DATADIR="${DATADIR:-${DATAPREFIX}/arkmanager}" if [ "$showusage" == "yes" ]; then echo "Usage: ./install.sh {|--me} [OPTIONS]" @@ -106,11 +123,16 @@ if [ "$showusage" == "yes" ]; then echo " [PREFIX=${PREFIX}]" echo "--exec-prefix Specify the prefix under which to install executables" echo " [EXECPREFIX=${EXECPREFIX}]" + echo "--data-prefix Specify the prefix under which to install suppor files" + echo " [DATAPREFIX=${DATAPREFIX}]" echo "--install-root Specify the staging directory in which to perform the install" echo " [INSTALL_ROOT=${INSTALL_ROOT}]" echo "--bindir Specify the directory under which to install executables" echo " [BINDIR=${BINDIR}]" echo "--libexecdir Specify the directory under which to install executable support files" + echo " [LIBEXECDIR=${LIBEXECDIR}]" + echo "--datadir Specify the directory under which to install support files" + echo " [DATADIR=${DATADIR}]" exit 1 fi @@ -131,6 +153,7 @@ if [ "$userinstall" == "yes" ]; then -e "s|/var/log/arktools|${PREFIX}/logs/arktools|" \ -e "s|^install_bindir=.*|install_bindir=\"${BINDIR}\"|" \ -e "s|^install_libexecdir=.*|install_libexecdir=\"${LIBEXECDIR}\"|" \ + -e "s|^install_datadir=.*|install_datadir=\"${DATADIR}\"|" \ "${INSTALL_ROOT}${PREFIX}/.arkmanager.cfg.NEW" # Copy arkmanager.cfg to ~/.arkmanager.cfg if it doesn't already exist @@ -233,6 +256,7 @@ else -e "s|\"/home/steam|\"/home/$1|" \ -e "s|^install_bindir=.*|install_bindir=\"${BINDIR}\"|" \ -e "s|^install_libexecdir=.*|install_libexecdir=\"${LIBEXECDIR}\"|" \ + -e "s|^install_datadir=.*|install_datadir=\"${DATADIR}\"|" \ "${INSTALL_ROOT}/etc/arkmanager/arkmanager.cfg" if [ -f "${INSTALL_ROOT}/etc/arkmanager/arkmanager.cfg" ]; then From 2a3a2cc1aadc01cb21a705d425acf1e33ec04314 Mon Sep 17 00:00:00 2001 From: Ben Peddell Date: Fri, 18 Sep 2015 19:41:43 +1000 Subject: [PATCH 31/85] Add uninstall scripts --- tools/install.sh | 19 +++++++++++++++++++ tools/uninstall-user.sh | 14 ++++++++++++++ tools/uninstall.sh | 37 +++++++++++++++++++++++++++++++++++++ 3 files changed, 70 insertions(+) create mode 100644 tools/uninstall-user.sh create mode 100644 tools/uninstall.sh diff --git a/tools/install.sh b/tools/install.sh index ceaae2d..d4e31d3 100755 --- a/tools/install.sh +++ b/tools/install.sh @@ -142,6 +142,16 @@ if [ "$userinstall" == "yes" ]; then cp arkmanager "${INSTALL_ROOT}${BINDIR}/arkmanager" chmod +x "${INSTALL_ROOT}${BINDIR}/arkmanager" + # Create a folder in ~/.local/share to store arkmanager support files + mkdir -p "${INSTALL_ROOT}${DATADIR}" + + # Copy the uninstall script to ~/.local/share/arkmanager + cp uninstall-user.sh "${INSTALL_ROOT}${DATADIR}/arkmanager-uninstall.sh" + chmod +x "${INSTALL_ROOT}${DATADIR}/arkmanager-uninstall.sh" + sed -i -e "s|^BINDIR=.*|BINDIR=\"${BINDIR}\"|" \ + -e "s|^DATADIR=.*|DATADIR=\"${DATADIR}\"|" \ + "${INSTALL_ROOT}${DATADIR}/arkmanager-uninstall.sh" + # Create a folder in ~/logs to let Ark tools write its own log files mkdir -p "${INSTALL_ROOT}${PREFIX}/logs/arktools" @@ -169,6 +179,15 @@ else cp arkmanager "${INSTALL_ROOT}${BINDIR}/arkmanager" chmod +x "${INSTALL_ROOT}${BINDIR}/arkmanager" + # Copy the uninstall script to ~/.local/share/arkmanager + mkdir -p "${INSTALL_ROOT}${LIBEXECDIR}" + cp uninstall.sh "${INSTALL_ROOT}${DATADIR}/arkmanager-uninstall.sh" + chmod +x "${INSTALL_ROOT}${DATADIR}/arkmanager-uninstall.sh" + sed -i -e "s|^BINDIR=.*|BINDIR=\"${BINDIR}\"|" \ + -e "s|^LIBEXECDIR=.*|LIBEXECDIR=\"${LIBEXECDIR}\"|" \ + -e "s|^DATADIR=.*|DATADIR=\"${DATADIR}\"|" \ + "${INSTALL_ROOT}${DATADIR}/arkmanager-uninstall.sh" + # 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 diff --git a/tools/uninstall-user.sh b/tools/uninstall-user.sh new file mode 100644 index 0000000..77e7221 --- /dev/null +++ b/tools/uninstall-user.sh @@ -0,0 +1,14 @@ +#!/bin/bash +# +# uninstall-user.sh + +BINDIR="/home/steam/bin" +DATADIR="/home/steam/.local/share/arkmanager" + +for f in "${BINDIR}/arkmanager" \ + "${DATADIR}/uninstall.sh" +do + if [ -f "$f" ]; then + rm "$f" + fi +done diff --git a/tools/uninstall.sh b/tools/uninstall.sh new file mode 100644 index 0000000..e4f20b5 --- /dev/null +++ b/tools/uninstall.sh @@ -0,0 +1,37 @@ +#!/bin/bash +# +# uninstall.sh + +BINDIR="/usr/bin" +DATADIR="/usr/share/arkmanager" +LIBEXECDIR="/usr/libexec/arkmanager" +INITSCRIPT= + +if [ -f "/etc/rc.d/init.d/arkmanager" ]; then + INITSCRIPT="/etc/rc.d/init.d/arkmanager" + if [ -f "/etc/rc.d/init.d/functions" ]; then + chkconfig arkmanager off + fi +elif [ -f "/etc/init.d/arkmanager" ]; then + INITSCRIPT="/etc/init.d/arkmanager" + if [ -f "/lib/lsb/init-functions" ]; then + update-rc.d -f arkmanager remove + elif [ -f "/sbin/runscript" ]; then + rc-update del arkmanager default + fi +elif [ -f "/etc/systemd/system/arkmanager.service" ]; then + INITSCRIPT="/etc/systemd/system/arkmanager.service" + systemctl disable arkmanager.service +fi + +if [ -n "$INITSCRIPT" ]; then + for f in "${INITSCRIPT}" \ + "${BINDIR}/arkmanager" \ + "${LIBEXECDIR}/arkmanager.init" \ + "${LIBEXECDIR}/arkmanager-uninstall.sh" + do + if [ -f "$f" ]; then + rm "$f" + fi + done +fi From 0a09613c3e0b00df34c416cf49cf4a2c827c0994 Mon Sep 17 00:00:00 2001 From: Ben Peddell Date: Fri, 18 Sep 2015 19:51:31 +1000 Subject: [PATCH 32/85] Rename upgrade command to upgrade-tools --- tools/arkmanager | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tools/arkmanager b/tools/arkmanager index 33c52b6..5d8ac61 100755 --- a/tools/arkmanager +++ b/tools/arkmanager @@ -1104,7 +1104,7 @@ while true; do status) printStatus ;; - upgrade) + upgrade-tools) doUpgrade ;; useconfig) @@ -1134,7 +1134,7 @@ while true; do echo "update --warn Warn players before updating server" echo "update --validate Validates all ARK server files" echo "update --update-mods Updates installed and requested mods" - echo "upgrade Check for a new ARK Server Tools version and upgrades it if needed" + echo "upgrade-tools Check for a new ARK Server Tools version and upgrades it if needed" echo "useconfig Use the configuration overrides in the specified config name or file" exit 1 ;; From ee32f7c86a35146d1ff7d1a6300b6c5ab24974b7 Mon Sep 17 00:00:00 2001 From: Ben Peddell Date: Fri, 18 Sep 2015 19:58:15 +1000 Subject: [PATCH 33/85] Add uninstall-tools command to arkmanager --- tools/arkmanager | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/tools/arkmanager b/tools/arkmanager index 5d8ac61..f3d90ab 100755 --- a/tools/arkmanager +++ b/tools/arkmanager @@ -1015,6 +1015,25 @@ doUpgrade() { fi } +doUninstallTools() { + local sudo=sudo + if [ "$steamcmd_user" == "--me" ]; then + sudo= + fi + + read -p "Are you sure you want to uninstall the ARK Server Tools?" -n 1 -r + + if [[ "$REPLY" =~ ^[Yy]$ ]]; then + if [ -n "${install_datadir}" -a -x "${install_datadir}/arkmanager-uninstall.sh" ]; then + $sudo "${install_datadir}/arkmanager-uninstall.sh" + exit 0 + elif [ -n "${install_libexecdir}" -a -x "${install_libexecdir}/arkmanager-uninstall.sh" ]; then + $sudo "${install_libexecdir}/arkmanager-uninstall.sh" + exit 0 + fi + fi +} + useConfig() { for varname in "${!configfile_@}"; do if [ "configfile_$1" == "$varname" ]; then @@ -1107,6 +1126,9 @@ while true; do upgrade-tools) doUpgrade ;; + uninstall-tools) + doUninstallTools + ;; useconfig) useConfig "$2" shift @@ -1135,6 +1157,7 @@ while true; do echo "update --validate Validates all ARK server files" echo "update --update-mods Updates installed and requested mods" echo "upgrade-tools Check for a new ARK Server Tools version and upgrades it if needed" + echo "uninstall-tools Uninstall the ARK Server Tools" echo "useconfig Use the configuration overrides in the specified config name or file" exit 1 ;; From 4e7fc8f0b1aa88d6619a01a583aac9b281f4e16c Mon Sep 17 00:00:00 2001 From: Ben Peddell Date: Sat, 19 Sep 2015 00:05:14 +1000 Subject: [PATCH 34/85] Add --saveworld option to update --- tools/arkmanager | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/tools/arkmanager b/tools/arkmanager index 1680c01..fdb49e4 100755 --- a/tools/arkmanager +++ b/tools/arkmanager @@ -575,6 +575,7 @@ doUpdate() { local updatetype=normal local validate= local modupdate= + local saveworld= for arg in "$@"; do if [ "$arg" == "--force" ]; then @@ -586,6 +587,8 @@ doUpdate() { elif [ "$arg" == "--validate" ]; then validate=validate appupdate=1 + elif [ "$arg" == "--saveworld" ]; then + saveworld=1 elif [ "$arg" == "--update-mods" ]; then modupdate=1 fi @@ -626,8 +629,12 @@ doUpdate() { if isTheServerRunning ;then serverWasAlive=1 fi - echo "Saving world" - doSaveWorld + + if [ -n "$saveworld" ]; then + echo "Saving world" + doSaveWorld + fi + doStop if [ -n "$appupdate" ]; then @@ -1157,6 +1164,7 @@ while true; do echo "update --safe Wait for server to perform world save and update." echo "update --warn Warn players before updating server" echo "update --validate Validates all ARK server files" + echo "update --saveworld Saves world before update" echo "update --update-mods Updates installed and requested mods" echo "upgrade-tools Check for a new ARK Server Tools version and upgrades it if needed" echo "uninstall-tools Uninstall the ARK Server Tools" From c31946525a46bb92445e6cd57f49e7473646a983 Mon Sep 17 00:00:00 2001 From: Ben Peddell Date: Sat, 19 Sep 2015 00:09:00 +1000 Subject: [PATCH 35/85] Make it more obvious that update command takes multiple options --- tools/arkmanager | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/tools/arkmanager b/tools/arkmanager index fdb49e4..414493b 100755 --- a/tools/arkmanager +++ b/tools/arkmanager @@ -1159,16 +1159,18 @@ while true; do echo "stop Stops the server" echo "stop --all Stops all servers specified in configfile_xxxxx" echo "status Returns the status of the current ARK server instance" - echo "update Check for a new ARK server version, if needed, stops the server, updates it, and starts it again" - echo "update --force Apply update without checking the current version" - echo "update --safe Wait for server to perform world save and update." - echo "update --warn Warn players before updating server" - echo "update --validate Validates all ARK server files" - echo "update --saveworld Saves world before update" - echo "update --update-mods Updates installed and requested mods" + echo "update [OPTION ...] Check for a new ARK server version, if needed, stops the server, updates it, and starts it again" echo "upgrade-tools Check for a new ARK Server Tools version and upgrades it if needed" echo "uninstall-tools Uninstall the ARK Server Tools" echo "useconfig Use the configuration overrides in the specified config name or file" + echo + echo "Update command takes the below options:" + echo " --force Apply update without checking the current version" + echo " --safe Wait for server to perform world save and update." + echo " --warn Warn players before updating server" + echo " --validate Validates all ARK server files" + echo " --saveworld Saves world before update" + echo " --update-mods Updates installed and requested mods" exit 1 ;; *) From 2d305755be2b552a2b2f3ef1ee4b4300c1d64ebe Mon Sep 17 00:00:00 2001 From: Ben Peddell Date: Sat, 19 Sep 2015 08:25:28 +1000 Subject: [PATCH 36/85] Rename doUpgrade to doUpgradeTools --- tools/arkmanager | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tools/arkmanager b/tools/arkmanager index 414493b..5d0d844 100755 --- a/tools/arkmanager +++ b/tools/arkmanager @@ -985,7 +985,7 @@ printStatus(){ echo -e "$NORMAL" "Server version: " "$GREEN" $instver "$NORMAL" } -doUpgrade() { +doUpgradeTools() { local sudo=sudo if [ "$steamcmd_user" == "--me" ]; then sudo= @@ -1133,7 +1133,7 @@ while true; do printStatus ;; upgrade-tools) - doUpgrade + doUpgradeTools ;; uninstall-tools) doUninstallTools From 54872744fa7f16ec4c4ca03e217c42169279d1f4 Mon Sep 17 00:00:00 2001 From: Ben Peddell Date: Sat, 19 Sep 2015 08:26:32 +1000 Subject: [PATCH 37/85] Move doUpgradeTools and doUninstallTools above root check --- tools/arkmanager | 116 +++++++++++++++++++++++------------------------ 1 file changed, 58 insertions(+), 58 deletions(-) diff --git a/tools/arkmanager b/tools/arkmanager index 5d0d844..a8afe80 100755 --- a/tools/arkmanager +++ b/tools/arkmanager @@ -6,6 +6,64 @@ # Maintainer: FezVrasta # Contributors: Sispheor, Atriusftw, klightspeed, lexat, puseidr +doUpgradeTools() { + local sudo=sudo + if [ "$steamcmd_user" == "--me" ]; then + sudo= + fi + echo "arkmanager v${arkstVersion}: Checking for updates..." + arkstLatestVersion=`curl -s https://raw.githubusercontent.com/FezVrasta/ark-server-tools/${arkstChannel}/.version` + arkstLatestCommit=`curl -s https://api.github.com/repos/FezVrasta/ark-server-tools/git/refs/heads/${arkstChannel} | sed -n 's/^ *"sha": "\(.*\)",.*/\1/p'` + reinstall_args=() + if [ -n "$install_bindir" ]; then + reinstall_args=( "${reinstall_args[@]}" "--bindir" "$install_bindir" ) + fi + if [ -n "$install_libexecdir" ]; then + reinstall_args=( "${reinstall_args[@]}" "--libexecdir" "$install_libexecdir" ) + fi + if [ -n "$install_datadir" ]; then + reinstall_args=( "${reinstall_args[@]}" "--datadir" "$install_datadir" ) + fi + if [[ $arkstLatestVersion > $arkstVersion ]]; then + read -p "A new version was found! Do you want to upgrade ARK Server Tools to v${arkstLatestVersion}?" -n 1 -r + echo -en "\n" + if [[ $REPLY =~ ^[Yy]$ ]]; then + curl -s https://raw.githubusercontent.com/FezVrasta/ark-server-tools/${arkstChannel}/netinstall.sh | $sudo bash -s -- ${steamcmd_user} ${arkstChannel} "${reinstall_args[@]}" + else + exit 0 + fi + elif [[ "$arkstLatestCommit" != "$arkstCommit" ]]; then + read -p "A hotfix is available for v${arkstLatestVersion}. Do you wish to install it?" -n 1 -r + echo -en "\n" + if [[ $REPLY =~ ^[Yy]$ ]]; then + curl -s https://raw.githubusercontent.com/FezVrasta/ark-server-tools/${arkstChannel}/netinstall.sh | $sudo bash -s -- ${steamcmd_user} ${arkstChannel} "${reinstall_args[@]}" + else + exit 0 + fi + else + echo "Your ARK server tools are already up to date" + fi +} + +doUninstallTools() { + local sudo=sudo + if [ "$steamcmd_user" == "--me" ]; then + sudo= + fi + + read -p "Are you sure you want to uninstall the ARK Server Tools?" -n 1 -r + + if [[ "$REPLY" =~ ^[Yy]$ ]]; then + if [ -n "${install_datadir}" -a -x "${install_datadir}/arkmanager-uninstall.sh" ]; then + $sudo "${install_datadir}/arkmanager-uninstall.sh" + exit 0 + elif [ -n "${install_libexecdir}" -a -x "${install_libexecdir}/arkmanager-uninstall.sh" ]; then + $sudo "${install_libexecdir}/arkmanager-uninstall.sh" + exit 0 + fi + fi +} + # Check the user is not currently running this script as root if [ "$(id -u)" == "0" ]; then echo "This script must NOT be run as root" 1>&2 @@ -985,64 +1043,6 @@ printStatus(){ echo -e "$NORMAL" "Server version: " "$GREEN" $instver "$NORMAL" } -doUpgradeTools() { - local sudo=sudo - if [ "$steamcmd_user" == "--me" ]; then - sudo= - fi - echo "arkmanager v${arkstVersion}: Checking for updates..." - arkstLatestVersion=`curl -s https://raw.githubusercontent.com/FezVrasta/ark-server-tools/${arkstChannel}/.version` - arkstLatestCommit=`curl -s https://api.github.com/repos/FezVrasta/ark-server-tools/git/refs/heads/${arkstChannel} | sed -n 's/^ *"sha": "\(.*\)",.*/\1/p'` - reinstall_args=() - if [ -n "$install_bindir" ]; then - reinstall_args=( "${reinstall_args[@]}" "--bindir" "$install_bindir" ) - fi - if [ -n "$install_libexecdir" ]; then - reinstall_args=( "${reinstall_args[@]}" "--libexecdir" "$install_libexecdir" ) - fi - if [ -n "$install_datadir" ]; then - reinstall_args=( "${reinstall_args[@]}" "--datadir" "$install_datadir" ) - fi - if [[ $arkstLatestVersion > $arkstVersion ]]; then - read -p "A new version was found! Do you want to upgrade ARK Server Tools to v${arkstLatestVersion}?" -n 1 -r - echo -en "\n" - if [[ $REPLY =~ ^[Yy]$ ]]; then - curl -s https://raw.githubusercontent.com/FezVrasta/ark-server-tools/${arkstChannel}/netinstall.sh | $sudo bash -s -- ${steamcmd_user} ${arkstChannel} "${reinstall_args[@]}" - else - exit 0 - fi - elif [[ "$arkstLatestCommit" != "$arkstCommit" ]]; then - read -p "A hotfix is available for v${arkstLatestVersion}. Do you wish to install it?" -n 1 -r - echo -en "\n" - if [[ $REPLY =~ ^[Yy]$ ]]; then - curl -s https://raw.githubusercontent.com/FezVrasta/ark-server-tools/${arkstChannel}/netinstall.sh | $sudo bash -s -- ${steamcmd_user} ${arkstChannel} "${reinstall_args[@]}" - else - exit 0 - fi - else - echo "Your ARK server tools are already up to date" - fi -} - -doUninstallTools() { - local sudo=sudo - if [ "$steamcmd_user" == "--me" ]; then - sudo= - fi - - read -p "Are you sure you want to uninstall the ARK Server Tools?" -n 1 -r - - if [[ "$REPLY" =~ ^[Yy]$ ]]; then - if [ -n "${install_datadir}" -a -x "${install_datadir}/arkmanager-uninstall.sh" ]; then - $sudo "${install_datadir}/arkmanager-uninstall.sh" - exit 0 - elif [ -n "${install_libexecdir}" -a -x "${install_libexecdir}/arkmanager-uninstall.sh" ]; then - $sudo "${install_libexecdir}/arkmanager-uninstall.sh" - exit 0 - fi - fi -} - useConfig() { for varname in "${!configfile_@}"; do if [ "configfile_$1" == "$varname" ]; then From 4b23b0846f99e1f025dbd807be127805e984aa26 Mon Sep 17 00:00:00 2001 From: Ben Peddell Date: Sat, 19 Sep 2015 08:28:24 +1000 Subject: [PATCH 38/85] Don't use sudo if uid is 0 --- tools/arkmanager | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tools/arkmanager b/tools/arkmanager index a8afe80..a98d0b9 100755 --- a/tools/arkmanager +++ b/tools/arkmanager @@ -8,7 +8,7 @@ doUpgradeTools() { local sudo=sudo - if [ "$steamcmd_user" == "--me" ]; then + if [ "$UID" == 0 -o "$steamcmd_user" == "--me" ]; then sudo= fi echo "arkmanager v${arkstVersion}: Checking for updates..." @@ -47,7 +47,7 @@ doUpgradeTools() { doUninstallTools() { local sudo=sudo - if [ "$steamcmd_user" == "--me" ]; then + if [ "$UID" == 0 -o "$steamcmd_user" == "--me" ]; then sudo= fi From 938c031c7364f4e081581a8b637b4f056c65f877 Mon Sep 17 00:00:00 2001 From: Ben Peddell Date: Sat, 19 Sep 2015 08:29:23 +1000 Subject: [PATCH 39/85] Move script version above root check --- tools/arkmanager | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/tools/arkmanager b/tools/arkmanager index a98d0b9..e709c94 100755 --- a/tools/arkmanager +++ b/tools/arkmanager @@ -6,6 +6,10 @@ # Maintainer: FezVrasta # Contributors: Sispheor, Atriusftw, klightspeed, lexat, puseidr +# Script version +arkstVersion="1.3" +arkstCommit='' + doUpgradeTools() { local sudo=sudo if [ "$UID" == 0 -o "$steamcmd_user" == "--me" ]; then @@ -112,10 +116,6 @@ else install_datadir="${install_datadir:-${install_bindir%/*}/share/arkmanager}" fi -# Script version -arkstVersion="1.3" -arkstCommit='' - #--------------------- # functions #--------------------- From 235ee824cc509834803de3ee913b25df69cc6666 Mon Sep 17 00:00:00 2001 From: Ben Peddell Date: Sat, 19 Sep 2015 08:31:32 +1000 Subject: [PATCH 40/85] Allow upgrade-tools and uninstall-tools when running as root --- tools/arkmanager | 44 ++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 42 insertions(+), 2 deletions(-) diff --git a/tools/arkmanager b/tools/arkmanager index e709c94..aa8333e 100755 --- a/tools/arkmanager +++ b/tools/arkmanager @@ -68,10 +68,50 @@ doUninstallTools() { fi } +runAsRoot(){ + getConfigVar(){ + val="$(echo -ne "$(sed -n "/^$1=/{s|^[^=]*||;s|^\"\\(.*\\)\"\$|\\1|;s|^'\\(.*\\)\$|\\1|;p}" <"/etc/arkmanager/arkmanager.cfg" | tail -n1)")" + if [ -n "$val" ]; then + echo "$val" + else + echo "$2" + fi + } + + arkstChannel="$(getConfigVar arkstChannel "master")" + install_bindir="$(getConfigVar install_bindir "${0%/*}")" + install_libexecdir="$(getConfigVar install_libexecdir "${install_bindir%/*}/libexec/arkmanager")" + install_datadir="$(getConfigVar install_datadir "${install_bindir%/*}/share/arkmanager")" + steamcmd_user="$(getConfigVar steamcmd_user "steam")" + + if ! getent passwd "$steamcmd_user" >/dev/null 2>&1; then + echo "Invalid steamcmd_user in config file" + exit 1 + fi + + if [ "$1" == "upgrade-tools" ]; then + doUpgrade + elif [ "$1" == "uninstall-tools" ]; then + doUninstallTools + else + echo -n "arkmanager v${arkstVersion}: " + if [ $# -eq 0 ]; then + echo "no command specified" + else + echo "unknown command '$1' specified" + fi + echo -e "Usage: arkmanager [OPTION]\n" + echo "Option Description" + echo "upgrade-tools Check for a new ARK Server Tools version and upgrades it if needed" + echo "uninstall-tools Uninstall the ARK Server Tools" + exit 1 + fi +} + # Check the user is not currently running this script as root if [ "$(id -u)" == "0" ]; then - echo "This script must NOT be run as root" 1>&2 - exit 1 + runAsRoot "$@" + exit 0 fi #--------------------- From 93d1bed6dd6e9a4c9831370bce11d8b9520c9105 Mon Sep 17 00:00:00 2001 From: Marius Linge Date: Sat, 19 Sep 2015 18:54:52 +0200 Subject: [PATCH 41/85] Updates the README with new changes to the commands --- README.md | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 63b194c..8942613 100644 --- a/README.md +++ b/README.md @@ -91,22 +91,31 @@ Waits for server to perform world save and then updates. #### arkmanager update --warn Warns the players for a configurable amount of time before updating. Should be suitable for adding to a cron job. +#### arkmanager update --validate +Validates all ARK server files + +#### arkmanager update --update-mods +Updates installed and requested mods + #### arkmanager status Get the status of the server. Show if the process is running, if the server is up and the current version number #### arkmanager checkupdate Check if a new version of the server is available but not apply it -#### arkmanager upgrade +#### arkmanager upgrade-tools Check for a new ARK Server Tools version and upgrades it if needed +#### arkmanager uninstall-tools +Uninstalls the ARK Server Tools + #### arkmanager backup Saves a backup of your server inside the backup directory #### arkmanager broadcast "message" Broadcast a message to all curently connected players. Example: ``` -arkmanager broadcast "Hi, admin there" +arkmanager broadcast "Hi, admin here" ``` #### arkmanager saveworld From a8b3e65bd9624e1052c56c265f032102624ec56e Mon Sep 17 00:00:00 2001 From: Marius Linge Date: Sat, 19 Sep 2015 21:02:14 +0200 Subject: [PATCH 42/85] push to new version --- .version | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.version b/.version index 7e32cd5..c068b24 100644 --- a/.version +++ b/.version @@ -1 +1 @@ -1.3 +1.4 From cb7ab15f692f1c3944c447a07c561776a0c6cc90 Mon Sep 17 00:00:00 2001 From: Marius Linge Date: Sun, 20 Sep 2015 08:19:24 +0200 Subject: [PATCH 43/85] Checks if user wants to perform a backup prior to updating if a new version is available --- tools/arkmanager | 3 +++ 1 file changed, 3 insertions(+) diff --git a/tools/arkmanager b/tools/arkmanager index 5df729b..4c9a823 100755 --- a/tools/arkmanager +++ b/tools/arkmanager @@ -639,6 +639,9 @@ doUpdate() { doStop if [ -n "$appupdate" ]; then + if [ "$arkBackupPreUpdate" == "true" ]; then + doBackup + fi cd "$steamcmdroot" ./$steamcmdexec +login anonymous +force_install_dir "$arkserverroot" +app_update $appid $validate +quit # the current version should be the last version. We set our version From 94b3138988641a96c9645f2df5c8081466517486 Mon Sep 17 00:00:00 2001 From: Marius Linge Date: Sun, 20 Sep 2015 08:20:02 +0200 Subject: [PATCH 44/85] Adds a configuration value to allow backup prior to updating the server --- tools/arkmanager.cfg | 1 + 1 file changed, 1 insertion(+) diff --git a/tools/arkmanager.cfg b/tools/arkmanager.cfg index 024a940..094df34 100644 --- a/tools/arkmanager.cfg +++ b/tools/arkmanager.cfg @@ -15,6 +15,7 @@ arkserverexec="ShooterGame/Binaries/Linux/ShooterGameServer" # name of AR arkbackupdir="/home/steam/ARK-Backups" # path to backup directory arkwarnminutes="60" # number of minutes to warn players when using update --warn arkautorestartfile="ShooterGame/Saved/.autorestart" # path to autorestart file +arkBackupPreUpdate="false" # set this to true if you want to perform a backup before updating # Update warning messages # Modify as desired, putting the %d replacement operator where the number belongs From fee2e3040f37a54d487acc9821b8c2fbf7405801 Mon Sep 17 00:00:00 2001 From: Marius Linge Date: Tue, 22 Sep 2015 01:17:38 +0200 Subject: [PATCH 45/85] Prevents version conflicts --- tools/arkmanager | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/arkmanager b/tools/arkmanager index 326576f..517bf1d 100755 --- a/tools/arkmanager +++ b/tools/arkmanager @@ -7,7 +7,7 @@ # Contributors: Sispheor, Atriusftw, klightspeed, lexat, puseidr # Script version -arkstVersion="1.3" +arkstVersion="1.4" arkstCommit='' doUpgradeTools() { From 115f0c3ce7e6418658bd9c9c542ddb7bf8e93725 Mon Sep 17 00:00:00 2001 From: Marius Linge Date: Tue, 22 Sep 2015 19:42:50 +0200 Subject: [PATCH 46/85] Improves the backup on-request feature --- tools/arkmanager | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/tools/arkmanager b/tools/arkmanager index 4c9a823..1ad3638 100755 --- a/tools/arkmanager +++ b/tools/arkmanager @@ -592,6 +592,8 @@ doUpdate() { saveworld=1 elif [ "$arg" == "--update-mods" ]; then modupdate=1 + elif [ "$arg" == "--backup" ]; then + arkBackupPreUpdate=true fi done @@ -637,11 +639,14 @@ doUpdate() { fi doStop + + # If user wants to back-up, we do it here. + + if [ "$arkBackupPreUpdate" == "true" ]; then + doBackup + fi if [ -n "$appupdate" ]; then - if [ "$arkBackupPreUpdate" == "true" ]; then - doBackup - fi cd "$steamcmdroot" ./$steamcmdexec +login anonymous +force_install_dir "$arkserverroot" +app_update $appid $validate +quit # the current version should be the last version. We set our version @@ -657,7 +662,7 @@ doUpdate() { fi done fi - + # we restart the server only if it was started before the update if [ $serverWasAlive -eq 1 ]; then doStart From e58ad467972fa4d7d04b856d402e21a43b2f4819 Mon Sep 17 00:00:00 2001 From: Marius Linge Date: Tue, 22 Sep 2015 21:24:38 +0200 Subject: [PATCH 47/85] Actually displays seconds instead of spamming 1 minute --- tools/arkmanager | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tools/arkmanager b/tools/arkmanager index 517bf1d..2ce9621 100755 --- a/tools/arkmanager +++ b/tools/arkmanager @@ -649,8 +649,8 @@ doUpdateWarn(){ echo "Server has stopped. Aborting update" return 1 fi - if [ -n "$msgWarnUpdateMinutes" ]; then - warnmsg="$(printf "$msgWarnUpdateMinutes" "$warnminutes")" + if [ -n "$msgWarnUpdateSeconds" ]; then + warnmsg="$(printf "$msgWarnUpdateSeconds" "$warnmseconds")" else warnmsg="$(printf "This ARK server will shutdown for an update in %d seconds" "$warnseconds")" fi From cd694294057b0d9e20d429f3dd41196063617197 Mon Sep 17 00:00:00 2001 From: Marius Linge Date: Tue, 22 Sep 2015 21:40:03 +0200 Subject: [PATCH 48/85] Fixes typo from last commit --- tools/arkmanager | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/arkmanager b/tools/arkmanager index 2ce9621..c268785 100755 --- a/tools/arkmanager +++ b/tools/arkmanager @@ -650,7 +650,7 @@ doUpdateWarn(){ return 1 fi if [ -n "$msgWarnUpdateSeconds" ]; then - warnmsg="$(printf "$msgWarnUpdateSeconds" "$warnmseconds")" + warnmsg="$(printf "$msgWarnUpdateSeconds" "$warnseconds")" else warnmsg="$(printf "This ARK server will shutdown for an update in %d seconds" "$warnseconds")" fi From a9f2c5401f183499a7a9e9b47b893881ee30cb83 Mon Sep 17 00:00:00 2001 From: Marius Linge Date: Wed, 23 Sep 2015 02:34:42 +0200 Subject: [PATCH 49/85] Adds the new command to README --- README.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/README.md b/README.md index 8942613..92b3b46 100644 --- a/README.md +++ b/README.md @@ -97,6 +97,9 @@ Validates all ARK server files #### arkmanager update --update-mods Updates installed and requested mods +#### arkmanager update --backup +Takes a backup of the save files before updating. + #### arkmanager status Get the status of the server. Show if the process is running, if the server is up and the current version number From 47c070a21c2d940afb0c51d8c52ef3343fc7caf3 Mon Sep 17 00:00:00 2001 From: Marius Linge Date: Wed, 23 Sep 2015 02:35:12 +0200 Subject: [PATCH 50/85] Adds the new command to arkmanager help --- tools/arkmanager | 1 + 1 file changed, 1 insertion(+) diff --git a/tools/arkmanager b/tools/arkmanager index 1ad3638..23b3cf1 100755 --- a/tools/arkmanager +++ b/tools/arkmanager @@ -1180,6 +1180,7 @@ while true; do echo " --validate Validates all ARK server files" echo " --saveworld Saves world before update" echo " --update-mods Updates installed and requested mods" + echo " --backup Takes a backup of the save files before updating" exit 1 ;; *) From 94eda243bf9869a8260f8eb4cb5b729097d6b52e Mon Sep 17 00:00:00 2001 From: Ben Peddell Date: Thu, 24 Sep 2015 07:28:29 +1000 Subject: [PATCH 51/85] Fix install.sh It was modifying arkmanager.cfg, when it should have been modifying arkmanager.cfg.NEW --- tools/install.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/install.sh b/tools/install.sh index d4e31d3..88bb1e2 100755 --- a/tools/install.sh +++ b/tools/install.sh @@ -276,7 +276,7 @@ else -e "s|^install_bindir=.*|install_bindir=\"${BINDIR}\"|" \ -e "s|^install_libexecdir=.*|install_libexecdir=\"${LIBEXECDIR}\"|" \ -e "s|^install_datadir=.*|install_datadir=\"${DATADIR}\"|" \ - "${INSTALL_ROOT}/etc/arkmanager/arkmanager.cfg" + "${INSTALL_ROOT}/etc/arkmanager/arkmanager.cfg.NEW" 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." From 72e0543b6ff40d3a2d5a4ab52e730e26ff81fa2b Mon Sep 17 00:00:00 2001 From: Ben Peddell Date: Thu, 24 Sep 2015 07:35:04 +1000 Subject: [PATCH 52/85] Use $steamcmd_user instead of $1 when altering new config --- tools/install.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tools/install.sh b/tools/install.sh index 88bb1e2..ab5843e 100755 --- a/tools/install.sh +++ b/tools/install.sh @@ -271,8 +271,8 @@ else mkdir -p "${INSTALL_ROOT}/etc/arkmanager" cp arkmanager.cfg "${INSTALL_ROOT}/etc/arkmanager/arkmanager.cfg.NEW" chown "$1" "${INSTALL_ROOT}/etc/arkmanager/arkmanager.cfg.NEW" - sed -i -e "s|^steamcmd_user=\"steam\"|steamcmd_user=\"$1\"|" \ - -e "s|\"/home/steam|\"/home/$1|" \ + sed -i -e "s|^steamcmd_user=\"steam\"|steamcmd_user=\"$steamcmd_user\"|" \ + -e "s|\"/home/steam|\"/home/$steamcmd_user|" \ -e "s|^install_bindir=.*|install_bindir=\"${BINDIR}\"|" \ -e "s|^install_libexecdir=.*|install_libexecdir=\"${LIBEXECDIR}\"|" \ -e "s|^install_datadir=.*|install_datadir=\"${DATADIR}\"|" \ From a307643e9029d9f8aed567691860c15245b861bf Mon Sep 17 00:00:00 2001 From: Ben Peddell Date: Thu, 24 Sep 2015 09:18:36 +1000 Subject: [PATCH 53/85] Fix config variable fetching --- tools/arkmanager | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/arkmanager b/tools/arkmanager index b6e47ce..9fdf5c0 100755 --- a/tools/arkmanager +++ b/tools/arkmanager @@ -70,7 +70,7 @@ doUninstallTools() { runAsRoot(){ getConfigVar(){ - val="$(echo -ne "$(sed -n "/^$1=/{s|^[^=]*||;s|^\"\\(.*\\)\"\$|\\1|;s|^'\\(.*\\)\$|\\1|;p}" <"/etc/arkmanager/arkmanager.cfg" | tail -n1)")" + val="$(echo -ne "$(sed -n "/^$1=/{s|^[^=]*=||;s|[[:space:]]*\(#.*\)*\$||;s|^\"\\(.*\\)\"\$|\\1|;s|^'\\(.*\\)'\$|\\1|;p}" <"/etc/arkmanager/arkmanager.cfg" | tail -n1)")" if [ -n "$val" ]; then echo "$val" else From 1505aa85ab64f51322b6b84ec41a675e32faf652 Mon Sep 17 00:00:00 2001 From: Ben Peddell Date: Thu, 24 Sep 2015 09:22:33 +1000 Subject: [PATCH 54/85] Automatically su to steamcmd_user if run as root --- tools/arkmanager | 11 +---------- 1 file changed, 1 insertion(+), 10 deletions(-) diff --git a/tools/arkmanager b/tools/arkmanager index 9fdf5c0..800b991 100755 --- a/tools/arkmanager +++ b/tools/arkmanager @@ -94,16 +94,7 @@ runAsRoot(){ elif [ "$1" == "uninstall-tools" ]; then doUninstallTools else - echo -n "arkmanager v${arkstVersion}: " - if [ $# -eq 0 ]; then - echo "no command specified" - else - echo "unknown command '$1' specified" - fi - echo -e "Usage: arkmanager [OPTION]\n" - echo "Option Description" - echo "upgrade-tools Check for a new ARK Server Tools version and upgrades it if needed" - echo "uninstall-tools Uninstall the ARK Server Tools" + su "$steamcmd_user" -c "$(printf "%q" "$0")$(printf " %q" "$@")" exit 1 fi } From fb61e00aee619d778ac0e5f1b823c6505fc6102a Mon Sep 17 00:00:00 2001 From: Ben Peddell Date: Thu, 24 Sep 2015 23:34:03 +1000 Subject: [PATCH 55/85] Put uninstaller script into libexec --- tools/install.sh | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tools/install.sh b/tools/install.sh index ab5843e..e051e4e 100755 --- a/tools/install.sh +++ b/tools/install.sh @@ -181,12 +181,12 @@ else # Copy the uninstall script to ~/.local/share/arkmanager mkdir -p "${INSTALL_ROOT}${LIBEXECDIR}" - cp uninstall.sh "${INSTALL_ROOT}${DATADIR}/arkmanager-uninstall.sh" - chmod +x "${INSTALL_ROOT}${DATADIR}/arkmanager-uninstall.sh" + cp uninstall.sh "${INSTALL_ROOT}${LIBEXECDIR}/arkmanager-uninstall.sh" + chmod +x "${INSTALL_ROOT}${LIBEXECDIR}/arkmanager-uninstall.sh" sed -i -e "s|^BINDIR=.*|BINDIR=\"${BINDIR}\"|" \ -e "s|^LIBEXECDIR=.*|LIBEXECDIR=\"${LIBEXECDIR}\"|" \ -e "s|^DATADIR=.*|DATADIR=\"${DATADIR}\"|" \ - "${INSTALL_ROOT}${DATADIR}/arkmanager-uninstall.sh" + "${INSTALL_ROOT}${LIBEXECDIR}/arkmanager-uninstall.sh" # Copy arkdaemon to /etc/init.d ,set permissions and add it to boot if [ -f /lib/lsb/init-functions ]; then From 18e91c07ae22b3a8267e0518aa3273d005b5bfe1 Mon Sep 17 00:00:00 2001 From: Ben Peddell Date: Fri, 25 Sep 2015 10:27:26 +1000 Subject: [PATCH 56/85] Fix error in mod file update time comparison --- tools/arkmanager | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tools/arkmanager b/tools/arkmanager index b6e47ce..8b9ae8a 100755 --- a/tools/arkmanager +++ b/tools/arkmanager @@ -835,7 +835,7 @@ isModUpdateNeeded(){ fi find "$modsrcdir" -type f ! -name "*.z.uncompressed_size" -printf "%P\n" | while read f; do - if [ ! -f "$moddestdir/${f%.z}" -o "$modsrcdir/$f" -nt "$moddestdir/${f%.z}" ]; then + if [ \( ! -f "$moddestdir/${f%.z}" \) -o "$modsrcdir/$f" -nt "$moddestdir/${f%.z}" ]; then return 0 fi done @@ -874,7 +874,7 @@ doExtractMod(){ find "$modsrcdir" -type d -printf "$moddestdir/%P\0" | xargs -0 -r mkdir -p find "$modsrcdir" -type f ! \( -name '*.z' -or -name '*.z.uncompressed_size' \) -printf "%P\n" | while read f; do - if [ ! -f "$moddestdir/$f" -o "$modsrcdir/$f" -nt "$moddestdir/$f" ]; then + if [ \( ! -f "$moddestdir/$f" \) -o "$modsrcdir/$f" -nt "$moddestdir/$f" ]; then printf "%10d %s " "`stat -c '%s' "$modsrcdir/$f"`" "$f" cp "$modsrcdir/$f" "$moddestdir/$f" echo -ne "\r\\033[K" @@ -882,7 +882,7 @@ doExtractMod(){ done find "$modsrcdir" -type f -name '*.z' -printf "%P\n" | while read f; do - if [ ! -f "$moddestdir/${f%.z}" -o "$modsrcdir/$f" -nt "$moddestdir/${f%.z}" ]; then + if [ \( ! -f "$moddestdir/${f%.z}" \) -o "$modsrcdir/$f" -nt "$moddestdir/${f%.z}" ]; then printf "%10d %s " "`stat -c '%s' "$modsrcdir/$f"`" "${f%.z}" perl -M'Compress::Raw::Zlib' -e ' my $sig; From 098f19d147391f7ae387f1c96f31b74db9a99428 Mon Sep 17 00:00:00 2001 From: Ben Peddell Date: Fri, 25 Sep 2015 10:50:04 +1000 Subject: [PATCH 57/85] Add option to select mod OS The Linux version of some mods don't work at all with the dedicated server. Allow the administrator to configure which mod branch to grab (Windows or Linux). --- tools/arkmanager | 23 +++++++++++++++++++---- tools/arkmanager.cfg | 5 +++++ 2 files changed, 24 insertions(+), 4 deletions(-) diff --git a/tools/arkmanager b/tools/arkmanager index b6e47ce..a7c2ac4 100755 --- a/tools/arkmanager +++ b/tools/arkmanager @@ -828,10 +828,17 @@ isModUpdateNeeded(){ local modid=$1 local modsrcdir="$steamcmdroot/steamapps/workshop/content/$mod_appid/$modid" local moddestdir="$arkserverroot/ShooterGame/Content/Mods/$modid" + local modbranch="${mod_branch:-Linux}" + + for varname in "${!mod_branch_@}"; do + if [ "mod_branch_$modid" == "$varname" ]; then + modbranch="${!varname}" + fi + done if [ -f "$modsrcdir/mod.info" ]; then - if [ -f "$modsrcdir/LinuxNoEditor/mod.info" ]; then - modsrcdir="$modsrcdir/LinuxNoEditor" + if [ -f "$modsrcdir/${modbranch}NoEditor/mod.info" ]; then + modsrcdir="$modsrcdir/${modbranch}NoEditor" fi find "$modsrcdir" -type f ! -name "*.z.uncompressed_size" -printf "%P\n" | while read f; do @@ -864,11 +871,19 @@ doExtractMod(){ local modid=$1 local modsrcdir="$steamcmdroot/steamapps/workshop/content/$mod_appid/$modid" local moddestdir="$arkserverroot/ShooterGame/Content/Mods/$modid" + local modbranch="${mod_branch:-Linux}" + + for varname in "${!mod_branch_@}"; do + if [ "mod_branch_$modid" == "$varname" ]; then + modbranch="${!varname}" + fi + done if [ -f "$modsrcdir/mod.info" ]; then echo "Copying files to $moddestdir" - if [ -f "$modsrcdir/LinuxNoEditor/mod.info" ]; then - modsrcdir="$modsrcdir/LinuxNoEditor" + + if [ -f "$modsrcdir/${modbranch}NoEditor/mod.info" ]; then + modsrcdir="$modsrcdir/${modbranch}NoEditor" fi find "$modsrcdir" -type d -printf "$moddestdir/%P\0" | xargs -0 -r mkdir -p diff --git a/tools/arkmanager.cfg b/tools/arkmanager.cfg index 094df34..27390b0 100644 --- a/tools/arkmanager.cfg +++ b/tools/arkmanager.cfg @@ -51,6 +51,11 @@ logdir="/var/log/arktools" # Logs path appid=376030 # Linux server App ID mod_appid=346110 # App ID for mods +# Mod OS Selection +mod_branch=Linux +# Add mod-specific OS selection below: +#mod_branch_496735411=Windows + # alternate configs # example for config name "ark1": #configfile_ark1="/path/to/config/file" From 14b82cc7eb1ff312a4d2c41cb1c6109241a87c30 Mon Sep 17 00:00:00 2001 From: Ben Peddell Date: Mon, 28 Sep 2015 12:42:07 +1000 Subject: [PATCH 58/85] Fix autorestart --- tools/arkmanager | 32 +++++++++++++++++++++----------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/tools/arkmanager b/tools/arkmanager index 3f68ebe..acefa2d 100755 --- a/tools/arkmanager +++ b/tools/arkmanager @@ -461,22 +461,28 @@ doRun() { "$arkserverroot/$arkserverexec" "$arkserveropts" "${arkextraopts[@]}" & # Grab the server PID serverpid=$! + echo "`timestamp`: Server PID: $serverpid" # Disable auto-restart so we don't get caught in a restart loop - rm "$arkserverroot/$arkautorestartfile" + rm -f "$arkserverroot/$arkautorestartfile" restartserver=0 + sleep 5 + while true; do # Grab the current server PID - local pid="`getServerPid`" + local pid="`getServerPID`" if [ "$pid" == "$serverpid" ]; then - # Check if the server has fully started - if ! isTheServerUp; then - # Enable auto-restart if the server is up - echo "`timestamp`: server is up" - touch "$arkserverroot/$arkautorestartfile" - restartserver=1 + if [ "$restartserver" -eq 0 ]; then + # Check if the server has fully started + if ! isTheServerUp; then + # Enable auto-restart if the server is up + echo "`timestamp`: server is up" + touch "$arkserverroot/$arkautorestartfile" + restartserver=1 + fi fi else + echo "`timestamp`: Bad PID '$pid'; expected '$serverpid'" if [ "$pid" != "" ]; then # Another instance must be running - disable autorestart restartserver=0 @@ -491,7 +497,11 @@ doRun() { echo "`timestamp`: exited with status $?" # doStop will remove the autorestart file - if [ "$restartserver" -ne 0 -a -f "$arkserverroot/$arkautorestartfile" ]; then + if [ ! -f "$arkserverroot/$arkautorestartfile" ]; then + restartserver=0 + fi + + if [ "$restartserver" -ne 0 ]; then echo "`timestamp`: restarting server" fi done @@ -537,11 +547,12 @@ doStop() { tput sc echo "Stopping server..." echo "`timestamp`: stopping" >> "$logdir/$arkmanagerLog" + rm -f "$arkserverroot/$arkautorestartfile" # kill the server with the PID PID=`getServerPID` kill -INT $PID - for (( i = 0; i < 10; i++ )); do + for (( i = 0; i < 20; i++ )); do sleep 1 if ! isTheServerRunning; then break @@ -551,7 +562,6 @@ doStop() { if isTheServerRunning; then tput rc echo "Killing server..." - rm "$arkserverroot/$arkautorestartfile" kill -KILL $PID fi From e4d42183e33cd7e22cd5f111f03866f8991f9565 Mon Sep 17 00:00:00 2001 From: Ben Peddell Date: Tue, 29 Sep 2015 09:25:46 +1000 Subject: [PATCH 59/85] Default to Windows mod; record mod branch --- tools/arkmanager | 10 +++++++++- tools/arkmanager.cfg | 2 +- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/tools/arkmanager b/tools/arkmanager index acefa2d..218a154 100755 --- a/tools/arkmanager +++ b/tools/arkmanager @@ -837,6 +837,10 @@ isModUpdateNeeded(){ fi done + if [ \( ! -f "$moddestdir/.modbranch" \) ] || [ "$(<"$moddestdir/.modbranch")" != "$modbranch" ]; then + return 0 + fi + if [ -f "$modsrcdir/mod.info" ]; then if [ -f "$modsrcdir/${modbranch}NoEditor/mod.info" ]; then modsrcdir="$modsrcdir/${modbranch}NoEditor" @@ -872,7 +876,7 @@ doExtractMod(){ local modid=$1 local modsrcdir="$steamcmdroot/steamapps/workshop/content/$mod_appid/$modid" local moddestdir="$arkserverroot/ShooterGame/Content/Mods/$modid" - local modbranch="${mod_branch:-Linux}" + local modbranch="${mod_branch:-Windows}" for varname in "${!mod_branch_@}"; do if [ "mod_branch_$modid" == "$varname" ]; then @@ -880,6 +884,10 @@ doExtractMod(){ fi done + if [ \( ! -f "$moddestdir/.modbranch" \) ] || [ "$(<"$moddestdir/.modbranch")" != "$modbranch" ]; then + rm -rf "$moddestdir" + fi + if [ -f "$modsrcdir/mod.info" ]; then echo "Copying files to $moddestdir" diff --git a/tools/arkmanager.cfg b/tools/arkmanager.cfg index 27390b0..7d9b65c 100644 --- a/tools/arkmanager.cfg +++ b/tools/arkmanager.cfg @@ -52,7 +52,7 @@ appid=376030 # Linux serv mod_appid=346110 # App ID for mods # Mod OS Selection -mod_branch=Linux +mod_branch=Windows # Add mod-specific OS selection below: #mod_branch_496735411=Windows From 167781e34f5f179d0e447e017e8a6a90b6cc33ec Mon Sep 17 00:00:00 2001 From: Ben Peddell Date: Tue, 29 Sep 2015 09:34:58 +1000 Subject: [PATCH 60/85] Allow non-anonymous steamcmd login --- tools/arkmanager | 8 ++++---- tools/arkmanager.cfg | 1 + 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/tools/arkmanager b/tools/arkmanager index 218a154..a53c60e 100755 --- a/tools/arkmanager +++ b/tools/arkmanager @@ -354,7 +354,7 @@ function getCurrentVersion(){ # function getAvailableVersion(){ 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 parseSteamACF ".depots.branches.public" "buildid"; break; fi; done` + bnumber=`$steamcmdroot/$steamcmdexec +@NoPromptForPassword 1 +login ${steamlogin:-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 } @@ -605,7 +605,7 @@ doInstall() { cd "$steamcmdroot" # install the server - ./$steamcmdexec +login anonymous +force_install_dir "$arkserverroot" +app_update $appid validate +quit + ./$steamcmdexec +@NoPromptForPassword 1 +login ${steamlogin:-anonymous} +force_install_dir "$arkserverroot" +app_update $appid validate +quit # the current version should be the last version. We set our version getCurrentVersion } @@ -749,7 +749,7 @@ doUpdate() { if [ -n "$appupdate" ]; then cd "$steamcmdroot" - ./$steamcmdexec +login anonymous +force_install_dir "$arkserverroot" +app_update $appid $validate +quit + ./$steamcmdexec +@NoPromptForPassword 1 +login ${steamlogin:-anonymous} +force_install_dir "$arkserverroot" +app_update $appid $validate +quit # the current version should be the last version. We set our version getCurrentVersion echo "`timestamp`: update to $instver complete" >> "$logdir/update.log" @@ -797,7 +797,7 @@ doDownloadMod(){ cd "$steamcmdroot" while true; do - ./$steamcmdexec +login anonymous +workshop_download_item $mod_appid $modid +quit + ./$steamcmdexec +@NoPromptForPassword 1 +login ${steamlogin:-anonymous} +workshop_download_item $mod_appid $modid +quit if [ ! -d "$moddldir" ]; then break; fi local newsize="`du -s "$moddldir" | cut -f1`" if [ $newsize -eq $dlsize ]; then break; fi diff --git a/tools/arkmanager.cfg b/tools/arkmanager.cfg index 7d9b65c..955a4c5 100644 --- a/tools/arkmanager.cfg +++ b/tools/arkmanager.cfg @@ -8,6 +8,7 @@ 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 steamcmd_appinfocache="/home/steam/Steam/appcache/appinfo.vdf" # cache of the appinfo command +#steamlogin="anonymous" # Uncomment this to specify steam login instead of using anonymous login # config environment arkserverroot="/home/steam/ARK" # path of your ARK server files (default ~/ARK) From 17dd16a8305b05dcd4df05c5b5f3f9b01d7d635b Mon Sep 17 00:00:00 2001 From: Ben Peddell Date: Tue, 29 Sep 2015 09:42:45 +1000 Subject: [PATCH 61/85] Add support for -opt=val options using arkopt_opt=val --- tools/arkmanager | 9 +++++++++ tools/arkmanager.cfg | 3 +++ 2 files changed, 12 insertions(+) diff --git a/tools/arkmanager b/tools/arkmanager index a53c60e..7697b25 100755 --- a/tools/arkmanager +++ b/tools/arkmanager @@ -434,6 +434,15 @@ doRun() { fi done + # bring in arkopt_... options + for varname in "${!arkopt_@}"; do + name="${varname#arkopt_}" + val="${!varname}" + + if [ -n "$val" ]; then + arkextraopts=( "${arkextraopts[@]}" "-${name}=${val}" ) + fi + done arkserveropts="${arkserveropts}?listen" # run the server in background diff --git a/tools/arkmanager.cfg b/tools/arkmanager.cfg index 955a4c5..a5c9f51 100644 --- a/tools/arkmanager.cfg +++ b/tools/arkmanager.cfg @@ -44,6 +44,9 @@ ark_MaxPlayers="70" #arkflag_OnlyAdminRejoinAsSpectator=true # Uncomment to only allow admins to rejoin as spectator #arkflag_DisableDeathSpectator=true # Uncomment to disable players from becoming spectators when they die +# ARK server options - i.e. for -optname=val, use arkopt_optname=val +#arkopt_StructureDestructionTag=DestroySwampSnowStructures + # 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 d27eff2861a0ab4813e35a2f20d246131fcc18f2 Mon Sep 17 00:00:00 2001 From: Ben Peddell Date: Tue, 29 Sep 2015 11:05:01 +1000 Subject: [PATCH 62/85] Log the command used to launch the server --- tools/arkmanager | 3 +++ 1 file changed, 3 insertions(+) diff --git a/tools/arkmanager b/tools/arkmanager index 7697b25..e3aa1a7 100755 --- a/tools/arkmanager +++ b/tools/arkmanager @@ -466,6 +466,9 @@ doRun() { # Auto-restart loop while [ $restartserver -ne 0 ]; do + echo -n "`timestamp`: Running" + printf " %q" "$arkserverroot/$arkserverexec" "$arkserveropts" "${arkextraopts[@]}" + echo # Put the server process into the background so we can monitor it "$arkserverroot/$arkserverexec" "$arkserveropts" "${arkextraopts[@]}" & # Grab the server PID From fa7649d92bd309e5681e2c6b058e05170bc8168f Mon Sep 17 00:00:00 2001 From: Ben Peddell Date: Tue, 29 Sep 2015 23:31:57 +1000 Subject: [PATCH 63/85] Allow user to specify `arkflag_log=""` --- tools/arkmanager | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/tools/arkmanager b/tools/arkmanager index e3aa1a7..646a4ce 100755 --- a/tools/arkmanager +++ b/tools/arkmanager @@ -427,11 +427,8 @@ doRun() { # bring in arkflag_... flags for varname in "${!arkflag_@}"; do name="${varname#arkflag_}" - val="${!varname}" - if [ -n "$val" ]; then - arkextraopts=( "${arkextraopts[@]}" "-${name}" ) - fi + arkextraopts=( "${arkextraopts[@]}" "-${name}" ) done # bring in arkopt_... options From e6c83245e4933f4f978d1558c082298282983bf9 Mon Sep 17 00:00:00 2001 From: Ben Peddell Date: Wed, 30 Sep 2015 19:35:45 +1000 Subject: [PATCH 64/85] Fix typo in install script --- tools/install.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/install.sh b/tools/install.sh index e051e4e..f88ae92 100755 --- a/tools/install.sh +++ b/tools/install.sh @@ -192,7 +192,7 @@ else 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 "${INSTALL_ROOT}${LIBEXECDIRPREFIX}" + mkdir -p "${INSTALL_ROOT}${LIBEXECDIR}" cp lsb/arkdaemon "${INSTALL_ROOT}${LIBEXECDIR}/arkmanager.init" chmod +x "${INSTALL_ROOT}${LIBEXECDIR}/arkmanager.init" cp systemd/arkdeamon.service "${INSTALL_ROOT}/etc/systemd/system/arkmanager.service" From 23efbf8d0d3e3fd728ac4b9119b68e4609a59aec Mon Sep 17 00:00:00 2001 From: Ben Peddell Date: Thu, 1 Oct 2015 08:29:11 +1000 Subject: [PATCH 65/85] Abort upgrade is arkstChannel is invalid --- tools/arkmanager | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/tools/arkmanager b/tools/arkmanager index 646a4ce..cf9beed 100755 --- a/tools/arkmanager +++ b/tools/arkmanager @@ -18,6 +18,16 @@ doUpgradeTools() { echo "arkmanager v${arkstVersion}: Checking for updates..." arkstLatestVersion=`curl -s https://raw.githubusercontent.com/FezVrasta/ark-server-tools/${arkstChannel}/.version` arkstLatestCommit=`curl -s https://api.github.com/repos/FezVrasta/ark-server-tools/git/refs/heads/${arkstChannel} | sed -n 's/^ *"sha": "\(.*\)",.*/\1/p'` + + if [ "$arkstLatestVersion" == "Not Found" ]; then + echo "Channel ${arkstChannel} does not exist" + echo + echo "Available channels:" + curl -s https://api.github.com/repos/FezVrasta/ark-server-tools/git/refs/heads | sed -n 's|^ *"ref": "refs/heads/\(.*\)",|\1|p' + echo + return + fi + reinstall_args=() if [ -n "$install_bindir" ]; then reinstall_args=( "${reinstall_args[@]}" "--bindir" "$install_bindir" ) From 1efb536c133171ef1e5eac7787839fb185a889d5 Mon Sep 17 00:00:00 2001 From: Ben Peddell Date: Sat, 3 Oct 2015 09:24:20 +1000 Subject: [PATCH 66/85] Fix hotfix detection; don't downgrade --- tools/arkmanager | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/arkmanager b/tools/arkmanager index cf9beed..895e8f3 100755 --- a/tools/arkmanager +++ b/tools/arkmanager @@ -46,7 +46,7 @@ doUpgradeTools() { else exit 0 fi - elif [[ "$arkstLatestCommit" != "$arkstCommit" ]]; then + elif [[ $arkstLatestVersion == $arkstVersion && "$arkstLatestCommit" != "$arkstCommit" ]]; then read -p "A hotfix is available for v${arkstLatestVersion}. Do you wish to install it?" -n 1 -r echo -en "\n" if [[ $REPLY =~ ^[Yy]$ ]]; then From 7b5d8b60f251ec48089af5258635294784ca309d Mon Sep 17 00:00:00 2001 From: Ben Peddell Date: Thu, 24 Sep 2015 08:47:30 +1000 Subject: [PATCH 67/85] Add run command to arkmanager --- tools/arkmanager | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/tools/arkmanager b/tools/arkmanager index 895e8f3..82d4100 100755 --- a/tools/arkmanager +++ b/tools/arkmanager @@ -1156,6 +1156,9 @@ checkConfig while true; do case "$1" in + run) + doRun + ;; start) if [ "$2" == "--all" ]; then doStartAll @@ -1248,6 +1251,7 @@ while true; do echo "installmod Installs a mod from the Steam workshop" echo "restart Stops the server and then starts it" echo "restart --all Restarts all servers specified in configfile_xxxxx" + echo "run Runs the server without daemonizing" echo "start Starts the server" echo "start --all Starts all servers specified in configfile_xxxxx" echo "stop Stops the server" From c97ed485f5a260742c6ddce2d003fd5e1c242de2 Mon Sep 17 00:00:00 2001 From: Ben Peddell Date: Thu, 24 Sep 2015 08:50:16 +1000 Subject: [PATCH 68/85] useconfig now does nothing when `useconfig main` is used --- tools/arkmanager | 3 +++ 1 file changed, 3 insertions(+) diff --git a/tools/arkmanager b/tools/arkmanager index 82d4100..f4ef635 100755 --- a/tools/arkmanager +++ b/tools/arkmanager @@ -1138,6 +1138,9 @@ printStatus(){ } useConfig() { + if [ "$1" == "main" ]; then + return + fi for varname in "${!configfile_@}"; do if [ "configfile_$1" == "$varname" ]; then source "${!varname}" From e43e1e35cd5e64bc82ab57cb4985596d27a4f5b3 Mon Sep 17 00:00:00 2001 From: Ben Peddell Date: Thu, 24 Sep 2015 09:28:04 +1000 Subject: [PATCH 69/85] Add multiple instance control for systemd --- tools/install.sh | 7 +-- tools/systemd/arkdaemon.init | 88 ------------------------------- tools/systemd/arkdeamon.service | 12 ----- tools/systemd/arkmanager.init | 5 ++ tools/systemd/arkmanager.service | 11 ++++ tools/systemd/arkmanager@.service | 6 +++ 6 files changed, 26 insertions(+), 103 deletions(-) delete mode 100755 tools/systemd/arkdaemon.init delete mode 100644 tools/systemd/arkdeamon.service create mode 100755 tools/systemd/arkmanager.init create mode 100644 tools/systemd/arkmanager.service create mode 100644 tools/systemd/arkmanager@.service diff --git a/tools/install.sh b/tools/install.sh index f88ae92..435c6f8 100755 --- a/tools/install.sh +++ b/tools/install.sh @@ -251,11 +251,12 @@ else fi elif [ -f /etc/systemd/system.conf ]; then # used by systemd mkdir -p "${INSTALL_ROOT}${LIBEXECDIR}" - cp systemd/arkdaemon.init "${INSTALL_ROOT}${LIBEXECDIR}/arkmanager.init" + cp systemd/arkmanager.init "${INSTALL_ROOT}${LIBEXECDIR}/arkmanager.init" chmod +x "${INSTALL_ROOT}${LIBEXECDIR}/arkmanager.init" - cp systemd/arkdeamon.service "${INSTALL_ROOT}/etc/systemd/system/arkmanager.service" + cp systemd/arkmanager.service "${INSTALL_ROOT}/etc/systemd/system/arkmanager.service" sed -i "s|=/usr/libexec/arkmanager/|=${LIBEXECDIR}/|" "${INSTALL_ROOT}/etc/systemd/system/arkmanager.service" - sed -i "s@^DAEMON=\"/usr/bin/@DAEMON=\"${BINDIR}/@" "${INSTALL_ROOT}${LIBEXECDIR}/arkmanager.init" + cp systemd/arkmanager@.service "${INSTALL_ROOT}/etc/systemd/system/arkmanager@.service" + sed -i "s|=/usr/bin/|=${BINDIR}/|" "${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" diff --git a/tools/systemd/arkdaemon.init b/tools/systemd/arkdaemon.init deleted file mode 100755 index 2cde2ab..0000000 --- a/tools/systemd/arkdaemon.init +++ /dev/null @@ -1,88 +0,0 @@ -#!/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: " - ulimit -n 100000 - 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: " - ulimit -n 100000 - 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 diff --git a/tools/systemd/arkdeamon.service b/tools/systemd/arkdeamon.service deleted file mode 100644 index a92f7ed..0000000 --- a/tools/systemd/arkdeamon.service +++ /dev/null @@ -1,12 +0,0 @@ -[Unit] -Description=Daemon to start ark server -After=network.target - -[Service] -ExecStart=/usr/libexec/arkmanager/arkmanager.init start --all -ExecStop=/usr/libexec/arkmanager/arkmanager.init stop --all -Type=forking -PIDFile=/var/run/arkmanager.pid - -[Install] -WantedBy=multi-user.target diff --git a/tools/systemd/arkmanager.init b/tools/systemd/arkmanager.init new file mode 100755 index 0000000..be25029 --- /dev/null +++ b/tools/systemd/arkmanager.init @@ -0,0 +1,5 @@ +#!/bin/bash + +for service in main $(grep -o '^configfile_[^=]*' /etc/arkmanager/arkmanager.cfg); do + systemctl start arkmanager@${service#configfile_} +done diff --git a/tools/systemd/arkmanager.service b/tools/systemd/arkmanager.service new file mode 100644 index 0000000..c2d4053 --- /dev/null +++ b/tools/systemd/arkmanager.service @@ -0,0 +1,11 @@ +[Unit] +Description=Starts and stops all ark server instances +After=network.target + +[Service] +ExecStart=/usr/libexec/arkmanager/arkmanager.init start +ExecStop=/usr/libexec/arkmanager/arkmanager.init stop +Type=oneshot + +[Install] +WantedBy=multi-user.target diff --git a/tools/systemd/arkmanager@.service b/tools/systemd/arkmanager@.service new file mode 100644 index 0000000..49b722c --- /dev/null +++ b/tools/systemd/arkmanager@.service @@ -0,0 +1,6 @@ +[Unit] +Description=Daemon to start an ark server instance + +[Service] +ExecStart=/usr/bin/arkmanager useconfig %i run +Type=simple From 92c0af6f49f9bdf4dd4469adf2ecbc69bb4d58e0 Mon Sep 17 00:00:00 2001 From: Ben Peddell Date: Thu, 24 Sep 2015 09:48:50 +1000 Subject: [PATCH 70/85] Add upstart tasks --- tools/upstart/arkmanager-instance.conf | 7 +++++++ tools/upstart/arkmanager.conf | 8 ++++++++ 2 files changed, 15 insertions(+) create mode 100644 tools/upstart/arkmanager-instance.conf create mode 100644 tools/upstart/arkmanager.conf diff --git a/tools/upstart/arkmanager-instance.conf b/tools/upstart/arkmanager-instance.conf new file mode 100644 index 0000000..0b219a4 --- /dev/null +++ b/tools/upstart/arkmanager-instance.conf @@ -0,0 +1,7 @@ +description "ARK Server Tools service" + +instance $service + +env DAEMON="/usr/bin/arkmanager" + +exec "$DAEMON" useconfig $service run diff --git a/tools/upstart/arkmanager.conf b/tools/upstart/arkmanager.conf new file mode 100644 index 0000000..688cbe8 --- /dev/null +++ b/tools/upstart/arkmanager.conf @@ -0,0 +1,8 @@ +start on runlevel [345] +stop on runlevel [!345] + +script + for service in main $(grep -o '^configfile_[^=]*' /etc/arkmanager/arkmanager.cfg); do + start arkmanager-instance service=${service#configfile_} + done +end script From b3c79ee964bd47adc863b80f7176a8f4b2bbf4f1 Mon Sep 17 00:00:00 2001 From: Ben Peddell Date: Wed, 7 Oct 2015 06:37:59 +1000 Subject: [PATCH 71/85] Upgrade config file with new options on install Adds new options and removes deprecated options from ARK Server Tools configuration file --- tools/install.sh | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/tools/install.sh b/tools/install.sh index f88ae92..52451d2 100755 --- a/tools/install.sh +++ b/tools/install.sh @@ -168,6 +168,26 @@ if [ "$userinstall" == "yes" ]; then # Copy arkmanager.cfg to ~/.arkmanager.cfg if it doesn't already exist if [ -f "${INSTALL_ROOT}${PREFIX}/.arkmanager.cfg" ]; then + newopts=( arkbackupdir arkautorestartfile install_bindir install_libexecdir install_datadir mod_appid ) + newopt_steamcmd_appinfocache="${PREFIX}/Steam/appcache/appinfo.vdf" + newopt_arkbackupdir="${PREFIX}/ARK-Backups" + newopt_arkautorestartfile="ShooterGame/Saved/.autorestart" + newopt_install_bindir="${BINDIR}" + newopt_install_libexecdir="${LIBEXECDIR}" + newopt_install_datadir="${DATADIR}" + newopt_mod_appid=346110 + + if grep '^\(servermail\|arkstVersion\)=' "${INSTALL_ROOT}${PREFIX}/.arkmanager.cfg" >/dev/null 2>&1; then + sed -i '/^\(servermail\|arkstVersion\)=/d' "${INSTALL_ROOT}${PREFIX}/.arkmanager.cfg" + fi + + for optname in "${newopts[@]}"; do + if ! grep "^${optname}=" "${INSTALL_ROOT}${PREFIX}/.arkmanager.cfg" >/dev/null 2>&1; then + noptname="newopt_${optname}" + echo "${optname}='${!noptname}'" >>"${INSTALL_ROOT}${PREFIX}/.arkmanager.cfg" + fi + done + 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 copy of the new configuration file was included in '${INSTALL_ROOT}${PREFIX}/.arkmanager.cfg.NEW'. Make sure to review any changes and update your config accordingly!" exit 2 @@ -279,6 +299,26 @@ else "${INSTALL_ROOT}/etc/arkmanager/arkmanager.cfg.NEW" if [ -f "${INSTALL_ROOT}/etc/arkmanager/arkmanager.cfg" ]; then + newopts=( arkbackupdir arkautorestartfile install_bindir install_libexecdir install_datadir mod_appid ) + newopt_steamcmd_appinfocache="/home/${steamcmd_user}/Steam/appcache/appinfo.vdf" + newopt_arkbackupdir="/home/${steamcmd_user}/ARK-Backups" + newopt_arkautorestartfile="ShooterGame/Saved/.autorestart" + newopt_install_bindir="${BINDIR}" + newopt_install_libexecdir="${LIBEXECDIR}" + newopt_install_datadir="${DATADIR}" + newopt_mod_appid=346110 + + if grep '^\(servermail\|arkstVersion\)=' "${INSTALL_ROOT}/etc/arkmanager/arkmanager.cfg" >/dev/null 2>&1; then + sed -i '/^\(servermail\|arkstVersion\)=/d' "${INSTALL_ROOT}/etc/arkmanager/arkmanager.cfg" + fi + + for optname in "${newopts[@]}"; do + if ! grep "^${optname}=" "${INSTALL_ROOT}/etc/arkmanager/arkmanager.cfg" >/dev/null 2>&1; then + noptname="newopt_${optname}" + echo "${optname}='${!noptname}'" >>"${INSTALL_ROOT}/etc/arkmanager/arkmanager.cfg" + fi + done + 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 copy of the new configuration file was included in /etc/arkmanager. Make sure to review any changes and update your config accordingly!" exit 2 From 9cdd7e393906d084e89f4c2603102d44ca55959a Mon Sep 17 00:00:00 2001 From: Ben Peddell Date: Thu, 8 Oct 2015 08:34:32 +1000 Subject: [PATCH 72/85] Query Steam API for server status --- tools/arkmanager | 34 +++++++++++++++++++++++++++++++--- 1 file changed, 31 insertions(+), 3 deletions(-) diff --git a/tools/arkmanager b/tools/arkmanager index 895e8f3..4523808 100755 --- a/tools/arkmanager +++ b/tools/arkmanager @@ -387,7 +387,7 @@ function isTheServerRunning(){ } # -# Check if the server is up and visible in steam server list +# Check if the server is up # # function isTheServerUp(){ @@ -403,6 +403,26 @@ function isTheServerUp(){ fi } +# +# Check if the server is visible in the steam server list +# +function isTheServerOnline(){ + publicip="$(curl -s https://api.ipify.org/)" + local serverresp + + if [[ "$publicip" =~ [1-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]* ]]; then + serverresp="$(curl -s "http://api.steampowered.com/ISteamApps/GetServersAtAddress/v0001?addr=${publicip}:${ark_QueryPort}")" + fi + + # If the Steam server response contains "addr": "$ip:$port", + # then the server has registered with the Steam master server + if [[ "$serverresp" =~ \"addr\":\ \"([^\"]*):([0-9]*)\" ]]; then + return 0 + else + return 1 + fi +} + # # run function # @@ -1115,9 +1135,9 @@ printStatus(){ fi if isTheServerUp ;then - echo -e "$NORMAL" "Server online: " "$RED" "No" "$NORMAL" + echo -e "$NORMAL" "Server listening: " "$RED" "No" "$NORMAL" else - echo -e "$NORMAL" "Server online: " "$GREEN" "Yes" "$NORMAL" + echo -e "$NORMAL" "Server listening: " "$GREEN" "Yes" "$NORMAL" perl -MSocket -e ' my $port = int($ARGV[0]); socket(my $socket, PF_INET, SOCK_DGRAM, 0); @@ -1132,7 +1152,15 @@ printStatus(){ print "Server Name: $servername\n"; print "Players: $players / $maxplayers\n"; ' "${ark_QueryPort}" + + if isTheServerOnline; then + echo -e "$NORMAL" "Server online: " "$GREEN" "Yes" "$NORMAL" + echo -e "$NORMAL" "ARKServers link: " "$GREEN" "http://arkservers.net/server/${publicip}:${ark_QueryPort}" "$NORMAL" + else + echo -e "$NORMAL" "Server online: " "$RED" "No" "$NORMAL" + fi fi + getCurrentVersion echo -e "$NORMAL" "Server version: " "$GREEN" $instver "$NORMAL" } From e2f8a3e9c5accd13f8cbf43c0d8d4512169e6d77 Mon Sep 17 00:00:00 2001 From: Ben Peddell Date: Fri, 2 Oct 2015 17:57:23 +1000 Subject: [PATCH 73/85] Check Query port when determining if server is up --- tools/arkmanager | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/tools/arkmanager b/tools/arkmanager index 5594214..f455c41 100755 --- a/tools/arkmanager +++ b/tools/arkmanager @@ -393,6 +393,30 @@ function isTheServerRunning(){ function isTheServerUp(){ $lsof -i :"$ark_Port" > /dev/null result=$? + if [ $result -ne 0 ]; then + perl -MSocket -MFcntl -e ' + my $port = int($ARGV[0]); + socket(my $socket, PF_INET, SOCK_DGRAM, 0); + setsockopt($socket, SOL_SOCKET, SO_RCVTIMEO, pack("i4", 1, 0, 0, 0)); + my $sockaddr = pack_sockaddr_in($port, inet_aton("127.0.0.1")); + send($socket, "\xff\xff\xff\xffTSource Engine Query\x00", 0, $sockaddr); + my $flags = fcntl($socket, F_GETFL, 0) or exit(1); + fcntl($socket, F_SETFL, $flags | O_NONBLOCK) or exit(1); + my $data = ""; + my $rin = ""; + vec($rin, fileno($socket), 1) = 1; + if (select($rin, undef, undef, 0.25) >= 0) { + recv($socket, $data, 1400, 0) or exit(1); + my ($servername, $mapname, $game, $fullname, $rest) = split(/\x00/, substr($data, 6), 5); + my $maxplayers = ord(substr($rest, 3, 1)); + if ($maxplayers == 0) { exit(1); } + exit(0); + } else { + exit(1); + } + ' "${ark_QueryPort}" + result=$? + fi # 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 From 01edcab4a142b32ee635f6ee3b64c20f6a153bbb Mon Sep 17 00:00:00 2001 From: Ben Peddell Date: Sun, 4 Oct 2015 14:18:49 +1000 Subject: [PATCH 74/85] Remove mod id from from workshop acf on installmod --- tools/arkmanager | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/tools/arkmanager b/tools/arkmanager index f455c41..5319c6b 100755 --- a/tools/arkmanager +++ b/tools/arkmanager @@ -1037,6 +1037,10 @@ doExtractMod(){ doInstallMod(){ local modid=$1 + 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 doDownloadMod $modid; then doExtractMod $modid echo "Mod $modid installed" From f8699b436a59fef250abbe2b6f59d9de6819c2dd Mon Sep 17 00:00:00 2001 From: Ben Peddell Date: Mon, 5 Oct 2015 09:35:42 +1000 Subject: [PATCH 75/85] Update readme Add mention of `--me` install option. Also add mention that `update` accepts multiple options. --- README.md | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index 92b3b46..d707ea4 100644 --- a/README.md +++ b/README.md @@ -37,6 +37,12 @@ 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. +To instead perform a user-install of ARK Server Tools as an unprivileged user, run this command: + +```sh +curl -sL http://git.io/vtf5N | bash -s -- --me +``` + ## Configuration 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. @@ -80,24 +86,25 @@ Stops ARK server Restarts ARK server #### arkmanager update -Manually updates ARK server if a new version is available +Manually updates ARK server if a new version is available. +This accepts zero or more of the below options. -#### arkmanager update --force +##### arkmanager update --force Apply update without check the current version -#### arkmanager update --safe +##### arkmanager update --safe Waits for server to perform world save and then updates. -#### arkmanager update --warn +##### arkmanager update --warn Warns the players for a configurable amount of time before updating. Should be suitable for adding to a cron job. -#### arkmanager update --validate +##### arkmanager update --validate Validates all ARK server files -#### arkmanager update --update-mods +##### arkmanager update --update-mods Updates installed and requested mods -#### arkmanager update --backup +##### arkmanager update --backup Takes a backup of the save files before updating. #### arkmanager status From 9052c46225f5e1d7b64651f8d573fd9cc8017f86 Mon Sep 17 00:00:00 2001 From: Ben Peddell Date: Mon, 5 Oct 2015 09:50:18 +1000 Subject: [PATCH 76/85] Add mention of options in readme Add mention of: * ark_option="" -> ...?option?... * arkflag_option="" -> -option * arkopt_option=val -> -option=val --- README.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/README.md b/README.md index d707ea4..3b22950 100644 --- a/README.md +++ b/README.md @@ -60,6 +60,12 @@ ark_DifficultyOffset=1 Your session name may not contain special characters (eg. `!![EU]!! Aw&some ARK`) as it 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 instead. +To specify an option without an argument (e.g. `bRawSockets`), specify an empty argument (e.g. `ark_bRawSockets=""`). + +To specify a dash-option without an argument (e.g. `-log`), add the option="" prefixed with `arkflag_` (e.g. `arkflag_log=""`). + +To specify a dash-option with an argument (e.g. `-StructureDestructionTag=DestroySwampSnowStructures`), add the option=value prefixed with `arkopt_` (e.g. `arkopt_StructureDestructionTag=DestroySwampSnowStructures`). + 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 0e6dfc29222cf0b104d8a6927294ef4199dd2b41 Mon Sep 17 00:00:00 2001 From: Ben Peddell Date: Tue, 6 Oct 2015 08:27:03 +1000 Subject: [PATCH 77/85] Don't report update available if steam unreachable --- tools/arkmanager | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/tools/arkmanager b/tools/arkmanager index 5319c6b..5321bea 100755 --- a/tools/arkmanager +++ b/tools/arkmanager @@ -311,12 +311,11 @@ function checkForUpdate(){ function isUpdateNeeded(){ getCurrentVersion getAvailableVersion - if [ "$bnumber" -eq "$instver" ]; then + if [ "$bnumber" = "Unknown" -o "$bnumber" -eq "$instver" ]; then return 1 # no update needed else return 0 # update needed fi - } # @@ -365,6 +364,9 @@ function getCurrentVersion(){ function getAvailableVersion(){ rm -f "$steamcmd_appinfocache" bnumber=`$steamcmdroot/$steamcmdexec +@NoPromptForPassword 1 +login ${steamlogin:-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` + if [ -z "$bnumber" ]; then + bnumber="Unknown" + fi return $bnumber } From aeafb3f5b9ca96720d051f0f3761b3d2445b75e6 Mon Sep 17 00:00:00 2001 From: Ben Peddell Date: Sun, 11 Oct 2015 17:18:13 +1000 Subject: [PATCH 78/85] Fix error with checkupdate when steam unreachable Fixes: 0e6dfc2 (Don't report update available if steam unreachable) --- tools/arkmanager | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/tools/arkmanager b/tools/arkmanager index 5321bea..94683f8 100755 --- a/tools/arkmanager +++ b/tools/arkmanager @@ -311,7 +311,7 @@ function checkForUpdate(){ function isUpdateNeeded(){ getCurrentVersion getAvailableVersion - if [ "$bnumber" = "Unknown" -o "$bnumber" -eq "$instver" ]; then + if [[ "$bnumber" == "Unknown" || "$bnumber" -eq "$instver" ]]; then return 1 # no update needed else return 0 # update needed @@ -355,7 +355,6 @@ function getCurrentVersion(){ else instver="" fi - return $instver } # @@ -367,7 +366,6 @@ function getAvailableVersion(){ if [ -z "$bnumber" ]; then bnumber="Unknown" fi - return $bnumber } # From 1165dc15093e7ba79b9b5c254ce8d9257c3b22f3 Mon Sep 17 00:00:00 2001 From: Ben Peddell Date: Mon, 12 Oct 2015 06:15:54 +1000 Subject: [PATCH 79/85] Update installer for new systemd scripts --- tools/install.sh | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/tools/install.sh b/tools/install.sh index 9d4c1c3..737a32b 100755 --- a/tools/install.sh +++ b/tools/install.sh @@ -213,11 +213,12 @@ else # 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 "${INSTALL_ROOT}${LIBEXECDIR}" - cp lsb/arkdaemon "${INSTALL_ROOT}${LIBEXECDIR}/arkmanager.init" + cp systemd/arkmanager.init "${INSTALL_ROOT}${LIBEXECDIR}/arkmanager.init" chmod +x "${INSTALL_ROOT}${LIBEXECDIR}/arkmanager.init" - cp systemd/arkdeamon.service "${INSTALL_ROOT}/etc/systemd/system/arkmanager.service" + cp systemd/arkmanager.service "${INSTALL_ROOT}/etc/systemd/system/arkmanager.service" sed -i "s|=/usr/libexec/arkmanager/|=${LIBEXECDIR}/|" "${INSTALL_ROOT}/etc/systemd/system/arkmanager.service" - sed -i "s@^DAEMON=\"/usr/bin/@DAEMON=\"${BINDIR}/@" "${INSTALL_ROOT}${LIBEXECDIR}/arkmanager.init" + cp systemd/arkmanager@.service "${INSTALL_ROOT}/etc/systemd/system/arkmanager@.service" + sed -i "s|=/usr/bin/|=${BINDIR}/|" "${INSTALL_ROOT}/etc/systemd/system/arkmanager.service" if [ -z "${INSTALL_ROOT}" ]; then systemctl daemon-reload systemctl enable arkmanager.service @@ -239,11 +240,12 @@ else # 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 "${INSTALL_ROOT}${LIBEXECDIR}" - cp redhat/arkdaemon "${INSTALL_ROOT}${LIBEXECDIR}/arkmanager.init" + cp systemd/arkmanager.init "${INSTALL_ROOT}${LIBEXECDIR}/arkmanager.init" chmod +x "${INSTALL_ROOT}${LIBEXECDIR}/arkmanager.init" - cp systemd/arkdeamon.service "${INSTALL_ROOT}/etc/systemd/system/arkmanager.service" + cp systemd/arkmanager.service "${INSTALL_ROOT}/etc/systemd/system/arkmanager.service" sed -i "s|=/usr/libexec/arkmanager/|=${LIBEXECDIR}/|" "${INSTALL_ROOT}/etc/systemd/system/arkmanager.service" - sed -i "s@^DAEMON=\"/usr/bin/@DAEMON=\"${BINDIR}/@" "${INSTALL_ROOT}${LIBEXECDIR}/arkmanager.init" + cp systemd/arkmanager@.service "${INSTALL_ROOT}/etc/systemd/system/arkmanager@.service" + sed -i "s|=/usr/bin/|=${BINDIR}/|" "${INSTALL_ROOT}/etc/systemd/system/arkmanager.service" if [ -z "${INSTALL_ROOT}" ]; then systemctl daemon-reload systemctl enable arkmanager.service @@ -278,6 +280,7 @@ else cp systemd/arkmanager@.service "${INSTALL_ROOT}/etc/systemd/system/arkmanager@.service" sed -i "s|=/usr/bin/|=${BINDIR}/|" "${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" From b2e041413ac60795dd8318b8d8c45c4c21251cd7 Mon Sep 17 00:00:00 2001 From: Ben Peddell Date: Mon, 12 Oct 2015 06:21:38 +1000 Subject: [PATCH 80/85] Fix "arkmanager installed" to use steamcmd_user --- netinstall.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/netinstall.sh b/netinstall.sh index 37eb54e..867428f 100644 --- a/netinstall.sh +++ b/netinstall.sh @@ -44,7 +44,7 @@ rm -rf /tmp/ark-server-tools-${channel} # Print messages case "$status" in "0") - echo "ARK Server Tools were correctly installed in your system inside the home directory of $1!" + echo "ARK Server Tools were correctly installed in your system inside the home directory of $steamcmd_user!" ;; "1") @@ -52,6 +52,6 @@ case "$status" in ;; "2") echo "WARNING: A previous version of ARK Server Tools was detected in your system, your old configuration was not overwritten. You may need to manually update it." - echo "ARK Server Tools were correctly installed in your system inside the home directory of $1!" + echo "ARK Server Tools were correctly installed in your system inside the home directory of $steamcmd_user!" ;; esac From 29b952eda16139c1e075c6fb812736784abc0e5e Mon Sep 17 00:00:00 2001 From: Ben Peddell Date: Mon, 12 Oct 2015 06:27:20 +1000 Subject: [PATCH 81/85] Exit arkmanager after upgrade --- tools/arkmanager | 2 -- 1 file changed, 2 deletions(-) diff --git a/tools/arkmanager b/tools/arkmanager index 94683f8..115d329 100755 --- a/tools/arkmanager +++ b/tools/arkmanager @@ -43,7 +43,6 @@ doUpgradeTools() { echo -en "\n" if [[ $REPLY =~ ^[Yy]$ ]]; then curl -s https://raw.githubusercontent.com/FezVrasta/ark-server-tools/${arkstChannel}/netinstall.sh | $sudo bash -s -- ${steamcmd_user} ${arkstChannel} "${reinstall_args[@]}" - else exit 0 fi elif [[ $arkstLatestVersion == $arkstVersion && "$arkstLatestCommit" != "$arkstCommit" ]]; then @@ -51,7 +50,6 @@ doUpgradeTools() { echo -en "\n" if [[ $REPLY =~ ^[Yy]$ ]]; then curl -s https://raw.githubusercontent.com/FezVrasta/ark-server-tools/${arkstChannel}/netinstall.sh | $sudo bash -s -- ${steamcmd_user} ${arkstChannel} "${reinstall_args[@]}" - else exit 0 fi else From 1b814b99d60243d175ceee0e323cd0120696de52 Mon Sep 17 00:00:00 2001 From: Ben Peddell Date: Tue, 13 Oct 2015 10:43:47 +1000 Subject: [PATCH 82/85] Add support for MultiHome setting --- tools/arkmanager | 25 +++++++++++++++---------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/tools/arkmanager b/tools/arkmanager index 5321bea..90e3386 100755 --- a/tools/arkmanager +++ b/tools/arkmanager @@ -241,17 +241,18 @@ rconcmd() { } my $port = $ARGV[0]; - my $password = $ARGV[1]; - my $command = $ARGV[2]; + my $ipaddr = $ARGV[1]; + my $password = $ARGV[2]; + my $command = $ARGV[3]; socket(my $socket, PF_INET, SOCK_STREAM, 0); setsockopt($socket, SOL_SOCKET, SO_RCVTIMEO, pack("i4", 30, 0, 0, 0)); - my $sockaddr = pack_sockaddr_in($port, inet_aton("127.0.0.1")); + my $sockaddr = pack_sockaddr_in($port, inet_aton($ipaddr)); connect($socket, $sockaddr) or die "Error connecting to server"; auth($socket, $password); sendpkt($socket, 2, 2, $command); my ($resid, $restype, $rcvbody) = recvpkt($socket); print $rcvbody, "\n"; - ' "${ark_RCONPort}" "`getAdminPassword`" "$1" + ' "${ark_RCONPort}" "${ark_MultiHome:-127.0.0.1}" "`getAdminPassword`" "$1" } # @@ -393,14 +394,14 @@ function isTheServerRunning(){ # # function isTheServerUp(){ - $lsof -i :"$ark_Port" > /dev/null + $lsof -i "udp@${ark_MultiHome}:${ark_Port}" > /dev/null result=$? if [ $result -ne 0 ]; then perl -MSocket -MFcntl -e ' my $port = int($ARGV[0]); socket(my $socket, PF_INET, SOCK_DGRAM, 0); setsockopt($socket, SOL_SOCKET, SO_RCVTIMEO, pack("i4", 1, 0, 0, 0)); - my $sockaddr = pack_sockaddr_in($port, inet_aton("127.0.0.1")); + my $sockaddr = pack_sockaddr_in($port, inet_aton($ARGV[1])); send($socket, "\xff\xff\xff\xffTSource Engine Query\x00", 0, $sockaddr); my $flags = fcntl($socket, F_GETFL, 0) or exit(1); fcntl($socket, F_SETFL, $flags | O_NONBLOCK) or exit(1); @@ -416,7 +417,7 @@ function isTheServerUp(){ } else { exit(1); } - ' "${ark_QueryPort}" + ' "${ark_QueryPort}" "${ark_MultiHome:-127.0.0.1}" result=$? fi # In this case, the result is: @@ -433,7 +434,11 @@ function isTheServerUp(){ # Check if the server is visible in the steam server list # function isTheServerOnline(){ - publicip="$(curl -s https://api.ipify.org/)" + if [ -n "$ark_MultiHome" ]; then + publicip="$(curl --interface "${ark_MultiHome}" -s https://api.ipify.org/)" + else + publicip="$(curl -s https://api.ipify.org/)" + fi local serverresp if [[ "$publicip" =~ [1-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]* ]]; then @@ -1172,7 +1177,7 @@ printStatus(){ my $port = int($ARGV[0]); socket(my $socket, PF_INET, SOCK_DGRAM, 0); setsockopt($socket, SOL_SOCKET, SO_RCVTIMEO, pack("i4", 1, 0, 0, 0)); - my $sockaddr = pack_sockaddr_in($port, inet_aton("127.0.0.1")); + 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 "Unable to query server\n" and exit(1)); @@ -1181,7 +1186,7 @@ printStatus(){ my $maxplayers = ord(substr($rest, 3, 1)); print "Server Name: $servername\n"; print "Players: $players / $maxplayers\n"; - ' "${ark_QueryPort}" + ' "${ark_QueryPort}" "${ark_MultiHome:-127.0.0.1}" if isTheServerOnline; then echo -e "$NORMAL" "Server online: " "$GREEN" "Yes" "$NORMAL" From 9dc9b34eacf448d746461c3a5f47fa50b87934a8 Mon Sep 17 00:00:00 2001 From: Ben Peddell Date: Tue, 13 Oct 2015 22:50:31 +1000 Subject: [PATCH 83/85] Fix error in MultiHome support --- tools/arkmanager | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/arkmanager b/tools/arkmanager index d9b0845..3c0d963 100755 --- a/tools/arkmanager +++ b/tools/arkmanager @@ -390,7 +390,7 @@ function isTheServerRunning(){ # # function isTheServerUp(){ - $lsof -i "udp@${ark_MultiHome}:${ark_Port}" > /dev/null + $lsof -i "${ark_MultiHome:+udp@}${ark_MultiHome}:${ark_Port}" > /dev/null result=$? if [ $result -ne 0 ]; then perl -MSocket -MFcntl -e ' From a08d087b8c52e0b6039de35a4368f06b8cc05094 Mon Sep 17 00:00:00 2001 From: Ben Peddell Date: Mon, 19 Oct 2015 00:38:42 +1000 Subject: [PATCH 84/85] Change to the ark server root directory This was implemented in 4d30f26, but was subsequently eliminated in 1.2 --- tools/arkmanager | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tools/arkmanager b/tools/arkmanager index d9b0845..0b1b66c 100755 --- a/tools/arkmanager +++ b/tools/arkmanager @@ -454,6 +454,8 @@ function isTheServerOnline(){ # run function # doRun() { + cd "$arkserverroot" + arkserveropts="$serverMap" if [ -n "$serverMapModId" ]; then From 365986ddb0f48afc4a4bfc1ab02b08b8eab116aa Mon Sep 17 00:00:00 2001 From: Ben Peddell Date: Sat, 24 Oct 2015 14:55:17 +1000 Subject: [PATCH 85/85] Move TERM fixup into arkmanager --- tools/arkmanager | 3 +++ tools/systemd/arkdaemon.init | 3 --- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/tools/arkmanager b/tools/arkmanager index f8b6b3f..acedf7c 100755 --- a/tools/arkmanager +++ b/tools/arkmanager @@ -39,6 +39,9 @@ YELLOW="\\e[0;33m" NORMAL="\\033[0;39m" maxOpenFiles=100000 +# Set TERM to "dumb" if TERM is not set +export TERM=${TERM:-dumb} + arkmanagerLog="arkmanager.log" # here are logged the actions performed by arkmanager arkserverLog="arkserver.log" # here is logged the output of ShooterGameServer diff --git a/tools/systemd/arkdaemon.init b/tools/systemd/arkdaemon.init index df83248..2cde2ab 100755 --- a/tools/systemd/arkdaemon.init +++ b/tools/systemd/arkdaemon.init @@ -20,9 +20,6 @@ # ### END INIT INFO -# Set TERM to "dumb" if TERM is not set -export TERM=${TERM:-dumb} - # Global variables source /etc/arkmanager/arkmanager.cfg