Files
docker-steamcmd-server/scripts/start-server.sh

100 lines
3.1 KiB
Bash

#!/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
fi
echo "---Update SteamCMD---"
${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
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
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
echo "LOGIN_TIMEOUT set to 0, Update Server skipped!"
fi
export USERNAME="secret"
export PASSWRD="secret"
echo "---Prepare Server---"
chmod -R ${DATA_PERM} ${DATA_DIR}
echo "---Server ready---"
echo "---Start Server---"
echo
echo "---Putting container into sleep mode zZzZzZzZz---"
sleep infinity