Compare commits

...

5 Commits

4 changed files with 116 additions and 55 deletions

View File

@@ -1,12 +1,16 @@
FROM ich777/debian-baseimage:bullseye_amd64
FROM ich777/debian-baseimage
LABEL org.opencontainers.image.authors="admin@minenet.at"
LABEL org.opencontainers.image.source="https://github.com/ich777/docker-steamcmd-server"
RUN apt-get update && \
apt-get -y install --no-install-recommends lib32gcc-s1 lib32stdc++6 lib32z1 && \
apt-get -y install --no-install-recommends lib32gcc-s1 lib32stdc++6 lib32z1 screen && \
rm -rf /var/lib/apt/lists/*
RUN wget -O /tmp/gotty.tar.gz https://github.com/yudai/gotty/releases/download/v1.0.1/gotty_linux_amd64.tar.gz && \
tar -C /usr/bin/ -xvf /tmp/gotty.tar.gz && \
rm -rf /tmp/gotty.tar.gz
ENV DATA_DIR="/serverdata"
ENV STEAMCMD_DIR="${DATA_DIR}/steamcmd"
ENV SERVER_DIR="${DATA_DIR}/serverfiles"
@@ -15,11 +19,13 @@ ENV GAME_NAME="template"
ENV GAME_PARAMS="template"
ENV GAME_PORT=27015
ENV VALIDATE=""
ENV GOTTY_PARAMS="-w --title-format SteamLogin"
ENV LOGIN_TIMEOUT=60
ENV UMASK=000
ENV UID=99
ENV GID=100
ENV USERNAME=""
ENV PASSWRD=""
ENV USERNAME="steamuser"
ENV PASSWRD="steampwd"
ENV USER="steam"
ENV DATA_PERM=770

9
scripts/start-gotty.sh Normal file
View File

@@ -0,0 +1,9 @@
#!/bin/bash
TERM=linux gotty ${GOTTY_PARAMS} screen -xS steamcmd &
killpid="$(pgrep screen)"
while true
do
tail --pid=$killpid -f /dev/null
kill "$(pidof gotty)"
exit 0
done

View File

@@ -1,68 +1,100 @@
#!/bin/bash
if [ ! -f ${STEAMCMD_DIR}/steamcmd.sh ]; then
echo "SteamCMD not found!"
wget -q -O ${STEAMCMD_DIR}/steamcmd_linux.tar.gz http://media.steampowered.com/client/steamcmd_linux.tar.gz
tar --directory ${STEAMCMD_DIR} -xvzf /serverdata/steamcmd/steamcmd_linux.tar.gz
rm ${STEAMCMD_DIR}/steamcmd_linux.tar.gz
echo "SteamCMD not found!"
wget -q -O ${STEAMCMD_DIR}/steamcmd_linux.tar.gz http://media.steampowered.com/client/steamcmd_linux.tar.gz
tar --directory ${STEAMCMD_DIR} -xvzf /serverdata/steamcmd/steamcmd_linux.tar.gz
rm ${STEAMCMD_DIR}/steamcmd_linux.tar.gz
fi
echo "---Update SteamCMD---"
if [ "${USERNAME}" == "" ]; then
${STEAMCMD_DIR}/steamcmd.sh \
+login anonymous \
+quit
else
${STEAMCMD_DIR}/steamcmd.sh \
+login ${USERNAME} ${PASSWRD} \
+quit
${STEAMCMD_DIR}/steamcmd.sh \
+login anonymous \
+quit
if [[ ! $LOGIN_TIMEOUT =~ ^[0-9]+$ ]]; then
echo "LOGIN_TIMEOUT must be a integer, putting container into sleep mode!"
sleep infinity
fi
echo "---Update Server---"
if [ "${USERNAME}" == "" ]; then
if [ "${VALIDATE}" == "true" ]; then
echo "---Validating installation---"
${STEAMCMD_DIR}/steamcmd.sh \
+force_install_dir ${SERVER_DIR} \
+login anonymous \
+app_update ${GAME_ID} validate \
+quit
if [ "$LOGIN_TIMEOUT" -gt 0 ]; then
echo "---Update Server---"
if [ "$LOGIN_TIMEOUT" -lt 5 ]; then
echo "LOGIN_TIMEOUT must be greater than 5 seconds, changing to 30!"
LOGIN_TIMEOUT=30
fi
if [ ! -f ~/.screenrc ]; then
echo "defscrollback 30000
bindkey \"^C\" echo 'Blocked. Close this window to exit the terminal.'" > ~/.screenrc
fi
screen -wipe 2&>/dev/null
if [ ! -d ${DATA_DIR}/Steam/logs ]; then
mkdir -p ${DATA_DIR}/Steam/logs
elif [ -f ${DATA_DIR}/Steam/logs/steamcmd.log ]; then
rm -f ${DATA_DIR}/Steam/logs/steamcmd.log
fi
screen -S steamcmd -L -Logfile ${DATA_DIR}/Steam/logs/steamcmd.log -d -m \
${STEAMCMD_DIR}/steamcmd.sh \
+force_install_dir ${SERVER_DIR} \
+login ${USERNAME} ${PASSWRD} \
+app_update ${GAME_ID} \
+quit
sleep 1
/opt/scripts/start-gotty.sh >/dev/null 2>&1 &
echo "+----------------------------------------------------------------------"
echo "| Please connect to the built in SteamCMD web console (not the Docker"
echo "| console) and enter your 2FA token if you have SteamGuard enabled."
echo "|"
echo "| You can close the SteamCMD web console after entering the 2FA token."
echo "+----------------------------------------------------------------------"
echo
echo "Waiting $LOGIN_TIMEOUT seconds for login..."
echo
ELAPSED_TIME=0
while [ $ELAPSED_TIME -lt $LOGIN_TIMEOUT ]; do
if grep -q "Waiting for user info...OK" ${DATA_DIR}/Steam/logs/steamcmd.log; then
echo "Login successfull, continuing, please wait..."
sed -i 's/^Two-factor code:.*/Two-factor code:\*HIDDEN\*/' ${DATA_DIR}/Steam/logs/steamcmd.log
/opt/scripts/start-tail.sh
rm -f ${DATA_DIR}/Steam/logs/steamcmd.log
screen -wipe 2&>/dev/null
LOGINOK="true"
break
else
${STEAMCMD_DIR}/steamcmd.sh \
+force_install_dir ${SERVER_DIR} \
+login anonymous \
+app_update ${GAME_ID} \
+quit
sleep 2
((ELAPSED_TIME += 2))
fi
done
if [ "$LOGINOK" != "true" ]; then
echo "Login Failed after $LOGIN_TIMEOUT seconds, continuing..."
kill -SIGKILL $(pgrep screen) >/dev/null 2>&1
kill -SIGKILL $(pidof gotty) >/dev/null 2>&1
sed -i 's/^Two-factor code:.*/Two-factor code:\*HIDDEN\*/' ${DATA_DIR}/Steam/logs/steamcmd.log
cat ${DATA_DIR}/Steam/logs/steamcmd.log
rm -f ${DATA_DIR}/Steam/logs/steamcmd.log >/dev/null 2>&1
screen -wipe 2&>/dev/null
fi
else
if [ "${VALIDATE}" == "true" ]; then
echo "---Validating installation---"
${STEAMCMD_DIR}/steamcmd.sh \
+force_install_dir ${SERVER_DIR} \
+login ${USERNAME} ${PASSWRD} \
+app_update ${GAME_ID} validate \
+quit
else
${STEAMCMD_DIR}/steamcmd.sh \
+force_install_dir ${SERVER_DIR} \
+login ${USERNAME} ${PASSWRD} \
+app_update ${GAME_ID} \
+quit
fi
echo "LOGIN_TIMEOUT set to 0, Update Server skipped!"
fi
export USERNAME="secret"
export PASSWRD="secret"
echo "---Prepare Server---"
if [ ! -f ${DATA_DIR}/.steam/sdk32/steamclient.so ]; then
if [ ! -d ${DATA_DIR}/.steam ]; then
mkdir ${DATA_DIR}/.steam
fi
if [ ! -d ${DATA_DIR}/.steam/sdk32 ]; then
mkdir ${DATA_DIR}/.steam/sdk32
fi
cp -R ${STEAMCMD_DIR}/linux32/* ${DATA_DIR}/.steam/sdk32/
fi
chmod -R ${DATA_PERM} ${DATA_DIR}
echo "---Server ready---"
echo "---Start Server---"
cd ${SERVER_DIR}
${SERVER_DIR}/srcds_run -game ${GAME_NAME} ${GAME_PARAMS} -console +port ${GAME_PORT}
echo
echo "---Putting container into sleep mode zZzZzZzZz---"
sleep infinity

14
scripts/start-tail.sh Normal file
View File

@@ -0,0 +1,14 @@
#!/bin/bash
tail -n 100 -f ${DATA_DIR}/Steam/logs/steamcmd.log
sleep 5
killpid="$(pidof gotty)"
while true
do
if [ -z "$killpid" ]; then
kill $(pidof tail)
exit 0
fi
tail --pid=$killpid -f /dev/null
kill $(pidof tail)
exit 0
done