initial commit
This commit is contained in:
commit
9bc59e83b1
28
Dockerfile
Normal file
28
Dockerfile
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
FROM cm2network/steamcmd:latest
|
||||||
|
|
||||||
|
LABEL org.opencontainers.image.source=https://git.kapelle.org/niklas/arma3-docker
|
||||||
|
|
||||||
|
COPY entrypoint.sh /home/steam/entrypoint.sh
|
||||||
|
|
||||||
|
RUN mkdir -p /home/steam/server && \
|
||||||
|
chown steam:steam /home/steam/server && \
|
||||||
|
bash -c 'mkdir -p /home/steam/volumes/{config,missions,mods,servermods}' && \
|
||||||
|
chown steam:steam -R /home/steam/volumes/
|
||||||
|
|
||||||
|
USER steam
|
||||||
|
|
||||||
|
VOLUME /home/steam/server
|
||||||
|
VOLUME /home/steam/volumes/config
|
||||||
|
VOLUME /home/steam/volumes/missions
|
||||||
|
VOLUME /home/steam/volumes/mods
|
||||||
|
VOLUME /home/steam/volumes/servermods
|
||||||
|
|
||||||
|
WORKDIR /home/steam/server
|
||||||
|
|
||||||
|
EXPOSE 2302/udp
|
||||||
|
EXPOSE 2303/udp
|
||||||
|
EXPOSE 2304/udp
|
||||||
|
EXPOSE 2305/udp
|
||||||
|
EXPOSE 2306/udp
|
||||||
|
|
||||||
|
ENTRYPOINT /home/steam/entrypoint.sh
|
11
README.md
Normal file
11
README.md
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
Arma 3 server image.
|
||||||
|
|
||||||
|
# Download mods
|
||||||
|
|
||||||
|
Use the `downloadMods.sh` to download mods to a volume.
|
||||||
|
|
||||||
|
# Environment variables
|
||||||
|
|
||||||
|
`STEAM_USER` - Steam username
|
||||||
|
`STEAM_PASSWORD` - Steam password
|
||||||
|
`WORKSHOP_COLLECTION` - id of a steam workshop collection. Used to load mods
|
35
docker-compose.yml
Normal file
35
docker-compose.yml
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
version: "3"
|
||||||
|
|
||||||
|
services:
|
||||||
|
arma3:
|
||||||
|
build: .
|
||||||
|
image: djeeberjr/arma3
|
||||||
|
environment:
|
||||||
|
STEAM_USER: testo
|
||||||
|
STEAM_PASSWORD: testo
|
||||||
|
WORKSHOP_COLLECTION: 1400118996
|
||||||
|
volumes:
|
||||||
|
- arma3_dev_game:/home/steam/server
|
||||||
|
- arma3_dev_mods:/home/steam/volumes/mods
|
||||||
|
- arma3_dev_servermods:/home/steam/volumes/servermods
|
||||||
|
- arma3_dev_config:/home/steam/volumes/config
|
||||||
|
- arma3_dev_missions:/home/steam/volumes/missions
|
||||||
|
ports:
|
||||||
|
- 2302:2302/udp
|
||||||
|
- 2303:2303/udp
|
||||||
|
- 2304:2304/udp
|
||||||
|
- 2305:2305/udp
|
||||||
|
- 2306:2306/udp
|
||||||
|
stdin_open: true
|
||||||
|
tty: true
|
||||||
|
volumes:
|
||||||
|
arma3_dev_game:
|
||||||
|
name: arma3_dev_game
|
||||||
|
arma3_dev_mods:
|
||||||
|
name: arma3_dev_mods
|
||||||
|
arma3_dev_servermods:
|
||||||
|
name: arma3_dev_servermods
|
||||||
|
arma3_dev_config:
|
||||||
|
name: arma3_dev_config
|
||||||
|
arma3_dev_missions:
|
||||||
|
name: arma3_dev_missions
|
61
downloadMods.sh
Executable file
61
downloadMods.sh
Executable file
@ -0,0 +1,61 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
ARMA_MOD_VOLUME="arma3_dev_mods"
|
||||||
|
|
||||||
|
# Check if argument is given
|
||||||
|
if [ -z "$1" ]; then
|
||||||
|
echo "No argument given. Use workshop id as argument. e.g. 1400118996"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
PAYLOAD=$(cat <<EOF
|
||||||
|
set -e
|
||||||
|
|
||||||
|
WORKSHOP_DIR="/home/steam/Steam/steamapps/workshop/content"
|
||||||
|
|
||||||
|
mkdir -p \$WORKSHOP_DIR
|
||||||
|
rm -rf \$WORKSHOP_DIR/content
|
||||||
|
ln -s /home/steam/mount "\$WORKSHOP_DIR/107410"
|
||||||
|
|
||||||
|
echo -n "Username: "
|
||||||
|
read username
|
||||||
|
|
||||||
|
echo "Perform initial login. Exit after successfull login. To login type login username"
|
||||||
|
|
||||||
|
/home/steam/steamcmd/steamcmd.sh +login \$username +quit
|
||||||
|
|
||||||
|
tmpFile=$(mktemp)
|
||||||
|
|
||||||
|
for mod_id in \$(curl -s "https://steamcommunity.com/sharedfiles/filedetails/?id=$1" | grep -E 'id="sharedfile_[0-9]+"' | sed 's/.*id="sharedfile_\([0-9]\+\)".*/\1/')
|
||||||
|
do
|
||||||
|
{
|
||||||
|
echo "// autogenerated DONT TOUCH";
|
||||||
|
echo -e "@ShutdownOnFailedCommand 1";
|
||||||
|
echo -e "@NoPromptForPassword 1"
|
||||||
|
echo "login \$username";
|
||||||
|
echo "workshop_download_item 107410 \$mod_id validate";
|
||||||
|
echo "quit";
|
||||||
|
} > "\$tmpFile"
|
||||||
|
|
||||||
|
echo "Downloading mod \$mod_id"
|
||||||
|
|
||||||
|
until /home/steam/steamcmd/steamcmd.sh +runscript "\$tmpFile"; do echo -e "###\nLets try that again\n###"; done
|
||||||
|
|
||||||
|
echo -e "###\nDownload finished\n###"
|
||||||
|
done
|
||||||
|
|
||||||
|
# for f in \$(find /home/steam/mount -type f -name '*.pbo' -o -type f -name '*.bisign'); do mv -v "\$f" "\$(echo \$f | tr '[A-Z]' '[a-z]')"; done
|
||||||
|
|
||||||
|
EOF
|
||||||
|
)
|
||||||
|
|
||||||
|
docker run \
|
||||||
|
-it \
|
||||||
|
--rm \
|
||||||
|
--name=arma3_mods \
|
||||||
|
-v "$ARMA_MOD_VOLUME":/home/steam/mount \
|
||||||
|
cm2network/steamcmd \
|
||||||
|
bash -c "$PAYLOAD"
|
87
entrypoint.sh
Executable file
87
entrypoint.sh
Executable file
@ -0,0 +1,87 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
set -eo pipefail
|
||||||
|
|
||||||
|
VOLUME_HOME="/home/steam/volumes"
|
||||||
|
|
||||||
|
#
|
||||||
|
# STEAM/INSTALL GAME
|
||||||
|
#
|
||||||
|
|
||||||
|
# If STEAM_USER or STEAM_PASSWORD is not set
|
||||||
|
if [ -z "$STEAM_USER" ] || [ -z "$STEAM_PASSWORD" ]; then
|
||||||
|
echo "STEAM_USER or STEAM_PASSWORD is not set. Its recommended to create a new steam user for the server."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Update or install Arma 3
|
||||||
|
echo "Updating or installing Arma 3..."
|
||||||
|
|
||||||
|
# https://developer.valvesoftware.com/wiki/SteamCMD
|
||||||
|
/home/steam/steamcmd/steamcmd.sh +force_install_dir /home/steam/server +login "$STEAM_USER" "$STEAM_PASSWORD" +app_update 233780 +quit
|
||||||
|
|
||||||
|
#
|
||||||
|
# PREPARE GAME
|
||||||
|
#
|
||||||
|
|
||||||
|
# Check if config file exists
|
||||||
|
if [ ! -f "$VOLUME_HOME/config/config.cfg" ]; then
|
||||||
|
echo "Config file not found, creating..."
|
||||||
|
# TODO: Create config file
|
||||||
|
touch "$VOLUME_HOME/config/config.cfg"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# https://community.bistudio.com/wiki/Arma_3:_Startup_Parameters#Server_Options
|
||||||
|
SERVER_ARGS="-name server -config=$VOLUME_HOME/config/config.cfg -profiles=$VOLUME_HOME/config/profiles"
|
||||||
|
|
||||||
|
if [ -n "$A3_LIMIT_FPS" ]; then
|
||||||
|
SERVER_ARGS="${SERVER_ARGS} -limitFPS=${A3_LIMIT_FPS}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -n "$A3_PORT" ]; then
|
||||||
|
SERVER_ARGS="${SERVER_ARGS} -port=${A3_PORT}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
#
|
||||||
|
# PREAPRE MODS
|
||||||
|
#
|
||||||
|
|
||||||
|
MOD_LINK_DIR="/tmp/arma3mods"
|
||||||
|
mkdir -p "$MOD_LINK_DIR"
|
||||||
|
rm -f "$MOD_LINK_DIR"/*
|
||||||
|
|
||||||
|
MODS_TO_LOAD=""
|
||||||
|
|
||||||
|
for mod_id in $(curl -s "https://steamcommunity.com/sharedfiles/filedetails/?id=$WORKSHOP_COLLECTION" | grep -E 'id="sharedfile_[0-9]+"' | sed 's/.*id="sharedfile_\([0-9]\+\)".*/\1/')
|
||||||
|
do
|
||||||
|
# Check if directory exists
|
||||||
|
if [ ! -d "$VOLUME_HOME/mods/$mod_id" ]; then
|
||||||
|
echo "Could not find mod directory for $mod_id"
|
||||||
|
echo "Try to download it first"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
ln -s "$VOLUME_HOME/mods/$mod_id" "$MOD_LINK_DIR/$mod_id"
|
||||||
|
MODS_TO_LOAD="${MODS_TO_LOAD}$MOD_LINK_DIR/${mod_id};"
|
||||||
|
done
|
||||||
|
|
||||||
|
# MODS_TO_LOAD="$VOLUME_HOME/mods/463939057"
|
||||||
|
|
||||||
|
if [ -n "$MODS_TO_LOAD" ]; then
|
||||||
|
SERVER_ARGS="${SERVER_ARGS} -mod=${MODS_TO_LOAD}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
# SERVER_ARGS="${SERVER_ARGS} -serverMod=${SERVER_MODS}"
|
||||||
|
|
||||||
|
#
|
||||||
|
# RUN GAME
|
||||||
|
#
|
||||||
|
|
||||||
|
|
||||||
|
echo "Starting server with args: "
|
||||||
|
echo "$SERVER_ARGS"
|
||||||
|
|
||||||
|
# Start the server
|
||||||
|
echo "Starting the server..."
|
||||||
|
/home/steam/server/arma3server ${SERVER_ARGS}
|
Loading…
Reference in New Issue
Block a user