wow-private-server/docker/entrypoint-runner.sh
2025-08-30 22:18:32 +02:00

131 lines
2.8 KiB
Bash
Executable File

#!/usr/bin/env bash
#
set -e
# Utils:
#
function _replace_conf()
{
local SEARCH_FOR="${1}"
local REPLACE_WITH="${2}"
local FILENAME="${3}"
sed -i "/^${SEARCH_FOR}/c\\${SEARCH_FOR} = ${REPLACE_WITH}" "${FILENAME}"
}
function _merge_confs()
{
local FILENAME="${1}"
local CONFIG_FILE="${2}"
while IFS='' read -r LINE || [[ -n "${LINE}" ]]
do
PROPERTY="$(echo "${LINE}" | cut -d '#' -f 1 | sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//')"
if [[ -n "${PROPERTY}" ]]
then
local SEARCH_FOR="$(echo "${PROPERTY}" | cut -d '=' -f 1 | sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//')"
local REPLACE_WITH="$(echo "${PROPERTY}" | cut -d '=' -f 2- | sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//')"
_replace_conf "${SEARCH_FOR}" "${REPLACE_WITH}" "${FILENAME}"
fi
done < "${CONFIG_FILE}"
}
# Sub-functions:
#
function compose_mangosd_conf()
{
local MANGOS_DBCONN="${MANGOS_DBHOST};${MANGOS_DBPORT};${MANGOS_DBUSER};${MANGOS_DBPASS}"
cd "${MANGOS_DIR}/etc"
cp mangosd.conf.dist mangosd.conf
_replace_conf "LoginDatabaseInfo" "\"${MANGOS_DBCONN};${MANGOS_REALMD_DBNAME}\"" mangosd.conf
_replace_conf "WorldDatabaseInfo" "\"${MANGOS_DBCONN};${MANGOS_WORLD_DBNAME}\"" mangosd.conf
_replace_conf "CharacterDatabaseInfo" "\"${MANGOS_DBCONN};${MANGOS_CHARACTERS_DBNAME}\"" mangosd.conf
_replace_conf "LogsDatabaseInfo" "\"${MANGOS_DBCONN};${MANGOS_LOGS_DBNAME}\"" mangosd.conf
if [[ -f "/opt/mangos/conf/mangosd.conf" ]]
then
_merge_confs mangosd.conf "/opt/mangos/conf/mangosd.conf"
fi
}
function compose_realmd_conf()
{
local MANGOS_DBCONN="${MANGOS_DBHOST};${MANGOS_DBPORT};${MANGOS_DBUSER};${MANGOS_DBPASS}"
cd "${MANGOS_DIR}/etc"
cp realmd.conf.dist realmd.conf
_replace_conf "LoginDatabaseInfo" "\"${MANGOS_DBCONN};${MANGOS_REALMD_DBNAME}\"" realmd.conf
if [[ -f "/opt/mangos/conf/realmd.conf" ]]
then
_merge_confs realmd.conf "/opt/mangos/conf/realmd.conf"
fi
}
function set_timezone()
{
ln -snf "/usr/share/zoneinfo/${TZ}" /etc/localtime
echo "${TZ}" > /etc/timezone
dpkg-reconfigure --frontend noninteractive tzdata &> /dev/null
}
function wait_for_database()
{
wait-for-it -h "${MANGOS_DBHOST}" -p "${MANGOS_DBPORT}"
}
# Main functions:
#
function init_runner()
{
set_timezone
compose_mangosd_conf
compose_realmd_conf
}
function run_mangosd()
{
cd "${MANGOS_DIR}/bin"
gosu mangos ./mangosd
}
function run_realmd()
{
cd "${MANGOS_DIR}/bin"
gosu mangos ./realmd
}
# Execution:
#
init_runner
case "${1}" in
mangosd)
shift
wait_for_database
run_mangosd ${@}
;;
realmd)
shift
wait_for_database
run_realmd ${@}
;;
*)
cd "${HOME_DIR}"
exec ${@}
;;
esac
exit 1