From f0ceb94427f454fa8cdc0bb900c11e17c3f807c3 Mon Sep 17 00:00:00 2001 From: Ben Peddell Date: Sun, 5 Aug 2018 09:14:28 +1000 Subject: [PATCH 1/4] Accept a serverbasedir option in lieu of $HOME --- tools/arkmanager | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/tools/arkmanager b/tools/arkmanager index 4b2f8beb..0ffccaf6 100755 --- a/tools/arkmanager +++ b/tools/arkmanager @@ -214,7 +214,15 @@ if [ -f "${HOME}/${arkstUserCfgFile}" ]; then source "${HOME}/${arkstUserCfgFile}" fi -cd "$HOME" +if [ -n "${serverbasedir}" && -d "${serverbasedir}" ]; then + cd "${serverbasedir}" +elif [ -d "${HOME}" ]; then + cd "${HOME}" +elif [ -d "${steamcmdroot}" ]; then + cd "${steamcmdroot}" +elif [[ ! -d "${PWD}" || ! -r "${PWD}" || ! -x "${PWD}" ]]; then + cd / +fi lsof=lsof if [ -x /usr/sbin/lsof ]; then From c7e6df0831d0cc45f4c37faf022f17efaf492ecc Mon Sep 17 00:00:00 2001 From: Ben Peddell Date: Sun, 5 Aug 2018 09:16:38 +1000 Subject: [PATCH 2/4] Disable allexport --- tools/arkmanager | 3 +++ 1 file changed, 3 insertions(+) diff --git a/tools/arkmanager b/tools/arkmanager index 0ffccaf6..271b057e 100755 --- a/tools/arkmanager +++ b/tools/arkmanager @@ -6,6 +6,9 @@ # Maintainer: FezVrasta # Contributors: Sispheor, Atriusftw, klightspeed, lexat, puseidr +#disable exportall so options are no exported under Debian et al. +set +o allexport + # Script version arkstVersion='1.6' arkstTag='' From 6db87c21dee0017092922da16182bd149c99a19e Mon Sep 17 00:00:00 2001 From: Ben Peddell Date: Sun, 5 Aug 2018 09:56:35 +1000 Subject: [PATCH 3/4] Move all local variables to under main --- tools/arkmanager | 122 +++++++++++++++++++++++++---------------------- 1 file changed, 65 insertions(+), 57 deletions(-) diff --git a/tools/arkmanager b/tools/arkmanager index 271b057e..c17f41b8 100755 --- a/tools/arkmanager +++ b/tools/arkmanager @@ -18,6 +18,10 @@ arkstRootUseEnv='' arkstGlobalCfgFile='/etc/arkmanager/arkmanager.cfg' arkstUserCfgFile='.arkmanager.cfg' +#-------------------- +# Installation +#-------------------- + doUpgradeTools() { local sudo=sudo if [ $(id -u) == 0 -o "$steamcmd_user" == "--me" ]; then @@ -204,63 +208,6 @@ if [ "$(id -u)" == "0" ]; then exit 0 fi -#--------------------- -# Variables -#--------------------- - -# Global variables -if [ -f "${arkstGlobalCfgFile}" ]; then - source "${arkstGlobalCfgFile}" -fi - -if [ -f "${HOME}/${arkstUserCfgFile}" ]; then - source "${HOME}/${arkstUserCfgFile}" -fi - -if [ -n "${serverbasedir}" && -d "${serverbasedir}" ]; then - cd "${serverbasedir}" -elif [ -d "${HOME}" ]; then - cd "${HOME}" -elif [ -d "${steamcmdroot}" ]; then - cd "${steamcmdroot}" -elif [[ ! -d "${PWD}" || ! -r "${PWD}" || ! -x "${PWD}" ]]; then - cd / -fi - -lsof=lsof -if [ -x /usr/sbin/lsof ]; then - lsof=/usr/sbin/lsof -fi - -# Local variables -instver="" -bnumber="" -GREEN="\\033[1;32m" -RED="\\033[1;31m" -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 - -appid="${appid:-376030}" -mod_appid="${mod_appid:-346110}" -install_bindir="${install_bindir:-${0%/*}}" -install_libexecdir="${install_libexecdir:-${install_bindir%/*}/libexec/arkmanager}" -steamcmd_workshoplog="${steamcmd_workshoplog:-${HOME}/Steam/logs/workshop_log.txt}" - -if [ "$steamcmd_user" == "--me" ]; then - install_datadir="${install_datadir:-${HOME}/.share/local/arkmanager}" -else - install_datadir="${install_datadir:-${install_bindir%/*}/share/arkmanager}" -fi - -declare -A modsrcdirs - #--------------------- # functions #--------------------- @@ -1784,6 +1731,7 @@ doUpdate() { local appbeta= local appbetapass= local mapfile= + declare -A modsrcdirs for arg in "$@"; do case "$arg" in @@ -3190,6 +3138,58 @@ useConfig() { arkupdatetimefile="${arkupdatetimefile:-${arkserverdir}/Saved/.ark-update.time}" } +loadGlobalConfig() { + if [ -f "${arkstGlobalCfgFile}" ]; then + source "${arkstGlobalCfgFile}" + fi + + if [ -f "${HOME}/${arkstUserCfgFile}" ]; then + source "${HOME}/${arkstUserCfgFile}" + fi + + lsof=lsof + if [ -x /usr/sbin/lsof ]; then + lsof=/usr/sbin/lsof + fi + + # Local variables + GREEN="\\033[1;32m" + RED="\\033[1;31m" + 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 + + appid="${appid:-376030}" + mod_appid="${mod_appid:-346110}" + install_bindir="${install_bindir:-${0%/*}}" + install_libexecdir="${install_libexecdir:-${install_bindir%/*}/libexec/arkmanager}" + steamcmd_workshoplog="${steamcmd_workshoplog:-${HOME}/Steam/logs/workshop_log.txt}" + + if [ "$steamcmd_user" == "--me" ]; then + install_datadir="${install_datadir:-${HOME}/.share/local/arkmanager}" + else + install_datadir="${install_datadir:-${install_bindir%/*}/share/arkmanager}" + fi +} + +setScriptWorkingDir() { + if [[ -n "${serverbasedir}" && -d "${serverbasedir}" ]]; then + cd "${serverbasedir}" + elif [ -d "${HOME}" ]; then + cd "${HOME}" + elif [ -d "${steamcmdroot}" ]; then + cd "${steamcmdroot}" + elif [[ ! -d "${PWD}" || ! -r "${PWD}" || ! -x "${PWD}" ]]; then + cd / + fi +} + addArkOpt() { local optname="${1%%=*}" local optval="${1#*=}" @@ -3316,6 +3316,11 @@ EOE #--------------------- main(){ + # Global variables + loadGlobalConfig + + setScriptWorkingDir + # check the configuration and throw errors or warnings if needed checkConfig @@ -3529,6 +3534,7 @@ main(){ checkForModUpdate "${options[@]}" ;; installmod) + declare -A modsrcdirs doInstallMod "${args[@]}" ;; enablemod) @@ -3538,6 +3544,7 @@ main(){ doDisableMod "${args[@]}" ;; installmods) + declare -A modsrcdirs doInstallAllMods ;; uninstallmods) @@ -3547,6 +3554,7 @@ main(){ doUninstallMod "${args[@]}" ;; reinstallmod) + declare -A modsrcdirs doUninstallMod "${args[@]}" doInstallMod "${args[@]}" ;; From ab71afe5a71f07799a5e5b461d2c27b6937127c6 Mon Sep 17 00:00:00 2001 From: Ben Peddell Date: Sun, 5 Aug 2018 10:17:12 +1000 Subject: [PATCH 4/4] Add server_runas option to run server as specific user --- tools/arkmanager | 30 +++++++++++++++++++++++++++--- 1 file changed, 27 insertions(+), 3 deletions(-) diff --git a/tools/arkmanager b/tools/arkmanager index c17f41b8..2685937a 100755 --- a/tools/arkmanager +++ b/tools/arkmanager @@ -1167,7 +1167,24 @@ doRunBG(){ [[ $fd -gt 2 && $fd != 255 ]] && exec {fd}<&- done - doRun "$@" > >(while read -r l; do printf "%s: [%s] %s\n" "$(timestamp)" "${instance}" "${l}"; done) 2>&1 + if [ -n "$server_runas" ]; then + sudo -u "$server_runas" "$0" --run-instance "$instance" <(cat "${arkstGlobalCfgFile}" "${HOME}/${arkstUserCfgFile}" 2>/dev/null; if [ -z "arkSingleInstance" && -n "$configfile" ]; then cat "$configfile" 2>/dev/null; fi) > >(while read -r l; do printf "%s: [%s] %s\n" "$(timestamp)" "${instance}" "${l}"; done) 2>&1 + else + doRun "$@" > >(while read -r l; do printf "%s: [%s] %s\n" "$(timestamp)" "${instance}" "${l}"; done) 2>&1 + fi +} + +doRunInstance(){ + instance="$1" + + if [[ -n "$2" && -r "$2" ]]; then + . "$2" + fi + + shift + shift + + doRun "$@" } # @@ -3140,11 +3157,11 @@ useConfig() { loadGlobalConfig() { if [ -f "${arkstGlobalCfgFile}" ]; then - source "${arkstGlobalCfgFile}" + source "${arkstGlobalCfgFile}" fi if [ -f "${HOME}/${arkstUserCfgFile}" ]; then - source "${HOME}/${arkstUserCfgFile}" + source "${HOME}/${arkstUserCfgFile}" fi lsof=lsof @@ -3316,6 +3333,13 @@ EOE #--------------------- main(){ + # Handle special --run-instance command + if [ "$1" == "--run-instance" ]; then + shift + doRunInstance "$@" + exit + fi + # Global variables loadGlobalConfig