From 185d0df1600ae56735dd11eaee871a78f65ad0c1 Mon Sep 17 00:00:00 2001 From: Manuel Thalmann Date: Wed, 20 Nov 2024 00:33:09 +0100 Subject: [PATCH] Add scripts for installing TrackMania server --- .../docker/services/trackmania/.dockerignore | 1 + .../trackmania/docker-compose.base.yml | 72 ++++++++ .../docker-compose.core.secrets.yml | 19 +++ .../trackmania/docker-compose.core.yml | 30 ++++ .../trackmania/docker-compose.secrets.yml | 12 ++ .../services/trackmania/docker-compose.yml | 4 + .../docker/services/trackmania/main.fish | 37 +++++ .../docker/services/trackmania/parser.patch | 11 ++ .../trackmania/tmforever-entrypoint.sh | 145 ++++++++++++++++ .../services/trackmania/trackmania.Dockerfile | 78 +++++++++ .../services/trackmania/xaseco-entrypoint.sh | 155 ++++++++++++++++++ .../services/trackmania/xaseco.Dockerfile | 58 +++++++ 12 files changed, 622 insertions(+) create mode 100644 scripts/Common/Software/docker/services/trackmania/.dockerignore create mode 100644 scripts/Common/Software/docker/services/trackmania/docker-compose.base.yml create mode 100644 scripts/Common/Software/docker/services/trackmania/docker-compose.core.secrets.yml create mode 100644 scripts/Common/Software/docker/services/trackmania/docker-compose.core.yml create mode 100644 scripts/Common/Software/docker/services/trackmania/docker-compose.secrets.yml create mode 100644 scripts/Common/Software/docker/services/trackmania/docker-compose.yml create mode 100755 scripts/Common/Software/docker/services/trackmania/main.fish create mode 100644 scripts/Common/Software/docker/services/trackmania/parser.patch create mode 100755 scripts/Common/Software/docker/services/trackmania/tmforever-entrypoint.sh create mode 100644 scripts/Common/Software/docker/services/trackmania/trackmania.Dockerfile create mode 100755 scripts/Common/Software/docker/services/trackmania/xaseco-entrypoint.sh create mode 100644 scripts/Common/Software/docker/services/trackmania/xaseco.Dockerfile diff --git a/scripts/Common/Software/docker/services/trackmania/.dockerignore b/scripts/Common/Software/docker/services/trackmania/.dockerignore new file mode 100644 index 00000000..8fce6030 --- /dev/null +++ b/scripts/Common/Software/docker/services/trackmania/.dockerignore @@ -0,0 +1 @@ +data/ diff --git a/scripts/Common/Software/docker/services/trackmania/docker-compose.base.yml b/scripts/Common/Software/docker/services/trackmania/docker-compose.base.yml new file mode 100644 index 00000000..37ecfde4 --- /dev/null +++ b/scripts/Common/Software/docker/services/trackmania/docker-compose.base.yml @@ -0,0 +1,72 @@ +services: + game: + build: + context: . + dockerfile: trackmania.Dockerfile + restart: unless-stopped + extends: + file: docker-compose.core.yml + service: tm + stdin_open: true + environment: + TM_XMLRPC_ALLOWED_REMOTE: xaseco + volumes: + - ./data/tm/cache:/app/GameData/Cache + healthcheck: + test: [CMD, bash, -c, echo '' >/dev/tcp/127.0.0.1/5000] + start_period: 1m + start_interval: 10s + interval: 5s + timeout: 3s + retries: 5 + downloader: + extends: + file: docker-compose.core.yml + service: xaseco-installer + volumes: + - ./initdb.d:/cache/localdb + healthcheck: + test: [CMD, bash, -c, ls /cache/localdb/*] + start_period: 1m + start_interval: 10s + interval: 5s + timeout: 3s + retries: 5 + xaseco: + restart: unless-stopped + extends: + file: docker-compose.core.yml + service: xaseco + depends_on: + game: + condition: service_healthy + db: + condition: service_healthy + environment: + TM_SERVER_HOST: game + MYSQL_HOST: db + volumes: + - ./data/xaseco:/data + db: + image: mysql:5 + restart: unless-stopped + extends: + file: docker-compose.core.yml + service: db + depends_on: + downloader: + condition: service_completed_successfully + command: --sql_mode="" + environment: + MYSQL_RANDOM_ROOT_PASSWORD: "yes" + volumes: + - ./data/db:/var/lib/mysql + - ./initdb.d:/docker-entrypoint-initdb.d + healthcheck: + test: [CMD, bash, -c, mysqladmin ping -hlocalhost -u "$$MYSQL_USER" -p"$$MYSQL_PASSWORD"] + timeout: 20s + retries: 10 + +volumes: + tm-server: {} + xaseco: {} diff --git a/scripts/Common/Software/docker/services/trackmania/docker-compose.core.secrets.yml b/scripts/Common/Software/docker/services/trackmania/docker-compose.core.secrets.yml new file mode 100644 index 00000000..57723539 --- /dev/null +++ b/scripts/Common/Software/docker/services/trackmania/docker-compose.core.secrets.yml @@ -0,0 +1,19 @@ +services: + tm: + environment: &tm-config + TM_SUPERADMIN_PASSWORD: pw + TM_SERVER_USER: null + TM_SERVER_PASSWORD: null + volumes: &tm-volumes + - ./data/tm/tracks:/app/GameData/Tracks/Challenges + db: + environment: &db-config + MYSQL_USER: xaseco + MYSQL_PASSWORD: pw + MYSQL_DATABASE: Aseco + xaseco: + environment: + <<: + - *tm-config + - *db-config + volumes: *tm-volumes diff --git a/scripts/Common/Software/docker/services/trackmania/docker-compose.core.yml b/scripts/Common/Software/docker/services/trackmania/docker-compose.core.yml new file mode 100644 index 00000000..e333afe8 --- /dev/null +++ b/scripts/Common/Software/docker/services/trackmania/docker-compose.core.yml @@ -0,0 +1,30 @@ +services: + tm: + extends: + file: docker-compose.core.secrets.yml + service: tm + volumes: &tm-volumes + - tm-server:/app + xaseco-installer: + build: &xaseco-build + context: . + dockerfile: xaseco.Dockerfile + restart: on-failure + command: "true" + <<: &xaseco-base + privileged: true + volumes: &xaseco-volumes + - xaseco:/cache + xaseco: + extends: + file: docker-compose.core.secrets.yml + service: xaseco + <<: + - *xaseco-base + - volumes: *tm-volumes + - volumes: *xaseco-volumes + build: *xaseco-build + db: + extends: + file: docker-compose.core.secrets.yml + service: db diff --git a/scripts/Common/Software/docker/services/trackmania/docker-compose.secrets.yml b/scripts/Common/Software/docker/services/trackmania/docker-compose.secrets.yml new file mode 100644 index 00000000..69bb5c3f --- /dev/null +++ b/scripts/Common/Software/docker/services/trackmania/docker-compose.secrets.yml @@ -0,0 +1,12 @@ +services: + game: + ports: + - 2350:2350 + - 2350:2350/udp + - 2353:2353 + - 2353:2353/udp + command: + - /game_settings=MatchSettings/Nations/NationsBlue.txt + environment: {} + xaseco: + environment: {} diff --git a/scripts/Common/Software/docker/services/trackmania/docker-compose.yml b/scripts/Common/Software/docker/services/trackmania/docker-compose.yml new file mode 100644 index 00000000..2e1ecd19 --- /dev/null +++ b/scripts/Common/Software/docker/services/trackmania/docker-compose.yml @@ -0,0 +1,4 @@ +include: + - path: + - docker-compose.base.yml + - docker-compose.secrets.yml diff --git a/scripts/Common/Software/docker/services/trackmania/main.fish b/scripts/Common/Software/docker/services/trackmania/main.fish new file mode 100755 index 00000000..bb0aab16 --- /dev/null +++ b/scripts/Common/Software/docker/services/trackmania/main.fish @@ -0,0 +1,37 @@ +#!/bin/env fish +begin + set -l dir (status dirname) + set -l source "$dir/docker-compose.core.secrets.yml" + source "$dir/../service.fish" + + function installSW -V dir -V domain -V source + set -l root (getServiceRoot $argv) + set -l tmPW (nix-shell -p keepassxc --run "keepassxc-cli generate --length 32") + set -l sqlPW (nix-shell -p keepassxc --run "keepassxc-cli generate --length 32") + initializeServiceInstallation $argv + + cp -rf "$dir"/{.dockerignore,docker-compose{.base,{,.core}{,.secrets}}.yml,parser.patch,tmforever-entrypoint.sh,trackmania.Dockerfile,xaseco-entrypoint.sh,xaseco.Dockerfile} "$root" + + PW="$tmPW" yq "$(getServiceKey "tm").environment.TM_SUPERADMIN_PASSWORD = env(PW)" "$source" | \ + PW="$sqlPW" yq "$(getServiceKey "db").environment.MYSQL_PASSWORD = env(PW)" | \ + sudo tee "$root/$(basename "$source")" >/dev/null + + installDockerService $argv + end + + function configureSW -V dir + configureDockerService $argv + end + + function getServiceServers + end + + function getServiceLocations + end + + function getBackupArgs + printf "%s\n" --hidden --no-ignore "^docker-compose\.(.*\.)\?.secrets.yml|data\$" (getServiceRoot $argv) + end + + runInstaller --force $argv +end diff --git a/scripts/Common/Software/docker/services/trackmania/parser.patch b/scripts/Common/Software/docker/services/trackmania/parser.patch new file mode 100644 index 00000000..150c0b44 --- /dev/null +++ b/scripts/Common/Software/docker/services/trackmania/parser.patch @@ -0,0 +1,11 @@ +--- a/includes/xmlparser.inc.php ++++ b/includes/xmlparser.inc.php +@@ -37,8 +37,6 @@ + else + $this->data = $source; + +- // escape '&' characters +- $this->data = str_replace('&', '', $this->data); + + // parse xml file + $parsed = xml_parse($this->parser, $this->data); diff --git a/scripts/Common/Software/docker/services/trackmania/tmforever-entrypoint.sh b/scripts/Common/Software/docker/services/trackmania/tmforever-entrypoint.sh new file mode 100755 index 00000000..1a74c6a9 --- /dev/null +++ b/scripts/Common/Software/docker/services/trackmania/tmforever-entrypoint.sh @@ -0,0 +1,145 @@ +#!/bin/bash +set -e +configSource="GameData/Config/dedicated_cfg" +configFile="GameData/Config/live_config.xml" +settingsPath="/dedicated" +authLevelsPath="$settingsPath/authorization_levels/level" +accountPath="$settingsPath/masterserver_account" +serverPath="$settingsPath/server_options" +systemPath="$settingsPath/system_config" + +TM_SUPERADMIN_PASSWORD="${TM_SUPERADMIN_PASSWORD:-$(openssl rand -base64 33)}" +TM_ADMIN_PASSWORD="${TM_ADMIN_PASSWORD:-$(openssl rand -base64 33)}" + +echo "Checking whether the server is present…" + +levels=( + TM_SUPERADMIN_PASSWORD 1 + TM_ADMIN_PASSWORD 2 + TM_USER_PASSWORD 3 +) + +accountOption=( + TM_SERVER_USER login + TM_SERVER_PASSWORD password + TM_SERVER_VALIDATION_KEY validation_key +) + +serverOptions=( + TM_TITLE name + TM_COMMENT comment + TM_HIDDEN hide_server + + TM_MAX_PLAYERS max_players + TM_PLAYER_PASSWORD password + + TM_MAX_SPECTATORS max_spectators + TM_SPECTATOR_PASSWORD password_spectator + + TM_LADDER_MODE ladder_mode + TM_LADDER_LIMIT_MIN ladder_serverlimit_min + TM_LADDER_LIMIT_MAX ladder_serverlimit_max + + TM_ENABLE_P2P_UPLOAD enable_p2p_upload + TM_ENABLE_P2P_DOWNLOAD enable_p2p_download + + TM_CALLVOTE_TIMEOUT callvote_timeout + TM_CALLVOTE_RATIO callvote_ratio + + TM_ALLOW_CHALLENGE_DOWNLOAD allow_challenge_download + TM_AUTOSAVE_REPLAYS autosave_replays + TM_AUTOSAVE_VALIDATION_REPLAYS autosave_validation_replays + + TM_REFEREE_PASSWORD referee_password + TM_REFEREE_VALIDATION_MODE referee_validation_mode + + TM_USE_CHANGING_VALIDATION_SEED use_changing_validation_seed +) + +systemOptions=( + TM_BIND_IP bind_ip_address + TM_BIND_PORT server_port + TM_P2P_PORT server_p2p_port + TM_CLIENT_PORT client_port + TM_USE_NAT_UPNP use_nat_upnp + + TM_XMLRPC_PORT xmlrpc_port + TM_XMLRPC_ALLOWED_REMOTE xmlrpc_allowremote + + TM_PACKMASK packmask + + TM_CONNECTION_UPLOADRATE connection_uploadrate + TM_CONNECTION_DOWNLOADRATE connection_downloadrate + + TM_P2P_CACHE_SIZE p2p_cache_size + + TM_BLACKLIST_URL blacklist_url + TM_GUESTLIST_FILENAME guestlist_filename + TM_BLACKLIST_FILENAME blacklist_filename + + TM_ALLOW_SPECTATOR_RELAYS allow_spectator_relays + + TM_USE_PROXY use_proxy + TM_PROXY_LOGIN proxy_login + TM_PROXY_PASSWORD proxy_password +) + +if [[ ! -x "./TrackmaniaServer" ]] || [ ! -f "$configSource".* ]; then + echo "Server not found!" + echo "Downloading TrackMania Forever Dedicated Server…" + file="$(mktemp)" + dir="$(mktemp -d)" + wget http://files2.trackmaniaforever.com/TrackmaniaServer_2011-02-21.zip -O "$file" && unzip -o "$file" -d . +fi + +if [ -f "$configSource.xml" ]; then + cp "$configSource.xml" "$configFile" +elif [ -f "$configSource.txt" ]; then + cp "$configSource.txt" "$configFile" +fi + +for i in $(seq 0 2 $((${#levels[@]} - 1))); do + var="${levels[$i]}" + index="${levels[$(($i + 1))]}" + password="${!var}" + + if [ -n "$password" ]; then + xmlstarlet edit --inplace --update "$authLevelsPath[$index]/password" --value "$password" "$configFile" + fi +done + +for i in $(seq 0 2 $((${#accountOption[@]} - 1))); do + var="${accountOption[$i]}" + option="${accountOption[$(($i + 1))]}" + value="${!var}" + + if [ -n "$value" ]; then + xmlstarlet edit --inplace --update "$accountPath/$option" --value "$value" "$configFile" + fi +done + +for i in $(seq 0 2 $((${#serverOptions[@]} - 1))); do + var="${serverOptions[$i]}" + option="${serverOptions[$(($i + 1))]}" + value="${!var}" + + if [ -n "$value" ]; then + xmlstarlet edit --inplace --update "$serverPath/$option" --value "$value" "$configFile" + fi +done + +for i in $(seq 0 2 $((${#systemOptions[@]} - 1))); do + var="${systemOptions[$i]}" + option="${systemOptions[$(($i + 1))]}" + value="${!var}" + + if [ -n "$value" ]; then + xmlstarlet edit --inplace --update "$systemPath/$option" --value "$value" "$configFile" + fi +done + +if [ -z "$TM_LOG_FILES" ]; then + set -- "$@" /nologs +fi + +unbuffer -p ./TrackmaniaServer /dedicated_cfg="$(basename "$configFile")" /nodaemon $@ diff --git a/scripts/Common/Software/docker/services/trackmania/trackmania.Dockerfile b/scripts/Common/Software/docker/services/trackmania/trackmania.Dockerfile new file mode 100644 index 00000000..99e99a62 --- /dev/null +++ b/scripts/Common/Software/docker/services/trackmania/trackmania.Dockerfile @@ -0,0 +1,78 @@ +FROM debian:11.3 +RUN apt-get update -y \ + && apt-get install -y \ + expect \ + inotify-tools \ + parallel \ + rsync \ + unzip \ + wget \ + xmlstarlet \ + && rm -rf /var/lib/apt/lists/* + +RUN mkdir /app +WORKDIR /app +COPY ./tmforever-entrypoint.sh /usr/local/bin/tmforever-foreground + +ENV \ + TM_BIND_IP="" \ + TM_BIND_PORT="" \ + TM_P2P_PORT="" \ + TM_CLIENT_PORT="" \ + TM_USE_NAT_UPNP="" \ + \ + TM_XMLRPC_PORT="" \ + TM_XMLRPC_ALLOWED_REMOTE="" \ + \ + TM_SERVER_USER="" \ + TM_SERVER_PASSWORD="" \ + TM_SERVER_VALIDATION_KEY="" \ + \ + TM_TITLE="" \ + TM_COMMENT="" \ + TM_HIDDEN="" \ + \ + TM_PACKMASK="" \ + \ + TM_MAX_PLAYERS="" \ + TM_PLAYER_PASSWORD="" \ + \ + TM_MAX_SPECTATORS="" \ + TM_SPECTATOR_PASSWORD="" \ + \ + TM_LADDER_MODE="" \ + TM_LADDER_LIMIT_MIN="" \ + TM_LADDER_LIMIT_MAX="" \ + \ + TM_ENABLE_P2P_UPLOAD="" \ + TM_ENABLE_P2P_DOWNLOAD="" \ + \ + TM_CALLVOTE_TIMEOUT="" \ + TM_CALLVOTE_RATIO="" \ + \ + TM_ALLOW_CHALLENGE_DOWNLOAD="" \ + TM_AUTOSAVE_REPLAYS="" \ + TM_AUTOSAVE_VALIDATION_REPLAYS="" \ + \ + TM_REFEREE_PASSWORD="" \ + TM_REFEREE_VALIDATION_MODE="" \ + \ + TM_USE_CHANGING_VALIDATION_SEED="" \ + \ + TM_SUPERADMIN_PASSWORD="" \ + TM_ADMIN_PASSWORD="" \ + \ + TM_CONNECTION_UPLOADRATE="" \ + TM_CONNECTION_DOWNLOADRATE="" \ + TM_P2P_CACHE_SIZE="" \ + TM_BLACKLIST_URL="" \ + TM_GUESTLIST_FILENAME="" \ + TM_BLACKLIST_FILENAME="" \ + TM_ALLOW_SPECTATOR_RELAYS="" \ + TM_USE_PROXY="" \ + TM_PROXY_LOGIN="" \ + TM_PROXY_PASSWORD="" \ + \ + TM_LOG_FILES="" + +ENTRYPOINT [ "tmforever-foreground" ] diff --git a/scripts/Common/Software/docker/services/trackmania/xaseco-entrypoint.sh b/scripts/Common/Software/docker/services/trackmania/xaseco-entrypoint.sh new file mode 100755 index 00000000..a3b6732c --- /dev/null +++ b/scripts/Common/Software/docker/services/trackmania/xaseco-entrypoint.sh @@ -0,0 +1,155 @@ +#!/bin/bash +export TM_USER="${TM_USER:-SuperAdmin}" +export TM_PASSWORD="${TM_PASSWORD:-$TM_SUPERADMIN_PASSWORD}" +export TM_SERVER_PORT="${TM_SERVER_PORT:-$TM_XMLRPC_PORT}" +export DEDI_USER="${DEDI_USER:-$TM_SERVER_USER}" +export DEDI_PASSWORD="${DEDI_PASSWORD:-$TM_SERVER_PASSWORD}" +overlay="$(mktemp -d)" +upperDir="$overlay/upper" +workDir="$overlay/work" +cache="/cache" +data="/data" +runDir="/opt/xaseco" +entrypoint="$cache/aseco.php" +config="$runDir/config.xml" +dbConfig="$runDir/localdatabase.xml" +dediConfig="$runDir/dedimania.xml" +pluginConfig="$runDir/plugins.xml" +settingsPath="/settings" +serverPath="$settingsPath/tmserver" +pluginTag="plugin" +pluginPath="/aseco_plugins" + +tmOptions=( + TM_SERVER_HOST ip + TM_SERVER_PORT port + TM_USER login + TM_PASSWORD password + TM_TIMEOUT timeout +) + +sqlOptions=( + MYSQL_HOST mysql_server + MYSQL_USER mysql_login + MYSQL_PASSWORD mysql_password + MYSQL_DATABASE mysql_database +) + +dediOptions=( + DEDI_URL url + DEDI_NAME name + DEDI_USER login + DEDI_PASSWORD password + DEDI_NATION nation + DEDI_LOG_NEWS log_news + DEDI_SHOW_MOTD show_welcome +) + +if [ ! -f "$entrypoint" ]; then + file="$(mktemp -u).zip" + root="$(mktemp -d)" + mkdir -p "$(dirname "$file")" + curl -v --insecure https://www.gamers.org/tmn/xaseco_116.zip -o "$file" + unzip -o "$file" -d "$root" + cp -r "$root"/xaseco/* "$cache" +fi + +script="$( + printf "%s\n" \ + 'file="$(basename "$1")";' \ + 'if [[ "$file" == *".php" ]];' \ + ' then dir="includes";' \ + 'else' \ + ' dir=".";' \ + 'fi;' \ + 'if [ ! -f "$0/$dir/$file" ]; then' \ + ' mkdir -p "$0/$dir";' \ + ' cp "$1" "$0/$dir";' \ + 'fi;' +)" + +find "$cache/newinstall" -type f -exec bash -c "$script" "$cache" \{\} \; + +mount -t tmpfs tmpfs "$overlay" +mkdir -p "$upperDir" "$workDir" +mount -t overlay overlay -o lowerdir="$cache:$data",upperdir="$upperDir",workdir="$workDir" "$runDir" +cd "$runDir" + +dos2unix "/root/parser.patch" ./includes/xmlparser.inc.php +patch -p 1 ./includes/xmlparser.inc.php "/root/parser.patch" + +if [ -n "$MASTERADMIN_USER" ]; then + loginTag="tmlogin" + ipTag="ipaddress" + adminPath="$settingsPath/aseco/masteradmins" + nodesPath="$adminPath/*" + namePath="$nodesPath[1]" + ipPath="$nodesPath[2]" + + if [ "$(xmlstarlet select --template -v "count($nodesPath)" "$config")" -lt 1 ]; then + xmlstarlet edit --inplace --subnode "$adminPath" --type elem -n "$loginTag" "$config" + fi + + if [ "$(xmlstarlet select --template -v "count($nodesPath)" "$config")" -lt 2 ] || + [ "$(xmlstarlet select --template -v "name($ipPath)" "$config")" != "$ipTag" ]; then + xmlstarlet edit --inplace --append "$namePath" --type elem -n "$ipTag" "$config" + fi + + xmlstarlet edit --inplace --update "$namePath" --value "$MASTERADMIN_USER" "$config" + + if [ -z "$MASTERADMIN_IP" ]; then + xmlstarlet edit --inplace --delete "$ipPath" "$config" + else + xmlstarlet edit --inplace --update "$ipPath" --value "$MASTERADMIN_IP" "$config" + fi +fi + +for i in $(seq 0 2 $((${#tmOptions[@]} - 1))); do + var="${tmOptions[$i]}" + option="${tmOptions[$(($i + 1))]}" + value="${!var}" + + if [ -n "$value" ]; then + xmlstarlet edit --inplace --update "$serverPath/$option" --value "$value" "$config" + fi +done + +for i in $(seq 0 2 $((${#sqlOptions[@]} - 1))); do + var="${sqlOptions[$i]}" + option="${sqlOptions[$(($i + 1))]}" + value="${!var}" + xmlstarlet edit --inplace --update "$settingsPath/$option" --value "$value" "$dbConfig" +done + +for i in $(seq 0 2 $((${#dediOptions[@]} - 1))); do + var="${dediOptions[$i]}" + option="${dediOptions[$(($i + 1))]}" + value="${!var}" + + if [ -n "$value" ]; then + xmlstarlet edit --inplace --update "/dedimania/masterserver_account/$option" --value "$value" "$dediConfig" + fi +done + +if [ -n "$X1_EXTRA_PLUGINS" ]; then + echo "adding plugins: $X1_EXTRA_PLUGINS" + for plugin in $X1_EXTRA_PLUGINS; do + xmlstarlet edit --inplace --subnode "$pluginPath" --type elem -n "$pluginTag" --value "$plugin" "$pluginConfig" + done +fi + +if [ -n "$X1_DISABLED_PLUGINS" ]; then + for i in $(seq 1 "$(xmlstarlet select --template -v "count($pluginPath/$pluginTag)" "$pluginConfig")"); do + for plugin in $X1_DISABLED_PLUGINS; do + path="$pluginPath/$pluginTag[$i]" + + if [ "$(xmlstarlet select --template -v "$path/text()" "$pluginConfig")" == "$plugin" ]; then + xmlstarlet edit --inplace --delete "$path" "$pluginConfig" + fi + done + done +fi + +if [ "$1" != "download" ]; then + $@ +fi diff --git a/scripts/Common/Software/docker/services/trackmania/xaseco.Dockerfile b/scripts/Common/Software/docker/services/trackmania/xaseco.Dockerfile new file mode 100644 index 00000000..ce0da656 --- /dev/null +++ b/scripts/Common/Software/docker/services/trackmania/xaseco.Dockerfile @@ -0,0 +1,58 @@ +FROM alpine:3.14 AS base +RUN apk add xmlstarlet + +FROM php:5.5-alpine +USER root +RUN apk update \ + && apk add \ + bash \ + unzip \ + ca-certificates \ + # xmlstarlet dependencies + musl \ + libxslt \ + libxml2 +RUN update-ca-certificates +RUN docker-php-ext-install mysql +COPY --from=base /usr/bin/xmlstarlet /usr/bin +COPY ./xaseco-entrypoint.sh /usr/local/bin/xaseco-foreground +COPY ./parser.patch /root/parser.patch +# Server dir +RUN mkdir /cache +# Override dir +RUN mkdir /data +# Merged dir +RUN mkdir -p /opt/xaseco +WORKDIR /opt/xaseco + +ENV \ + MASTERADMIN_USER="" \ + MASTERADMIN_IP="" \ + \ + X1_EXTRA_PLUGINS="" \ + X1_DISABLED_PLUGINS="" \ + \ + TM_SERVER_HOST="" \ + TM_SERVER_PORT="" \ + TM_XMLRPC_PORT="" \ + TM_TIMEOUT="" \ + \ + TM_USER="" \ + TM_PASSWORD="" \ + TM_SUPERADMIN_PASSWORD="" \ + \ + MYSQL_HOST="" \ + MYSQL_USER="" \ + MYSQL_PASSWORD="" \ + MYSQL_DATABASE="" \ + \ + DEDI_URL="" \ + DEDI_NAME="" \ + DEDI_USER="" \ + DEDI_PASSWORD="" \ + DEDI_NATION="" \ + DEDI_LOG_NEWS="" \ + DEDI_SHOW_MOTD="" + +ENTRYPOINT [ "xaseco-foreground" ] +CMD [ "php", "./aseco.php" ]