From 30aea93bd6572df640d04951617bbe477571dea7 Mon Sep 17 00:00:00 2001 From: Ben Peddell Date: Thu, 26 Nov 2015 16:20:06 +1000 Subject: [PATCH 1/5] Add defaults for Port, QueryPort, RCONPort and serverMap --- tools/arkmanager | 62 ++++++++++++++++++++++++++++++++++++-------- tools/arkmanager.cfg | 2 +- 2 files changed, 52 insertions(+), 12 deletions(-) diff --git a/tools/arkmanager b/tools/arkmanager index dd0d082..9677cdf 100755 --- a/tools/arkmanager +++ b/tools/arkmanager @@ -78,7 +78,7 @@ doUninstallTools() { runAsRoot(){ getConfigVar(){ - val="$(echo -ne "$(sed -n "/^$1=/{s|^[^=]*=||;s|[[:space:]]*\(#.*\)*\$||;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 @@ -202,15 +202,51 @@ checkConfig() { fi } +# +# Get setting from config or from ini file +# $1 is the setting name +# $2 is the default +# +getArkServerSetting() { + local varname="ark_$1" + if [ -n "${!varname}" ]; then + echo "${!varname}" + else + local val="$('/^\[ServerSettings\]/,/^\[.*\]/{s/^'"$1"'[[:space:]]*=[[:space:]]*//p;}' "${arkserverroot}/ShooterGame/Saved/Config/LinuxServer/GameUserSettings.ini")" + if [ -n "$val" ]; then + echo "$val" + else + echo "$2" + fi + fi +} + # # Get server admin password # getAdminPassword() { - if [ -n "${ark_ServerAdminPassword}" ]; then - echo "${ark_ServerAdminPassword}" - else - sed -ne '/^\[ServerSettings\]/,/^\[.*\]/{s/^ServerAdminPassword[[:space:]]*=[[:space:]]*//p;}' "${arkserverroot}/ShooterGame/Saved/Config/LinuxServer/GameUserSettings.ini" - fi + getArkServerSetting "ServerAdminPassword" "" +} + +# +# Get server RCON Port +# +getRconPort() { + getArkServerSetting "RCONPort" "32330" +} + +# +# Get server Game Port +# +getGamePort() { + echo "${ark_Port:-7778}" +} + +# +# Get server Query Port +# +getQueryPort(){ + echo "${ark_QueryPort:-27015}" } # @@ -393,7 +429,7 @@ function isTheServerRunning(){ # # function isTheServerUp(){ - $lsof -i "${ark_MultiHome:+udp@}${ark_MultiHome}:${ark_Port}" > /dev/null + $lsof -i "${ark_MultiHome:+udp@}${ark_MultiHome}:$(getGamePort)" > /dev/null result=$? if [ $result -ne 0 ]; then perl -MSocket -MFcntl -e ' @@ -416,7 +452,7 @@ function isTheServerUp(){ } else { exit(1); } - ' "${ark_QueryPort}" "${ark_MultiHome:-127.0.0.1}" + ' "$(getQueryPort)" "${ark_MultiHome:-127.0.0.1}" result=$? fi # In this case, the result is: @@ -441,7 +477,7 @@ function isTheServerOnline(){ 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}")" + serverresp="$(curl -s "http://api.steampowered.com/ISteamApps/GetServersAtAddress/v0001?addr=${publicip}:$(getQueryPort)")" fi # If the Steam server response contains "addr": "$ip:$port", @@ -465,6 +501,10 @@ doRun() { arkserveropts="-MapModID=$serverMapModId" fi + if [ -z "$arkserveropts" ]; then + arkserveropts="TheIsland" + fi + arkextraopts=( ) # bring in ark_... options @@ -1207,11 +1247,11 @@ printStatus(){ my $maxplayers = ord(substr($rest, 3, 1)); print "Server Name: $servername\n"; print "Players: $players / $maxplayers\n"; - ' "${ark_QueryPort}" "${ark_MultiHome:-127.0.0.1}" + ' "$(getQueryPort)" "${ark_MultiHome:-127.0.0.1}" 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" + echo -e "$NORMAL" "ARKServers link: " "$GREEN" "http://arkservers.net/server/${publicip}:$(getQueryPort)" "$NORMAL" else echo -e "$NORMAL" "Server online: " "$RED" "No" "$NORMAL" fi diff --git a/tools/arkmanager.cfg b/tools/arkmanager.cfg index a5c9f51..6349781 100644 --- a/tools/arkmanager.cfg +++ b/tools/arkmanager.cfg @@ -33,7 +33,7 @@ ark_RCONEnabled="True" # Enable RCO ark_RCONPort="32330" # RCON Port ark_SessionName="ARK Server Tools" # if your session name needs special characters please use the .ini instead ark_Port="7778" # ARK server port (default 7778) -ark_QueryPort="27016" # ARK query port (default 27016) +ark_QueryPort="27015" # ARK query port (default 27015) ark_ServerPassword="" # ARK server password, empty: no password required to login ark_ServerAdminPassword="keyboardcat" # ARK server admin password, KEEP IT SAFE! ark_MaxPlayers="70" From ecfb7027c55cdf22d14b9994c294188c4ea61276 Mon Sep 17 00:00:00 2001 From: Ben Peddell Date: Wed, 2 Dec 2015 20:04:01 +1000 Subject: [PATCH 2/5] Add --version option --- tools/arkmanager | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/tools/arkmanager b/tools/arkmanager index 9677cdf..a84ee8b 100755 --- a/tools/arkmanager +++ b/tools/arkmanager @@ -1366,6 +1366,14 @@ while true; do useConfig "$2" shift ;; + --version) + echo "Version: ${arkstVersion}" + echo "Channel: ${arkstChannel}" + if [ -n "${arkstCommit}" ]; then + echo "Commit: ${arkstCommit:0:7}" + fi + exit 1 + ;; -h|--help) echo -e "Usage: arkmanager [OPTION]\n" echo "Option Description" @@ -1388,6 +1396,8 @@ while true; do 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 "--help Show this help" + echo "--version Show the version info of ARK Server Tools" echo echo "Update command takes the below options:" echo " --force Apply update without checking the current version" From d09ac2b8d739cc9f8333f75b8683dc2d8c182d7b Mon Sep 17 00:00:00 2001 From: Ben Peddell Date: Wed, 2 Dec 2015 20:12:01 +1000 Subject: [PATCH 3/5] Return the status of the last command --- tools/arkmanager | 3 +++ 1 file changed, 3 insertions(+) diff --git a/tools/arkmanager b/tools/arkmanager index 9677cdf..18d994b 100755 --- a/tools/arkmanager +++ b/tools/arkmanager @@ -1410,8 +1410,11 @@ while true; do exit 1 ;; esac + status=$? shift if [ $# -eq 0 ]; then break fi done + +exit $status From 349aca899b5e2e98d8a721ab1d80b8f7f93b1118 Mon Sep 17 00:00:00 2001 From: Ben Peddell Date: Wed, 2 Dec 2015 20:12:39 +1000 Subject: [PATCH 4/5] Return 1 from checkupdate when an update is required --- tools/arkmanager | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tools/arkmanager b/tools/arkmanager index 18d994b..59440b3 100755 --- a/tools/arkmanager +++ b/tools/arkmanager @@ -334,11 +334,13 @@ function checkForUpdate(){ echo -e "Available version:" "$GREEN" $bnumber "$NORMAL" echo -e "Your server needs to be restarted in order to receive the latest update." echo -e "Run \"arkmanager update\" to do so" + return 1 else tput rc; tput ed; echo -e "Current version:" "$GREEN" $instver "$NORMAL" echo -e "Available version:" "$GREEN" $bnumber "$NORMAL" echo "Your server is up to date!" + return 0 fi } From 2d30e7bbc21144c75a999e50e2ff171407166603 Mon Sep 17 00:00:00 2001 From: Ben Peddell Date: Tue, 8 Dec 2015 02:56:33 +1000 Subject: [PATCH 5/5] Fix retrieving settings from ini file The `sed -n` was missed, thus causing arkmanager to be unable to get the password or RCON port from GameUserSettings.ini Fixes: 30aea93bd6572df640d04951617bbe477571dea7 --- tools/arkmanager | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/arkmanager b/tools/arkmanager index 41d29e4..bab97b8 100755 --- a/tools/arkmanager +++ b/tools/arkmanager @@ -212,7 +212,7 @@ getArkServerSetting() { if [ -n "${!varname}" ]; then echo "${!varname}" else - local val="$('/^\[ServerSettings\]/,/^\[.*\]/{s/^'"$1"'[[:space:]]*=[[:space:]]*//p;}' "${arkserverroot}/ShooterGame/Saved/Config/LinuxServer/GameUserSettings.ini")" + local val="$(tr -d '\0\376\377' <"${arkserverroot}/ShooterGame/Saved/Config/LinuxServer/GameUserSettings.ini" | sed -n '/^\[ServerSettings\]/,/^\[.*\]/{s/^'"$1"'[[:space:]]*=[[:space:]]*//p;}' )" if [ -n "$val" ]; then echo "$val" else