diff --git a/teamspeak/entrypoint.sh b/teamspeak/entrypoint.sh new file mode 100644 index 000000000..10a1d56ef --- /dev/null +++ b/teamspeak/entrypoint.sh @@ -0,0 +1,93 @@ +#!/bin/sh +set -e + +# don't start ts3server with root permissions +if [ "$1" = 'ts3server' -a "$(id -u)" = '0' ]; then + chown -R ts3server /var/ts3server + exec su-exec ts3server "$0" "$@" +fi + +# have the default inifile as the last parameter +if [ "$1" = 'ts3server' ]; then + set -- "$@" inifile=/var/run/ts3server/ts3server.ini +fi + +# usage: file_env VAR [DEFAULT] +# ie: file_env 'XYZ_DB_PASSWORD' 'example' +# (will allow for "$XYZ_DB_PASSWORD_FILE" to fill in the value of +# "$XYZ_DB_PASSWORD" from a file, especially for Docker's secrets feature) +file_env() { + local var="$1" + local fileVar="${var}_FILE" + eval local varValue="\$${var}" + eval local fileVarValue="\$${var}_FILE" + local def="${2:-}" + if [ "${varValue:-}" ] && [ "${fileVarValue:-}" ]; then + echo >&2 "error: both $var and $fileVar are set (but are exclusive)" + exit 1 + fi + local val="$def" + if [ "${varValue:-}" ]; then + val="${varValue}" + elif [ "${fileVarValue:-}" ]; then + val="$(cat "${fileVarValue}")" + fi + export "$var"="$val" + if [ "${fileVar:-}" ]; then + unset "$fileVar" + fi + if [ "${fileVarValue:-}" ]; then + unset "fileVarValue" + fi +} + +if [ "$1" = 'ts3server' ]; then + file_env 'TS3SERVER_DB_HOST' + file_env 'TS3SERVER_DB_USER' + file_env 'TS3SERVER_DB_PASSWORD' + file_env 'TS3SERVER_DB_NAME' + + cat << EOF | sed 's/^[ \t]*//;s/[ \t]*$//;/^$/d' > /var/run/ts3server/ts3server.ini + licensepath=${TS3SERVER_LICENSEPATH} + query_protocols=${TS3SERVER_QUERY_PROTOCOLS:-raw} + query_timeout=${TS3SERVER_QUERY_TIMEOUT:-300} + query_ssh_rsa_host_key=${TS3SERVER_QUERY_SSH_RSA_HOST_KEY:-ssh_host_rsa_key} + query_ip_allowlist=${TS3SERVER_IP_ALLOWLIST:-query_ip_allowlist.txt} + query_ip_blocklist=${TS3SERVER_IP_BLOCKLIST:-query_ip_blocklist.txt} + dbplugin=${TS3SERVER_DB_PLUGIN:-ts3db_sqlite3} + dbpluginparameter=${TS3SERVER_DB_PLUGINPARAMETER:-/var/run/ts3server/ts3db.ini} + dbsqlpath=${TS3SERVER_DB_SQLPATH:-/opt/ts3server/sql/} + dbsqlcreatepath=${TS3SERVER_DB_SQLCREATEPATH:-create_sqlite} + dbconnections=${TS3SERVER_DB_CONNECTIONS:-10} + dbclientkeepdays=${TS3SERVER_DB_CLIENTKEEPDAYS:-30} + logpath=${TS3SERVER_LOG_PATH:-/var/ts3server/logs} + logquerycommands=${TS3SERVER_LOG_QUERY_COMMANDS:-0} + logappend=${TS3SERVER_LOG_APPEND:-0} + serverquerydocs_path=${TS3SERVER_SERVERQUERYDOCS_PATH:-/opt/ts3server/serverquerydocs/} + ${TS3SERVER_QUERY_IP:+query_ip=${TS3SERVER_QUERY_IP}} + query_port=${TS3SERVER_QUERY_PORT:-10011} + ${TS3SERVER_FILETRANSFER_IP:+filetransfer_ip=${TS3SERVER_FILETRANSFER_IP}} + filetransfer_port=${TS3SERVER_FILETRANSFER_PORT:-30033} + ${TS3SERVER_VOICE_IP:+voice_ip=${TS3SERVER_VOICE_IP}} + default_voice_port=${TS3SERVER_DEFAULT_VOICE_PORT:-9987} + ${TS3SERVER_QUERY_SSH_IP:+query_ssh_ip=${TS3SERVER_QUERY_SSH_IP}} + query_ssh_port=${TS3SERVER_QUERY_SSH_PORT:-10022} + ${TS3SERVER_SERVERADMIN_PASSWORD:+serveradmin_password=${TS3SERVER_SERVERADMIN_PASSWORD}} + ${TS3SERVER_MACHINE_ID:+machine_id=${TS3SERVER_MACHINE_ID}} + ${TS3SERVER_QUERY_SKIPBRUTEFORCECHECK:+query_skipbruteforcecheck=${TS3SERVER_QUERY_SKIPBRUTEFORCECHECk}} + ${TS3SERVER_HINTS_ENABLED:+hints_enabled=${TS3SERVER_HINTS_ENABLED}} +EOF + + cat << EOF | sed 's/^[ \t]*//;s/[ \t]*$//;/^$/d' > /var/run/ts3server/ts3db.ini + [config] + host='${TS3SERVER_DB_HOST}' + port='${TS3SERVER_DB_PORT:-3306}' + username='${TS3SERVER_DB_USER}' + password='${TS3SERVER_DB_PASSWORD}' + database='${TS3SERVER_DB_NAME}' + socket= + wait_until_ready='${TS3SERVER_DB_WAITUNTILREADY:-30}' +EOF +fi + +exec "$@"