diff --git a/tools/arkmanager b/tools/arkmanager index 5df729b..3654bf9 100755 --- a/tools/arkmanager +++ b/tools/arkmanager @@ -6,10 +6,112 @@ # 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 + 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 [ "$UID" == 0 -o "$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 +} + +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 #--------------------- @@ -54,10 +156,6 @@ else install_datadir="${install_datadir:-${install_bindir%/*}/share/arkmanager}" fi -# Script version -arkstVersion="1.3" -arkstCommit='' - #--------------------- # functions #--------------------- @@ -986,64 +1084,6 @@ printStatus(){ echo -e "$NORMAL" "Server version: " "$GREEN" $instver "$NORMAL" } -doUpgrade() { - 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 @@ -1134,7 +1174,7 @@ while true; do printStatus ;; upgrade-tools) - doUpgrade + doUpgradeTools ;; uninstall-tools) doUninstallTools