Merge pull request #399 from FezVrasta/1.5-dev

Release v1.5
This commit is contained in:
Fez Vrasta 2016-02-17 00:02:59 +01:00
commit 46f8c16828
14 changed files with 950 additions and 304 deletions

View File

@ -1 +1 @@
1.4 1.5

File diff suppressed because it is too large Load Diff

View File

@ -11,29 +11,35 @@ steamcmd_appinfocache="/home/steam/Steam/appcache/appinfo.vdf" # cache of t
#steamlogin="anonymous" # Uncomment this to specify steam login instead of using anonymous login #steamlogin="anonymous" # Uncomment this to specify steam login instead of using anonymous login
# config environment # config environment
arkserverroot="/home/steam/ARK" # path of your ARK server files (default ~/ARK)
arkserverexec="ShooterGame/Binaries/Linux/ShooterGameServer" # name of ARK server executable arkserverexec="ShooterGame/Binaries/Linux/ShooterGameServer" # name of ARK server executable
arkbackupdir="/home/steam/ARK-Backups" # path to backup directory arkbackupdir="/home/steam/ARK-Backups" # path to backup directory
arkwarnminutes="60" # number of minutes to warn players when using update --warn arkwarnminutes="60" # number of minutes to warn players when using update --warn
arkautorestartfile="ShooterGame/Saved/.autorestart" # path to autorestart file arkautorestartfile="ShooterGame/Saved/.autorestart" # path to autorestart file
arkAutoUpdateOnStart="false" # set this to true if you want to always update before startup
arkBackupPreUpdate="false" # set this to true if you want to perform a backup before updating arkBackupPreUpdate="false" # set this to true if you want to perform a backup before updating
#arkStagingDir="/home/steam/ARK-Staging" # Uncomment to enable updates to be fully downloaded before restarting the server (reduces downtime while updating)
# Options to automatically remove old backups to keep backup size in check
# Each compressed backup is generally about 1-2MB in size.
arkMaxBackupSizeMB="500" # Set to automatically remove old backups when size exceeds this limit
#arkMaxBackupSizeGB="2" # Uncomment this and comment the above to specify the limit in whole GB
# Update warning messages # Update warning messages
# Modify as desired, putting the %d replacement operator where the number belongs # Modify as desired, putting the %d replacement operator where the number belongs
msgWarnUpdateMinutes="This ARK server will shutdown for an update in %d minutes" msgWarnUpdateMinutes="This ARK server will shutdown for an update in %d minutes"
msgWarnUpdateSeconds="This ARK server will shutdown for an update in %d seconds" msgWarnUpdateSeconds="This ARK server will shutdown for an update in %d seconds"
msgWarnRestartMinutes="This ARK server will shutdown for a restart in %d minutes"
msgWarnRestartSeconds="This ARK server will shutdown for a restart in %d seconds"
msgWarnShutdownMinutes="This ARK server will shutdown in %d minutes"
msgWarnShutdownSeconds="This ARK server will shutdown in %d seconds"
# ARK server options - use ark_<optionname>=<value> # ARK server common options - use ark_<optionname>=<value>
# comment out these values if you want to define them # comment out these values if you want to define them
# inside your GameUserSettings.ini file # inside your GameUserSettings.ini file
serverMap="TheIsland" # server map (default TheIsland) serverMap="TheIsland" # server map (default TheIsland)
#serverMapModId="469987622" # Uncomment this to specify the Map Mod Id (<fileid> in http://steamcommunity.com/sharedfiles/filedetails/?id=<fileid>) #serverMapModId="469987622" # Uncomment this to specify the Map Mod Id (<fileid> in http://steamcommunity.com/sharedfiles/filedetails/?id=<fileid>)
#ark_TotalConversionMod="496735411" # Uncomment this to specify a total-conversion mod #ark_TotalConversionMod="496735411" # Uncomment this to specify a total-conversion mod
ark_RCONEnabled="True" # Enable RCON Protocol 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
ark_Port="7778" # ARK server port (default 7778)
ark_QueryPort="27015" # ARK query port (default 27015)
ark_ServerPassword="" # ARK server password, empty: no password required to login ark_ServerPassword="" # ARK server password, empty: no password required to login
ark_ServerAdminPassword="keyboardcat" # ARK server admin password, KEEP IT SAFE! ark_ServerAdminPassword="keyboardcat" # ARK server admin password, KEEP IT SAFE!
ark_MaxPlayers="70" ark_MaxPlayers="70"
@ -48,7 +54,6 @@ ark_MaxPlayers="70"
#arkopt_StructureDestructionTag=DestroySwampSnowStructures #arkopt_StructureDestructionTag=DestroySwampSnowStructures
# config Service # 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) logdir="/var/log/arktools" # Logs path (default /var/log/arktools)
# steamdb specific # steamdb specific
@ -63,3 +68,5 @@ mod_branch=Windows
# alternate configs # alternate configs
# example for config name "ark1": # example for config name "ark1":
#configfile_ark1="/path/to/config/file" #configfile_ark1="/path/to/config/file"
#defaultinstance="main"

View File

@ -99,10 +99,14 @@ if [ "$userinstall" == "yes" ]; then
PREFIX="${PREFIX:-${HOME}}" PREFIX="${PREFIX:-${HOME}}"
EXECPREFIX="${EXECPREFIX:-${PREFIX}}" EXECPREFIX="${EXECPREFIX:-${PREFIX}}"
DATAPREFIX="${DATAPREFIX:-${PREFIX}/.local/share}" DATAPREFIX="${DATAPREFIX:-${PREFIX}/.local/share}"
CONFIGFILE="${PREFIX}/.arkmanager.cfg"
INSTANCEDIR="${PREFIX}/.config/arkmanager/instances"
else else
PREFIX="${PREFIX:-/usr/local}" PREFIX="${PREFIX:-/usr/local}"
EXECPREFIX="${EXECPREFIX:-${PREFIX}}" EXECPREFIX="${EXECPREFIX:-${PREFIX}}"
DATAPREFIX="${DATAPREFIX:-${PREFIX}/share}" DATAPREFIX="${DATAPREFIX:-${PREFIX}/share}"
CONFIGFILE="/etc/arkmanager/.arkmanager.cfg"
INSTANCEDIR="/etc/arkmanager/instances"
fi fi
BINDIR="${BINDIR:-${EXECPREFIX}/bin}" BINDIR="${BINDIR:-${EXECPREFIX}/bin}"
@ -155,8 +159,17 @@ if [ "$userinstall" == "yes" ]; then
# Create a folder in ~/logs to let Ark tools write its own log files # Create a folder in ~/logs to let Ark tools write its own log files
mkdir -p "${INSTALL_ROOT}${PREFIX}/logs/arktools" mkdir -p "${INSTALL_ROOT}${PREFIX}/logs/arktools"
# Create a folder in ~/.config/arkamanger to hold instance configs
mkdir -p "${INSTALL_ROOT}${INSTANCEDIR}"
# Copy example instance config
cp instance.cfg.example "${INSTALL_ROOT}/${INSTANCEDIR}/instance.cfg.example"
# Change the defaults in the new instance config template
sed -i -e "s|\"/home/steam|\"${PREFIX}|" \
"${INSTALL_ROOT}${INSTANCEDIR}/instance.cfg.example"
# Copy arkmanager.cfg to ~/.arkmanager.cfg.NEW # Copy arkmanager.cfg to ~/.arkmanager.cfg.NEW
cp arkmanager.cfg "${INSTALL_ROOT}${PREFIX}/.arkmanager.cfg.NEW" cp arkmanager.cfg "${INSTALL_ROOT}${CONFIGFILE}.NEW"
# Change the defaults in the new config file # Change the defaults in the new config file
sed -i -e "s|^steamcmd_user=\"steam\"|steamcmd_user=\"--me\"|" \ sed -i -e "s|^steamcmd_user=\"steam\"|steamcmd_user=\"--me\"|" \
-e "s|\"/home/steam|\"${PREFIX}|" \ -e "s|\"/home/steam|\"${PREFIX}|" \
@ -164,35 +177,18 @@ if [ "$userinstall" == "yes" ]; then
-e "s|^install_bindir=.*|install_bindir=\"${BINDIR}\"|" \ -e "s|^install_bindir=.*|install_bindir=\"${BINDIR}\"|" \
-e "s|^install_libexecdir=.*|install_libexecdir=\"${LIBEXECDIR}\"|" \ -e "s|^install_libexecdir=.*|install_libexecdir=\"${LIBEXECDIR}\"|" \
-e "s|^install_datadir=.*|install_datadir=\"${DATADIR}\"|" \ -e "s|^install_datadir=.*|install_datadir=\"${DATADIR}\"|" \
"${INSTALL_ROOT}${PREFIX}/.arkmanager.cfg.NEW" "${INSTALL_ROOT}${CONFIGFILE}.NEW"
# Copy arkmanager.cfg to ~/.arkmanager.cfg if it doesn't already exist # Copy arkmanager.cfg to ~/.arkmanager.cfg if it doesn't already exist
if [ -f "${INSTALL_ROOT}${PREFIX}/.arkmanager.cfg" ]; then if [ -f "${INSTALL_ROOT}${CONFIGFILE}" ]; then
newopts=( arkbackupdir arkautorestartfile install_bindir install_libexecdir install_datadir mod_appid ) bash ./migrate-config.sh "${INSTALL_ROOT}${CONFIGFILE}"
newopt_steamcmd_appinfocache="${PREFIX}/Steam/appcache/appinfo.vdf" bash ./migrate-main-instance.sh "${INSTALL_ROOT}${CONFIGFILE}" "${INSTALL_ROOT}${INSTANCEDIR}/main.cfg"
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 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!" echo "A copy of the new configuration file was included in '${CONFIGFILE}.NEW'. Make sure to review any changes and update your config accordingly!"
exit 2 exit 2
else else
mv -n "${INSTALL_ROOT}${PREFIX}/.arkmanager.cfg.NEW" "${INSTALL_ROOT}${PREFIX}/.arkmanager.cfg" mv -n "${INSTALL_ROOT}${CONFIGFILE}.NEW" "${INSTALL_ROOT}${CONFIGFILE}"
fi fi
else else
# Copy arkmanager to /usr/bin and set permissions # Copy arkmanager to /usr/bin and set permissions
@ -214,11 +210,12 @@ else
if [ -f /etc/systemd/system.conf ]; then # used by systemd if [ -f /etc/systemd/system.conf ]; then # used by systemd
mkdir -p "${INSTALL_ROOT}${LIBEXECDIR}" mkdir -p "${INSTALL_ROOT}${LIBEXECDIR}"
cp systemd/arkmanager.init "${INSTALL_ROOT}${LIBEXECDIR}/arkmanager.init" cp systemd/arkmanager.init "${INSTALL_ROOT}${LIBEXECDIR}/arkmanager.init"
sed -i "s|^DAEMON=\"/usr/bin/|DAEMON=\"${BINDIR}/|" "${INSTALL_ROOT}${LIBEXECDIR}/arkmanager.init"
chmod +x "${INSTALL_ROOT}${LIBEXECDIR}/arkmanager.init" chmod +x "${INSTALL_ROOT}${LIBEXECDIR}/arkmanager.init"
cp systemd/arkmanager.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|=/usr/libexec/arkmanager/|=${LIBEXECDIR}/|" "${INSTALL_ROOT}/etc/systemd/system/arkmanager.service"
cp systemd/arkmanager@.service "${INSTALL_ROOT}/etc/systemd/system/arkmanager@.service" cp systemd/arkmanager@.service "${INSTALL_ROOT}/etc/systemd/system/arkmanager@.service"
sed -i "s|=/usr/bin/|=${BINDIR}/|" "${INSTALL_ROOT}/etc/systemd/system/arkmanager@.service" sed -i "s|=/usr/bin/|=${BINDIR}/|;s|=steam$|=${steamcmd_user}|" "${INSTALL_ROOT}/etc/systemd/system/arkmanager@.service"
if [ -z "${INSTALL_ROOT}" ]; then if [ -z "${INSTALL_ROOT}" ]; then
systemctl daemon-reload systemctl daemon-reload
systemctl enable arkmanager.service systemctl enable arkmanager.service
@ -241,11 +238,12 @@ else
if [ -f /etc/systemd/system.conf ]; then # used by systemd if [ -f /etc/systemd/system.conf ]; then # used by systemd
mkdir -p "${INSTALL_ROOT}${LIBEXECDIR}" mkdir -p "${INSTALL_ROOT}${LIBEXECDIR}"
cp systemd/arkmanager.init "${INSTALL_ROOT}${LIBEXECDIR}/arkmanager.init" cp systemd/arkmanager.init "${INSTALL_ROOT}${LIBEXECDIR}/arkmanager.init"
sed -i "s|^DAEMON=\"/usr/bin/|DAEMON=\"${BINDIR}/|" "${INSTALL_ROOT}${LIBEXECDIR}/arkmanager.init"
chmod +x "${INSTALL_ROOT}${LIBEXECDIR}/arkmanager.init" chmod +x "${INSTALL_ROOT}${LIBEXECDIR}/arkmanager.init"
cp systemd/arkmanager.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|=/usr/libexec/arkmanager/|=${LIBEXECDIR}/|" "${INSTALL_ROOT}/etc/systemd/system/arkmanager.service"
cp systemd/arkmanager@.service "${INSTALL_ROOT}/etc/systemd/system/arkmanager@.service" cp systemd/arkmanager@.service "${INSTALL_ROOT}/etc/systemd/system/arkmanager@.service"
sed -i "s|=/usr/bin/|=${BINDIR}/|" "${INSTALL_ROOT}/etc/systemd/system/arkmanager@.service" sed -i "s|=/usr/bin/|=${BINDIR}/|;s|=steam$|=${steamcmd_user}|" "${INSTALL_ROOT}/etc/systemd/system/arkmanager@.service"
if [ -z "${INSTALL_ROOT}" ]; then if [ -z "${INSTALL_ROOT}" ]; then
systemctl daemon-reload systemctl daemon-reload
systemctl enable arkmanager.service systemctl enable arkmanager.service
@ -274,11 +272,12 @@ else
elif [ -f /etc/systemd/system.conf ]; then # used by systemd elif [ -f /etc/systemd/system.conf ]; then # used by systemd
mkdir -p "${INSTALL_ROOT}${LIBEXECDIR}" mkdir -p "${INSTALL_ROOT}${LIBEXECDIR}"
cp systemd/arkmanager.init "${INSTALL_ROOT}${LIBEXECDIR}/arkmanager.init" cp systemd/arkmanager.init "${INSTALL_ROOT}${LIBEXECDIR}/arkmanager.init"
sed -i "s|^DAEMON=\"/usr/bin/|DAEMON=\"${BINDIR}/|" "${INSTALL_ROOT}${LIBEXECDIR}/arkmanager.init"
chmod +x "${INSTALL_ROOT}${LIBEXECDIR}/arkmanager.init" chmod +x "${INSTALL_ROOT}${LIBEXECDIR}/arkmanager.init"
cp systemd/arkmanager.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|=/usr/libexec/arkmanager/|=${LIBEXECDIR}/|" "${INSTALL_ROOT}/etc/systemd/system/arkmanager.service"
cp systemd/arkmanager@.service "${INSTALL_ROOT}/etc/systemd/system/arkmanager@.service" cp systemd/arkmanager@.service "${INSTALL_ROOT}/etc/systemd/system/arkmanager@.service"
sed -i "s|=/usr/bin/|=${BINDIR}/|" "${INSTALL_ROOT}/etc/systemd/system/arkmanager@.service" sed -i "s|=/usr/bin/|=${BINDIR}/|;s|=steam$|=${steamcmd_user}|" "${INSTALL_ROOT}/etc/systemd/system/arkmanager@.service"
if [ -z "${INSTALL_ROOT}" ]; then if [ -z "${INSTALL_ROOT}" ]; then
systemctl daemon-reload systemctl daemon-reload
systemctl enable arkmanager.service systemctl enable arkmanager.service
@ -291,43 +290,34 @@ else
mkdir -p "${INSTALL_ROOT}/var/log/arktools" mkdir -p "${INSTALL_ROOT}/var/log/arktools"
chown "$steamcmd_user" "${INSTALL_ROOT}/var/log/arktools" chown "$steamcmd_user" "${INSTALL_ROOT}/var/log/arktools"
# Create a folder in /etc/arkmanager to hold instance config files
mkdir -p "${INSTALL_ROOT}${INSTANCEDIR}"
chown "$steamcmd_user" "${INSTALL_ROOT}${INSTANCEDIR}"
# Copy example instance config
cp instance.cfg.example "${INSTALL_ROOT}${INSTANCEDIR}/instance.cfg.example"
# Copy arkmanager.cfg inside linux configuation folder if it doesn't already exists # Copy arkmanager.cfg inside linux configuation folder if it doesn't already exists
mkdir -p "${INSTALL_ROOT}/etc/arkmanager" mkdir -p "${INSTALL_ROOT}/etc/arkmanager"
cp arkmanager.cfg "${INSTALL_ROOT}/etc/arkmanager/arkmanager.cfg.NEW" chown "$steamcmd_user" "${INSTALL_ROOT}/etc/arkmanager"
chown "$steamcmd_user" "${INSTALL_ROOT}/etc/arkmanager/arkmanager.cfg.NEW" cp arkmanager.cfg "${INSTALL_ROOT}${CONFIGFILE}.NEW"
chown "$steamcmd_user" "${INSTALL_ROOT}${CONFIGFILE}.NEW"
sed -i -e "s|^steamcmd_user=\"steam\"|steamcmd_user=\"$steamcmd_user\"|" \ sed -i -e "s|^steamcmd_user=\"steam\"|steamcmd_user=\"$steamcmd_user\"|" \
-e "s|\"/home/steam|\"/home/$steamcmd_user|" \ -e "s|\"/home/steam|\"/home/$steamcmd_user|" \
-e "s|^install_bindir=.*|install_bindir=\"${BINDIR}\"|" \ -e "s|^install_bindir=.*|install_bindir=\"${BINDIR}\"|" \
-e "s|^install_libexecdir=.*|install_libexecdir=\"${LIBEXECDIR}\"|" \ -e "s|^install_libexecdir=.*|install_libexecdir=\"${LIBEXECDIR}\"|" \
-e "s|^install_datadir=.*|install_datadir=\"${DATADIR}\"|" \ -e "s|^install_datadir=.*|install_datadir=\"${DATADIR}\"|" \
"${INSTALL_ROOT}/etc/arkmanager/arkmanager.cfg.NEW" "${INSTALL_ROOT}${CONFIGFILE}.NEW"
if [ -f "${INSTALL_ROOT}/etc/arkmanager/arkmanager.cfg" ]; then if [ -f "${INSTALL_ROOT}${CONFIGFILE}" ]; then
newopts=( arkbackupdir arkautorestartfile install_bindir install_libexecdir install_datadir mod_appid ) bash ./migrate-config.sh "${INSTALL_ROOT}${CONFIGFILE}"
newopt_steamcmd_appinfocache="/home/${steamcmd_user}/Steam/appcache/appinfo.vdf" bash ./migrate-main-instance.sh "${INSTALL_ROOT}${CONFIGFILE}" "${INSTALL_ROOT}${INSTANCEDIR}/main.cfg"
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 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!" 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 exit 2
else else
mv -n "${INSTALL_ROOT}/etc/arkmanager/arkmanager.cfg.NEW" "${INSTALL_ROOT}/etc/arkmanager/arkmanager.cfg" mv -n "${INSTALL_ROOT}${CONFIGFILE}.NEW" "${INSTALL_ROOT}${CONFIGFILE}.cfg"
fi fi
fi fi

View File

@ -0,0 +1,28 @@
# config environment
arkserverroot="/home/steam/ARK" # path of your ARK server files (default ~/ARK)
# ARK server options - use ark_<optionname>=<value>
# comment out these values if you want to define them
# inside your GameUserSettings.ini file
serverMap="TheIsland" # server map (default TheIsland)
#serverMapModId="469987622" # Uncomment this to specify the Map Mod Id (<fileid> in http://steamcommunity.com/sharedfiles/filedetails/?id=<fileid>)
#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
ark_Port="7778" # ARK server port (default 7778)
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"
#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_<optionname>=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
# ARK server options - i.e. for -optname=val, use arkopt_optname=val
#arkopt_StructureDestructionTag=DestroySwampSnowStructures

View File

@ -20,46 +20,99 @@ NAME="ShooterGameServer"
LOGFILE="${logdir}/${NAME}.log" LOGFILE="${logdir}/${NAME}.log"
DAEMON="/usr/bin/arkmanager" DAEMON="/usr/bin/arkmanager"
SVCNAME="${0##*/}"
INSTANCE="${SVCNAME#*.}"
if [ "$INSTANCE" == "$SVCNAME" ]; then
INSTANCE="$2"
fi
set -e set -e
# If the daemon is not there, then exit. # If the daemon is not there, then exit.
test -x $DAEMON || exit 5 test -x $DAEMON || exit 5
function start_instance(){
local INSTANCE="$1"
PID="$(<"/var/run/arkmanager.${INSTANCE}.pid")"
if [ -n "$PID" ] && kill -0 "$PID" >/dev/null 2>&1; then
if grep " ${PID} .* ${DAEMON}" <(ps -ef) >/dev/null 2>&1; then
echo "$NAME @${INSTANCE} is already running"
return 0
fi
fi
log_daemon_msg "Starting" "$NAME @${INSTANCE}"
ulimit -n 100000
"${DAEMON}" run "@${INSTANCE}" &
PID="$!"
sleep 5
if kill -0 "$PID" >/dev/null 2>&1; then
echo "$PID" >"/var/run/arkmanager.${INSTANCE}.pid"
log_end_msg 0
return 0
else
log_end_msg 1
return 1
fi
}
function start_all_instances(){
local nosuccess=0
local anyfailure=0
for instance in $("${DAEMON}" list-instances --brief); do
if start_instance "$instance"; then
nosuccess=0
else
anyfailure=1
fi
done
return $nosuccess
}
function stop_instance(){
local INSTANCE="$1"
log_daemon_msg "Stopping $NAME @${INSTANCE}: "
"${DAEMON}" stop "@${INSTANCE}" &
rm -f "/var/run/arkmanager.${INSTANCE}.pid"
log_end_msg 0
return 0
}
case "$1" in case "$1" in
start) start)
log_daemon_msg "Starting" "$NAME" if [ -n "$INSTANCE" ]; then
ulimit -n 100000 start_instance "$INSTANCE"
su -s /bin/sh -c "$DAEMON start --all" $steamcmd_user exit $?
sleep 5
PID=`ps -ef | grep $NAME | grep -v grep | awk '{print $2}'`
if [ -n "$PID" ]; then
echo "$PID" >/var/run/arkmanager.pid
log_end_msg 0
else else
log_end_msg 1 if start_all_instances; then
exit 0
else
exit 1
fi
fi fi
;; ;;
stop) stop)
log_daemon_msg "Stopping" "$NAME" if [ -n "$INSTANCE" ]; then
su -s /bin/sh -c "$DAEMON stop --all" $steamcmd_user stop_instance "$INSTANCE"
sleep 5 exit $?
PID=`ps -ef | grep $NAME | grep -v grep | awk '{print $2}'`
if [ -n "$PID" ]; then
log_end_msg 1
else else
rm /var/run/arkmanager.pid for instance in $("${DAEMON}" list-instances --brief); do
log_end_msg 0 stop_instance "$instance"
done
exit $?
fi fi
;; ;;
restart) restart)
ulimit -n 100000 "$0" stop
su -s /bin/sh -c "$DAEMON restart --all" $steamcmd_user "$0" start
;; ;;
status) status)
su -s /bin/sh -c "$DAEMON status" $steamcmd_user "$DAEMON" status "@${INSTANCE:-all}"
;; ;;
*) *)

23
tools/migrate-config.sh Executable file
View File

@ -0,0 +1,23 @@
#!/bin/bash
configfile="$1"
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\)=' "${configfile}" >/dev/null 2>&1; then
sed -i '/^\(servermail\|arkstVersion\)=/d' "${configfile}"
fi
for optname in "${newopts[@]}"; do
if ! grep "^${optname}=" "${configfile}" >/dev/null 2>&1; then
noptname="newopt_${optname}"
echo "${optname}='${!noptname}'" >>"${configfile}"
fi
done

10
tools/migrate-main-instance.sh Executable file
View File

@ -0,0 +1,10 @@
#!/bin/bash
configfile="$1"
instancefile="$2"
if grep "^arkserverroot=" <"$configfile" >/dev/null 2>&1 && [ ! -f "$instancefile" ]; then
sed -n '/^#*\(ark\(\|flag\|opt\)_[^=]*\|arkserverroot\|serverMap\(\|ModId\)\)=/p' <"$configfile" >"$instancefile"
sed -i '/^ark\(serverroot\|_\(RCONPort\|Port\|QueryPort\)\)=/d' "$configfile"
echo 'defaultinstance="main"' >>"$configfile"
fi

View File

@ -13,27 +13,25 @@ depend(){
} }
start(){ start(){
INSTANCE="${RC_SVCNAME#*.}"
ebegin "Starting ARK manager daemon" ebegin "Starting ARK manager daemon"
ulimit -n 100000 ulimit -n 100000
su -s /bin/sh -c "$DAEMON start --all" $steamcmd_user if [ "$INSTANCE" != "$RC_SVCNAME" ]; then
sleep 5 "$DAEMON" start "@${INSTANCE}"
PID=`ps -ef | grep $NAME | grep -v grep | awk '{print $2}'`
if [ -n "$PID" ]; then
eend 0
else else
eend 1 "$DAEMON" start "@all"
fi fi
eend $?
} }
stop(){ stop(){
INSTANCE="${RC_SVCNAME#*.}"
ebegin "Stopping ARK manager daemon" ebegin "Stopping ARK manager daemon"
su -s /bin/sh -c "$DAEMON stop --all" $steamcmd_user if [ "$INSTANCE" != "$RC_SVCNAME" ]; then
sleep 5 "$DAEMON" stop "@${INSTANCE}"
PID=`ps -ef | grep $NAME | grep -v grep | awk '{print $2}'`
if [ -n "$PID" ]; then
eend 0
else else
eend 1 "$DAEMON" stop "@all"
fi fi
eend $?
} }

View File

@ -34,54 +34,103 @@ GREEN="\\033[1;32m"
RED="\\033[1;31m" RED="\\033[1;31m"
NORMAL="\\033[0;39m" NORMAL="\\033[0;39m"
SVCNAME="${0##*/}"
INSTANCE="${SVCNAME#*.}"
if [ "$INSTANCE" == "$SVCNAME" ]; then
INSTANCE="$2"
fi
set -e set -e
# If the daemon is not there, then exit. # If the daemon is not there, then exit.
test -x $DAEMON || exit 5 test -x $DAEMON || exit 5
function start_instance(){
local INSTANCE="$1"
PID="$(<"/var/run/arkmanager.${INSTANCE}.pid")"
if [ -n "$PID" ] && kill -0 "$PID" >/dev/null 2>&1; then
if grep " ${PID} .* ${DAEMON}" <(ps -ef) >/dev/null 2>&1; then
echo "$NAME @${INSTANCE} is already running"
return 0
fi
fi
echo -n "Starting $NAME @${INSTANCE}: "
ulimit -n 100000
"${DAEMON}" run "@${INSTANCE}" &
PID="$!"
sleep 5
if kill -0 "$PID" >/dev/null 2>&1; then
echo "$PID" >"/var/run/arkmanager.${INSTANCE}.pid"
touch "/var/lock/subsys/arkmanager.${INSTANCE}"
echo "[" "$GREEN" " OK " "$NORMAL" "]"
return 0
else
echo "[" "$RED" " FAILED " "$NORMAL" "]"
return 1
fi
}
function start_all_instances(){
local nosuccess=0
local anyfailure=0
for instance in $("${DAEMON}" list-instances --brief); do
if start_instance "$instance"; then
nosuccess=0
else
anyfailure=1
fi
done
return $nosuccess
}
function stop_instance(){
local INSTANCE="$1"
echo -n "Stopping $NAME @${INSTANCE}: "
"${DAEMON}" stop "@${INSTANCE}" &
rm -f "/var/lock/subsys/arkmanager.${INSTANCE}"
rm -f "/var/run/arkmanager.${INSTANCE}.pid"
echo "[" "$GREEN" " OK " "$NORMAL" "]"
return 0
}
case "$1" in case "$1" in
start) start)
echo -n "Starting $NAME: " if [ -n "$INSTANCE" ]; then
ulimit -n 100000 start_instance "$INSTANCE"
su -s /bin/sh -c "$DAEMON start --all" $steamcmd_user > /dev/null exit $?
sleep 5
PID=`ps -ef | grep $NAME | grep -v grep | awk '{print $2}'`
if [ -n "$PID" ]; then
echo "${PID}" >/var/run/arkmanager.pid
touch /var/lock/subsys/arkmanager
echo "[" "$GREEN" " OK " "$NORMAL" "]"
exit 0
else else
echo "[" "$RED" " FAILED " "$NORMAL" "]" if start_all_instances; then
exit 1 touch /var/lock/subsys/arkmanager
exit 0
else
exit 1
fi
fi fi
;; ;;
stop) stop)
echo -n "Stopping $NAME: " if [ -n "$INSTANCE" ]; then
su -s /bin/sh -c "$DAEMON stop --all" $steamcmd_user > /dev/null stop_instance "$INSTANCE"
sleep 5 exit $?
PID=`ps -ef | grep $NAME | grep -v grep | awk '{print $2}'`
if [ -n "$PID" ]; then
echo "[" "$RED" " FAILED " "$NORMAL" "]"
exit 1
else else
echo "[" "$GREEN" " OK " "$NORMAL" "]" for instance in $("${DAEMON}" list-instances --brief); do
rm -f /var/lock/subsys/arkmanager stop_instance "$instance"
rm -f /var/run/arkmanager.pid done
exit 0 rm -f "/var/lock/subsys/arkmanager"
exit $?
fi fi
;; ;;
restart) restart)
echo -n "Restarting $NAME: " "$0" stop
ulimit -n 100000 "$0" start
su -s /bin/sh -c "$DAEMON restart --all" $steamcmd_user > /dev/null
echo "OK"
;; ;;
status) status)
su -s /bin/sh -c "$DAEMON status" $steamcmd_user "$DAEMON" status "@${INSTANCE:-all}"
exit 0 exit 0
;; ;;

View File

@ -1,5 +1,14 @@
#!/bin/bash #!/bin/bash
for service in main $(grep -o '^configfile_[^=]*' /etc/arkmanager/arkmanager.cfg); do DAEMON=/usr/bin/arkmanager
systemctl start arkmanager@${service#configfile_}
for service in $(${DAEMON} list-instances --brief); do
case "$1" in
start)
systemctl start arkmanager@${service}
;;
stop)
systemctl stop arkmanager@${service}
;;
esac
done done

View File

@ -2,5 +2,6 @@
Description=Daemon to start an ark server instance Description=Daemon to start an ark server instance
[Service] [Service]
User=steam
ExecStart=/usr/bin/arkmanager useconfig %i run ExecStart=/usr/bin/arkmanager useconfig %i run
Type=simple Type=simple

View File

@ -2,6 +2,8 @@ description "ARK Server Tools service"
instance $service instance $service
setuid steam
env DAEMON="/usr/bin/arkmanager" env DAEMON="/usr/bin/arkmanager"
exec "$DAEMON" useconfig $service run exec "$DAEMON" useconfig $service run

View File

@ -1,8 +1,10 @@
start on runlevel [345] start on runlevel [345]
stop on runlevel [!345] stop on runlevel [!345]
env DAEMON="/usr/bin/arkmanager"
script script
for service in main $(grep -o '^configfile_[^=]*' /etc/arkmanager/arkmanager.cfg); do for service in $(${DAEMON} list-instances --brief); do
start arkmanager-instance service=${service#configfile_} start arkmanager-instance service=${service}
done done
end script end script