commit 46cd17b8f64ef518f1d03363b19f503f5d4b7ddf Author: fithwum Date: Thu Nov 16 09:00:13 2023 -0800 first commit diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..83ffe15 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,37 @@ +FROM ich777/debian-baseimage:bullseye_amd64 + +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 && \ + rm -rf /var/lib/apt/lists/* + +ENV DATA_DIR="/serverdata" +ENV STEAMCMD_DIR="${DATA_DIR}/steamcmd" +ENV SERVER_DIR="${DATA_DIR}/serverfiles" +ENV GAME_ID="template" +ENV GAME_NAME="template" +ENV GAME_PARAMS="template" +ENV GAME_PORT=27015 +ENV VALIDATE="" +ENV UMASK=000 +ENV UID=99 +ENV GID=100 +ENV USERNAME="" +ENV PASSWRD="" +ENV USER="steam" +ENV DATA_PERM=770 + +RUN mkdir $DATA_DIR && \ + mkdir $STEAMCMD_DIR && \ + mkdir $SERVER_DIR && \ + useradd -d $DATA_DIR -s /bin/bash $USER && \ + chown -R $USER $DATA_DIR && \ + ulimit -n 2048 + +ADD /scripts/ /opt/scripts/ +RUN chmod -R 770 /opt/scripts/ + +#Server Start +ENTRYPOINT ["/opt/scripts/start.sh"] diff --git a/README.md b/README.md new file mode 100644 index 0000000..f3ee46c --- /dev/null +++ b/README.md @@ -0,0 +1,40 @@ +# SteamCMD in Docker optimized for Unraid +This Docker will download and install SteamCMD and the according game that is pulled via specifying the Tag. + +**Please see the different Tags/Branches which games are available.** + +## Example Env params for CS:Source +| Name | Value | Example | +| --- | --- | --- | +| STEAMCMD_DIR | Folder for SteamCMD | /serverdata/steamcmd | +| SERVER_DIR | Folder for gamefile | /serverdata/serverfiles | +| GAME_ID | The GAME_ID that the container downloads at startup. If you want to install a static or beta version of the game change the value to: '232330 -beta YOURBRANCH' (without quotes, replace YOURBRANCH with the branch or version you want to install). | 232330 | +| GAME_NAME | SRCDS gamename | cstrike | +| GAME_PARAMS | Values to start the server | -secure +maxplayers 32 +map de_dust2 | +| UID | User Identifier | 99 | +| GID | Group Identifier | 100 | +| GAME_PORT | Port the server will be running on | 27015 | +| VALIDATE | Validates the game data | blank | +| USERNAME | Leave blank for anonymous login | blank | +| PASSWRD | Leave blank for anonymous login | blank | + +## Run example for CS:Source +``` +docker run --name CSSource -d \ + -p 27015:27015 -p 27015:27015/udp \ + --env 'GAME_ID=232330' \ + --env 'GAME_NAME=cstrike' \ + --env 'GAME_PORT=27015' \ + --env 'GAME_PARAMS=-secure +maxplayers 32 +map de_dust2' \ + --env 'UID=99' \ + --env 'GID=100' \ + --volume /path/to/steamcmd:/serverdata/steamcmd \ + --volume /path/to/cstrikesource:/serverdata/serverfiles \ + ich777/steamcmd:latest +``` + +This Docker was mainly edited for better use with Unraid, if you don't use Unraid you should definitely try it! + +This Docker is forked from mattieserver, thank you for this wonderfull Docker. + +#### Support Thread: https://forums.unraid.net/topic/79530-support-ich777-gameserver-dockers/ \ No newline at end of file diff --git a/scripts/start-server.sh b/scripts/start-server.sh new file mode 100644 index 0000000..b0b2c50 --- /dev/null +++ b/scripts/start-server.sh @@ -0,0 +1,68 @@ +#!/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---" +if [ "${USERNAME}" == "" ]; then + ${STEAMCMD_DIR}/steamcmd.sh \ + +login anonymous \ + +quit +else + ${STEAMCMD_DIR}/steamcmd.sh \ + +login ${USERNAME} ${PASSWRD} \ + +quit +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 + else + ${STEAMCMD_DIR}/steamcmd.sh \ + +force_install_dir ${SERVER_DIR} \ + +login anonymous \ + +app_update ${GAME_ID} \ + +quit + 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 +fi + +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} \ No newline at end of file diff --git a/scripts/start.sh b/scripts/start.sh new file mode 100644 index 0000000..a8b06c1 --- /dev/null +++ b/scripts/start.sh @@ -0,0 +1,41 @@ +#!/bin/bash +echo "---Ensuring UID: ${UID} matches user---" +usermod -u ${UID} ${USER} +echo "---Ensuring GID: ${GID} matches user---" +groupmod -g ${GID} ${USER} > /dev/null 2>&1 ||: +usermod -g ${GID} ${USER} +echo "---Setting umask to ${UMASK}---" +umask ${UMASK} + +echo "---Checking for optional scripts---" +cp -f /opt/custom/user.sh /opt/scripts/start-user.sh > /dev/null 2>&1 ||: +cp -f /opt/scripts/user.sh /opt/scripts/start-user.sh > /dev/null 2>&1 ||: + +if [ -f /opt/scripts/start-user.sh ]; then + echo "---Found optional script, executing---" + chmod -f +x /opt/scripts/start-user.sh ||: + /opt/scripts/start-user.sh || echo "---Optional Script has thrown an Error---" +else + echo "---No optional script found, continuing---" +fi + +echo "---Taking ownership of data...---" +chown -R root:${GID} /opt/scripts +chmod -R 750 /opt/scripts +chown -R ${UID}:${GID} ${DATA_DIR} + +echo "---Starting...---" +term_handler() { + kill -SIGTERM "$killpid" + wait "$killpid" -f 2>/dev/null + exit 143; +} + +trap 'kill ${!}; term_handler' SIGTERM +su ${USER} -c "/opt/scripts/start-server.sh" & +killpid="$!" +while true +do + wait $killpid + exit 0; +done