Fix like everything

This commit is contained in:
Philipp 2026-07-11 20:17:35 +02:00
commit d42728b727
Signed by: Philipp
GPG key ID: B27C3DE2FD94AFC3
12 changed files with 365 additions and 97 deletions

View file

@ -1,16 +0,0 @@
---
steps:
- name: tf2-dm
image: woodpeckerci/plugin-docker-buildx
settings:
registry: git.snrd.eu
repo: git.snrd.eu/spenny.tf/dm-server
cache_from: "git.snrd.eu/spenny.tf/dm-server:latest"
auto_tag: true
context: ./
dockerfile: ./Dockerfile
username:
from_secret: gitea_username
password:
from_secret: gitea_token

View file

@ -13,7 +13,7 @@ concurrency:
env:
USERNAME: spaenny
REGISTRY: git.snrd.eu
IMAGE_NAME: spenny.tf/dm-server
IMAGE_NAME: spenny.tf/tf2-dm
jobs:
docker:
@ -52,4 +52,4 @@ jobs:
labels: ${{ steps.meta.outputs.labels }}
provenance: false
sbom: false
sbom: false

View file

@ -1,20 +0,0 @@
---
kind: pipeline
type: docker
name: build-docker
steps:
- name: tf2-dm
image: plugins/docker
settings:
registry: git.snrd.eu
repo: git.snrd.eu/spenny.tf/dm-server
cache_from: "git.snrd.eu/spenny.tf/dm-server:latest"
auto_tag: true
context: ./
dockerfile: ./Dockerfile
username:
from_secret: gitea_username
password:
from_secret: gitea_token

View file

@ -1,59 +1,233 @@
FROM ghcr.io/melkortf/tf2-dm:latest
LABEL maintainer="philipp@boehm.sh"
############################
# Build rcon
############################
FROM ubuntu:22.04 AS rcon-build
WORKDIR /build
RUN export DEBIAN_FRONTEND=noninteractive \
&& export TZ=Etc/UTC \
&& apt-get update \
&& apt-get install -y \
build-essential \
git \
cmake \
check \
pkg-config \
libglib2.0-dev \
libbsd-dev \
&& rm -rf /var/lib/apt/lists/* \
&& git clone https://github.com/n0la/rcon.git \
&& mkdir rcon/build \
&& cd rcon/build \
&& cmake .. \
&& make
############################
# Download MetaMod + SourceMod + Plugins
############################
FROM ubuntu:22.04 AS plugins
SHELL ["/bin/bash","-c"]
RUN export DEBIAN_FRONTEND=noninteractive \
&& export TZ=Etc/UTC \
&& apt-get update \
&& apt-get install -y --no-install-recommends unzip tar \
&& rm -rf /var/lib/apt/lists/*
WORKDIR /download
ARG INSTALL_DIR=/server/tf
RUN mkdir -p "${INSTALL_DIR}"
# ---------- MetaMod ----------
ARG METAMOD_VERSION=1.12.0-git1224
ARG METAMOD_RELEASE_TAG=1.12.0.1224
ARG METAMOD_FILE_NAME=mmsource-${METAMOD_VERSION}-linux.tar.gz
ARG METAMOD_URL=https://github.com/alliedmodders/metamod-source/releases/download/${METAMOD_RELEASE_TAG}/${METAMOD_FILE_NAME}
ARG METAMOD_CHECKSUM=004431fd1423fe2b07a8369ceb4214caa53ffee06fca7cc779f2d1d8cb934620
ADD --checksum=sha256:${METAMOD_CHECKSUM} ${METAMOD_URL} .
RUN tar xf "${METAMOD_FILE_NAME}" -C "${INSTALL_DIR}/"
# ---------- SourceMod ----------
ARG SOURCEMOD_VERSION=1.12.0-git7236
ARG SOURCEMOD_RELEASE_TAG=1.12.0.7236
ARG SOURCEMOD_FILE_NAME=sourcemod-${SOURCEMOD_VERSION}-linux.tar.gz
ARG SOURCEMOD_URL=https://github.com/alliedmodders/sourcemod/releases/download/${SOURCEMOD_RELEASE_TAG}/${SOURCEMOD_FILE_NAME}
ARG SOURCEMOD_CHECKSUM=db357f27ea405720fa8ecd818fefe23db075973a506ba045307f03ba31d508ab
ADD --checksum=sha256:${SOURCEMOD_CHECKSUM} ${SOURCEMOD_URL} .
RUN tar xf "${SOURCEMOD_FILE_NAME}" -C "${INSTALL_DIR}/"
# ---------- SOAP-TF2DM ----------
ARG SOAP_DM_FILE_NAME=soap.zip
ARG SOAP_DM_VERSION=4.4.8
ARG SOAP_DM_URL=https://github.com/sapphonie/SOAP-TF2DM/releases/download/v${SOAP_DM_VERSION}/${SOAP_DM_FILE_NAME}
ARG SOAP_DM_CHECKSUM=86d118708e887643e10ae97eca278f4c4e1ecbb6ad9225a8f013a6f68f08fd2e
ADD --checksum=sha256:${SOAP_DM_CHECKSUM} ${SOAP_DM_URL} .
RUN unzip -q "${SOAP_DM_FILE_NAME}" -d "${INSTALL_DIR}/"
# ---------- TF2 Comp Fixes ----------
ARG COMP_FIXES_FILE_NAME=tf2-comp-fixes.zip
ARG COMP_FIXES_VERSION=1.18.1
ARG COMP_FIXES_URL=https://github.com/ldesgoui/tf2-comp-fixes/releases/download/v${COMP_FIXES_VERSION}/${COMP_FIXES_FILE_NAME}
ARG COMP_FIXES_CHECKSUM=781cc48e13aa896f4856fa80d78a6aaaffc221c20e7fa627c40ddc9cc71c3614
ADD --checksum=sha256:${COMP_FIXES_CHECKSUM} ${COMP_FIXES_URL} .
RUN unzip -q -o "${COMP_FIXES_FILE_NAME}" -d "${INSTALL_DIR}/"
# ---------- SourceBans++ ----------
ARG SOURCEBANS_VERSION=2.0.0
ARG SOURCEBANS_FILE_NAME=sourcebans-pp-${SOURCEBANS_VERSION}.plugin-only.tar.gz
ARG SOURCEBANS_URL=https://github.com/sbpp/sourcebans-pp/releases/download/${SOURCEBANS_VERSION}/${SOURCEBANS_FILE_NAME}
ARG SOURCEBANS_CHECKSUM=b5ce9c417c6c6efde01a1850114d3eb7ef8aec1f52e088a5382d5aa0cd85ca39
ADD --checksum=sha256:${SOURCEBANS_CHECKSUM} ${SOURCEBANS_URL} .
RUN tar xf "${SOURCEBANS_FILE_NAME}" -C "${INSTALL_DIR}/"
# ---------- TF2Rue ----------
ARG TF2RUE_FILE_NAME=tf2rue.zip
ARG TF2RUE_VERSION=v0.0.13
ARG TF2RUE_URL=https://github.com/sapphonie/tf2rue/releases/download/${TF2RUE_VERSION}/${TF2RUE_FILE_NAME}
ARG TF2RUE_CHECKSUM=670f228f287bb55c4418ff8241032582189621a944a420f42ddae9db6754b6cd
ADD --checksum=sha256:${TF2RUE_CHECKSUM} ${TF2RUE_URL} .
RUN unzip -q -n "${TF2RUE_FILE_NAME}" -d "${INSTALL_DIR}/addons/sourcemod/"
# ---------- AFK Manager ----------
ARG AFK_MANAGER_FILE_NAME=afk_manager4.smx
ARG AFK_MANAGER_URL=https://www.sourcemod.net/vbcompiler.php?file_id=170330
ARG AFK_MANAGER_CHECKSUM=cd41cf4195f8e54c579ed4fe730457a5c81f8007478ff9cd75b9659f8859c22b
ADD --checksum=sha256:${AFK_MANAGER_CHECKSUM} ${AFK_MANAGER_URL} "${INSTALL_DIR}/addons/sourcemod/plugins/${AFK_MANAGER_FILE_NAME}"
# ---------- Class Restrict ----------
ARG CLASS_RESTRICT_FILE_NAME=classrestrict.smx
ARG CLASS_RESTRICT_URL=https://www.sourcemod.net/vbcompiler.php?file_id=27957
ARG CLASS_RESTRICT_CHECKSUM=bce83fef7c80f66f0d1a102433aebdd5201d8ef2e3e5ea4442d1fe30f84938e9
ADD --checksum=sha256:${CLASS_RESTRICT_CHECKSUM} ${CLASS_RESTRICT_URL} "${INSTALL_DIR}/addons/sourcemod/plugins/${CLASS_RESTRICT_FILE_NAME}"
ARG METAMOD_VERSION_MAJOR=2
ARG METAMOD_VERSION_MINOR=0
ARG METAMOD_VERSION_PATCH=0
ARG METAMOD_VERSION_BUILD=1331
ARG METAMOD_VERSION=${METAMOD_VERSION_MAJOR}.${METAMOD_VERSION_MINOR}.${METAMOD_VERSION_PATCH}-git${METAMOD_VERSION_BUILD}
ARG METAMOD_TARBALL_FILE_NAME=mmsource-${METAMOD_VERSION}-linux.tar.gz
ARG METAMOD_TARBALL_URL=https://mms.alliedmods.net/mmsdrop/${METAMOD_VERSION_MAJOR}.${METAMOD_VERSION_MINOR}/${METAMOD_TARBALL_FILE_NAME}
# ---------- System2 ----------
ARG SYSTEM2_URL=https://github.com/dordnung/System2/releases/download/v3.3.2/system2.zip
ADD ${SYSTEM2_URL} system2.zip
RUN unzip -q -o system2.zip -d "${INSTALL_DIR}/addons/sourcemod/" && rm system2.zip
ARG SOURCEMOD_VERSION_MAJOR=1
ARG SOURCEMOD_VERSION_MINOR=13
ARG SOURCEMOD_VERSION_PATCH=0
ARG SOURCEMOD_VERSION_BUILD=7211
ARG SOURCEMOD_VERSION=${SOURCEMOD_VERSION_MAJOR}.${SOURCEMOD_VERSION_MINOR}.${SOURCEMOD_VERSION_PATCH}-git${SOURCEMOD_VERSION_BUILD}
ARG SOURCEMOD_TARBALL_FILE_NAME=sourcemod-${SOURCEMOD_VERSION}-linux.tar.gz
ARG SOURCEMOD_TARBALL_URL=https://sm.alliedmods.net/smdrop/${SOURCEMOD_VERSION_MAJOR}.${SOURCEMOD_VERSION_MINOR}/${SOURCEMOD_TARBALL_FILE_NAME}
# ---------- StAC ----------
ARG STAC_URL=https://github.com/sapphonie/StAC-tf2/releases/download/v6.3.8/stac.zip
ADD ${STAC_URL} stac.zip
RUN unzip -q -o stac.zip -d "${INSTALL_DIR}/addons/sourcemod/" && rm stac.zip
RUN \
wget -nv "${METAMOD_TARBALL_URL}" \
&& wget -nv "${SOURCEMOD_TARBALL_URL}" \
&& tar xf "${METAMOD_TARBALL_FILE_NAME}" -C "${SERVER_DIR}/tf" \
&& tar xf "${SOURCEMOD_TARBALL_FILE_NAME}" -C "${SERVER_DIR}/tf" \
&& rm "${METAMOD_TARBALL_FILE_NAME}" \
&& rm "${SOURCEMOD_TARBALL_FILE_NAME}" \
# download plugins
&& wget -nv "https://github.com/dordnung/System2/releases/download/v3.3.2/system2.zip" -O system2.zip \
&& wget -nv "https://github.com/sapphonie/StAC-tf2/releases/download/v6.3.8/stac.zip" -O stac.zip \
&& wget -nv "https://github.com/sapphonie/sourcemod-nativevotes-updated/releases/download/workflow-build63/nativevotes_sm_1.11.zip" -O nativevotes.zip \
&& wget -nv "https://github.com/ErikMinekus/sm-advertisements/releases/download/2.1.1/release.tar.gz" -O advertisements.tar.gz \
&& wget -nv "http://users.alliedmods.net/~kyles/builds/SteamWorks/SteamWorks-git132-linux.tar.gz" -O SteamWorks.tar.gz \
&& wget -nv "https://gitlab.com/Zipcore/Discord/-/raw/master/plugins/discord.smx" -O discord.smx \
&& wget -nv "https://gitlab.com/Zipcore/Discord/-/raw/master/plugins/discord_sourcebans.smx" -O discord_sourcebans.smx \
&& wget -nv "https://gitlab.com/Zipcore/Discord/-/raw/master/plugins/discord_sourcecomms.smx" -O discord_sourcecomms.smx \
&& wget -nv "https://github.com/eaasye/soapbalancer/raw/master/soapbalancer.smx" -O soapbalancer.smx \
&& wget -nv "https://github.com/JoinedSenses/sm-ext-socket/releases/download/v0.2/socket.ext.so" -O socket.ext.so \
&& wget -nv "https://github.com/sapphonie/tf2rue/releases/download/v0.0.13/tf2rue.zip" -O tf2rue.zip \
# install plugins
&& unzip -o system2.zip -d "${SERVER_DIR}/tf/addons/sourcemod/" \
&& unzip -o stac.zip -d "${SERVER_DIR}/tf/addons/sourcemod/" \
&& unzip -o nativevotes.zip -d "${SERVER_DIR}/tf/" \
&& unzip -o tf2rue.zip -d "${SERVER_DIR}/tf/addons/sourcemod/" \
&& tar xf advertisements.tar.gz -C "${SERVER_DIR}/tf/" \
&& tar xf SteamWorks.tar.gz -C "${SERVER_DIR}/tf/" \
&& mv discord.smx "${SERVER_DIR}/tf/addons/sourcemod/plugins/discord.smx" \
&& mv discord_sourcebans.smx "${SERVER_DIR}/tf/addons/sourcemod/plugins/discord_sourcebans.smx" \
&& mv discord_sourcecomms.smx "${SERVER_DIR}/tf/addons/sourcemod/plugins/discord_sourcecomms.smx" \
&& mv soapbalancer.smx "${SERVER_DIR}/tf/addons/sourcemod/plugins/soapbalancer.smx" \
&& mv socket.ext.so "${SERVER_DIR}/tf/addons/sourcemod/extensions/" \
# clean everything up
&& rm "${SERVER_DIR}/tf/addons/sourcemod/plugins/admin-flatfile.smx" "system2.zip" "stac.zip" "nativevotes.zip" "tf2rue.zip"
# ---------- NativeVotes ----------
ARG NATIVEVOTES_URL=https://github.com/sapphonie/sourcemod-nativevotes-updated/releases/download/workflow-build63/nativevotes_sm_1.11.zip
ADD ${NATIVEVOTES_URL} nativevotes.zip
RUN unzip -q -o nativevotes.zip -d "${INSTALL_DIR}/" && rm nativevotes.zip
COPY server.cfg.template "${SERVER_DIR}/tf/cfg/server.cfg.template"
COPY mapcycle.txt "${SERVER_DIR}/tf/cfg/mapcycle.txt"
COPY motd.txt "${SERVER_DIR}/tf/cfg/motd.txt"
# ---------- Advertisements ----------
ARG ADVERTISEMENTS_URL=https://github.com/ErikMinekus/sm-advertisements/releases/download/2.1.1/release.tar.gz
ADD ${ADVERTISEMENTS_URL} advertisements.tar.gz
RUN tar xf advertisements.tar.gz -C "${INSTALL_DIR}/" && rm advertisements.tar.gz
CMD ["+sv_pure", "2", "+map", "cp_snakewater_final1", "+maxplayers", "8"]
# ---------- SteamWorks ----------
ARG STEAMWORKS_URL=http://users.alliedmods.net/~kyles/builds/SteamWorks/SteamWorks-git132-linux.tar.gz
ADD ${STEAMWORKS_URL} SteamWorks.tar.gz
RUN tar xf SteamWorks.tar.gz -C "${INSTALL_DIR}/" && rm SteamWorks.tar.gz
# ---------- Discord Plugins ----------
ADD https://gitlab.com/Zipcore/Discord/-/raw/master/plugins/discord.smx ${INSTALL_DIR}/addons/sourcemod/plugins/discord.smx
ADD https://gitlab.com/Zipcore/Discord/-/raw/master/plugins/discord_sourcebans.smx ${INSTALL_DIR}/addons/sourcemod/plugins/discord_sourcebans.smx
ADD https://gitlab.com/Zipcore/Discord/-/raw/master/plugins/discord_sourcecomms.smx ${INSTALL_DIR}/addons/sourcemod/plugins/discord_sourcecomms.smx
# ---------- SoapBalancer ----------
ADD https://github.com/eaasye/soapbalancer/raw/master/soapbalancer.smx ${INSTALL_DIR}/addons/sourcemod/plugins/soapbalancer.smx
# ---------- Socket Extension ----------
ADD https://github.com/JoinedSenses/sm-ext-socket/releases/download/v0.2/socket.ext.so ${INSTALL_DIR}/addons/sourcemod/extensions/socket.ext.so
RUN rm -f "${INSTALL_DIR}/addons/sourcemod/plugins/admin-flatfile.smx"
############################
# Final image
############################
FROM steamcmd/steamcmd:ubuntu-22
LABEL maintainer="garrappachc@gmail.com"
RUN export DEBIAN_FRONTEND=noninteractive \
&& export TZ=Etc/UTC \
&& dpkg --add-architecture i386 \
&& apt-get update \
&& apt-get install -y software-properties-common \
&& add-apt-repository multiverse \
&& apt-get update \
&& apt-get install -y --no-install-recommends \
lib32gcc-s1 lib32z1 libncurses5:i386 libbz2-1.0:i386 \
lib32stdc++6 libtinfo5:i386 libcurl3-gnutls:i386 \
wget unzip gettext-base libbsd0 \
&& rm -rf /var/lib/apt/lists/*
ARG USER=tf2
ARG HOME=/home/${USER}
ARG SERVER_DIR=${HOME}/server
ARG APP_ID=232250
ENV USER=${USER} HOME=${HOME} SERVER_DIR=${SERVER_DIR} APP_ID=${APP_ID} SRCDS_EXEC=srcds_run
RUN useradd --home-dir ${HOME} --create-home --shell /bin/bash ${USER}
USER ${USER}
WORKDIR ${HOME}
COPY misc/maps_to_keep misc/tf2.txt.template ./
COPY --chmod=775 utils/install_tf2.sh ./
RUN envsubst < tf2.txt.template > tf2.txt \
&& steamcmd +help +quit \
&& ./install_tf2.sh \
&& find ${SERVER_DIR}/tf/maps -type f | grep -v "$(cat maps_to_keep)" | xargs -r rm -rf \
&& rm maps_to_keep \
&& mkdir -p ~/.steam \
&& ln -s ~/.local/share/Steam/steamcmd/linux32 ~/.steam/sdk32
ARG TICKRATE_FILE_NAME=css-tickrate-release-linux-x86.zip
ARG TICKRATE_VERSION=1.4.5
ARG TICKRATE_URL=https://github.com/angelfor3v3r/source-tickrate/releases/download/v${TICKRATE_VERSION}/${TICKRATE_FILE_NAME}
ARG TICKRATE_CHECKSUM=661145ad08af61ad0327586ed56e820e7f178665c92ffa95b8891cd1a3d38f7e
ADD --chown=tf2:tf2 --checksum=sha256:${TICKRATE_CHECKSUM} ${TICKRATE_URL} ${TICKRATE_FILE_NAME}
RUN unzip -qo "${TICKRATE_FILE_NAME}" -d "${SERVER_DIR}/tf" \
&& rm "${TICKRATE_FILE_NAME}"
COPY --from=plugins --chown=tf2:tf2 /server/tf/ ${SERVER_DIR}/tf/
COPY --from=rcon-build /build/rcon/build/rcon ${SERVER_DIR}/rcon
RUN mkdir -p "${SERVER_DIR}/tf/addons/sourcemod/plugins/disabled" \
&& mv "${SERVER_DIR}/tf/addons/sourcemod/plugins/funcommands.smx" "${SERVER_DIR}/tf/addons/sourcemod/plugins/disabled/" || true \
&& mv "${SERVER_DIR}/tf/addons/sourcemod/plugins/funvotes.smx" "${SERVER_DIR}/tf/addons/sourcemod/plugins/disabled/" || true
COPY misc/server.cfg.template ${SERVER_DIR}/tf/cfg/server.cfg.template
COPY soap_tf2dm.cfg ${SERVER_DIR}/tf/cfg/sourcemod/
COPY misc/mapcycle.txt ${SERVER_DIR}/tf/cfg/mapcycle.txt
COPY misc/motd.txt ${SERVER_DIR}/tf/cfg/motd.txt
COPY afk_manager.cfg ${SERVER_DIR}/tf/cfg/sourcemod/
COPY custom_whitelist_11769.txt ${SERVER_DIR}/tf/cfg/
COPY afk_manager.phrases.txt ${SERVER_DIR}/tf/addons/sourcemod/translations/
COPY --chmod=755 utils/entrypoint.sh .
COPY utils/healthcheck.sh .
ENV IP=0.0.0.0 PORT=27015 CLIENT_PORT=27016 STEAM_PORT=27018 STV_PORT=27020
ENV SERVER_TOKEN="" ENABLE_FAKE_IP=0
ENV RCON_PASSWORD=123456
ENV SERVER_HOSTNAME="A Team Fortress 2 server"
ENV SERVER_PASSWORD=""
ENV STV_NAME="Source TV"
ENV STV_TITLE="A Team Fortress 2 server Source TV"
ENV STV_PASSWORD=""
ENV DOWNLOAD_URL="https://fastdl.serveme.tf/"
WORKDIR ${SERVER_DIR}
ENTRYPOINT ["./entrypoint.sh"]
CMD ["+sv_pure","2","+map","cp_snakewater_final1","+maxplayers","8"]
EXPOSE 27015/tcp
EXPOSE 27015/udp
EXPOSE 27020/udp
HEALTHCHECK --interval=30s --timeout=30s --start-period=20s --retries=3 CMD ["./healthcheck.sh"]

1
misc/maps_to_keep Normal file
View file

@ -0,0 +1 @@
cp_badlands

6
misc/tf2.txt.template Normal file
View file

@ -0,0 +1,6 @@
@ShutdownOnFailedCommand 1
@NoPromptForPassword 1
force_install_dir ${SERVER_DIR}
login anonymous
app_update ${APP_ID}
quit

82
utils/entrypoint.sh Normal file
View file

@ -0,0 +1,82 @@
#!/bin/bash
auto_envsubst() {
local template_dir="${SERVER_DIR}/tf/cfg"
local suffix=".template"
find "$template_dir" -follow -type f -name "*$suffix" -print | while read -r template; do
output_file="${template%$suffix}"
envsubst < "${template}" > "${output_file}"
done
}
faketty() {
# https://stackoverflow.com/questions/1401002/how-to-trick-an-application-into-thinking-its-stdout-is-a-terminal-not-a-pipe/60279429#60279429
tmp=$(mktemp)
[ "$tmp" ] || return 99
cmd="$(printf '%q ' "$@")"'; echo $? > '$tmp
script -qfc "/bin/sh -c $(printf "%q " "$cmd")" /dev/null
[ -s $tmp ] || return 99
err=$(cat $tmp)
rm -f $tmp
return $err
}
quit() {
echo "*** Stopping ***"
"${SERVER_DIR}/rcon" -H ${IP/0.0.0.0/127.0.0.1} -p ${PORT} -P ${RCON_PASSWORD} quit
sleep 5
exit 0
}
trap 'quit' SIGTERM
auto_envsubst
TICKRATE_FLAGS=()
if [ -n "${TICKRATE}" ]; then
case "${TICKRATE}" in
100)
echo "[Tickrate-Selector] Setting High-Performance 100 Tickrate mode..."
TICKRATE_FLAGS=("-tickrate" "100" "+sv_maxupdaterate" "100" "+sv_minupdaterate" "100" "+sv_maxcmdrate" "100" "+sv_mincmdrate" "100")
;;
133)
echo "[Tickrate-Selector] Setting Competitive 133 Tickrate mode..."
TICKRATE_FLAGS=("-tickrate" "133" "+sv_maxupdaterate" "133" "+sv_minupdaterate" "133" "+sv_maxcmdrate" "133" "+sv_mincmdrate" "133")
;;
200)
echo "[Tickrate-Selector] WARNING: Setting EXTREME 200 Tickrate mode. Ensure CPU can handle this!"
TICKRATE_FLAGS=("-tickrate" "200" "+sv_maxupdaterate" "200" "+sv_minupdaterate" "200" "+sv_maxcmdrate" "200" "+sv_mincmdrate" "200")
;;
*)
echo "[Tickrate-Selector] Unknown TICKRATE='${TICKRATE}'. Falling back to default engine settings."
;;
esac
else
echo "[Tickrate-Selector] TICKRATE variable is not set. Using default 66.7 tickrate."
fi
# enablefakeip switch
if [ "$ENABLE_FAKE_IP" = "1" ]; then
FAKE_IP_FLAG="-enablefakeip"
else
FAKE_IP_FLAG=""
fi
faketty $SERVER_DIR/$SRCDS_EXEC \
-game tf \
-secured \
$FAKE_IP_FLAG \
"${TICKRATE_FLAGS[@]}" \
-steam_dir ${HOME}/.steam/steamcmd \
-steamcmd_script ${HOME}/tf2.txt \
-autoupdate \
+sv_setsteamaccount ${SERVER_TOKEN} \
-ip ${IP} \
-port ${PORT} \
+clientport ${CLIENT_PORT} \
-steamport ${STEAM_PORT} \
+tv_port ${STV_PORT} \
-strictportbind \
-norestart \
$@ & wait ${!}

18
utils/healthcheck.sh Executable file
View file

@ -0,0 +1,18 @@
#!/bin/bash
status="$("${SERVER_DIR}/rcon" -H ${IP/0.0.0.0/127.0.0.1} -p ${PORT} -P ${RCON_PASSWORD} status)" || exit $?
# extract hostname
if [[ $status =~ hostname:[[:space:]](.+)[[:space:]]version[[:space:]]:[[:space:]] ]]; then
echo "hostname: ${BASH_REMATCH[1]}"
fi
# extract map
if [[ $status =~ map[[:space:]]+:[[:space:]]([a-zA-Z0-9_]+) ]]; then
echo "map: ${BASH_REMATCH[1]}"
fi
# extract player count
if [[ $status =~ players[[:space:]]:[[:space:]]([0-9]+)[[:space:]]humans,[[:space:]][0-9]+[[:space:]]bots[[:space:]]\(([0-9]+)[[:space:]]max\) ]]; then
echo "players: ${BASH_REMATCH[1]}/${BASH_REMATCH[2]}"
fi

23
utils/install_tf2.sh Normal file
View file

@ -0,0 +1,23 @@
#!/bin/bash
set -e
# Steamcmd intermittently throws a "Missing configuration" error when trying to update TF2.
# This retry mechanism is a temporary solution to try to workaround that problem.
max_retries=3
retry_count=0
while [ $retry_count -lt $max_retries ]; do
if steamcmd +runscript "$HOME/tf2.txt"; then
exit 0
fi
retry_count=$((retry_count + 1))
if [ $retry_count -lt $max_retries ]; then
echo "Steamcmd failed. Retrying ($retry_count/$max_retries)..."
sleep 5
fi
done
echo "Failed to install TF2 after $max_retries attempts"
exit 1