-
Notifications
You must be signed in to change notification settings - Fork 2
/
Dockerfile.preload
94 lines (79 loc) Β· 3.6 KB
/
Dockerfile.preload
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
################################################################################
# Dockerfile that contains Barotrauma Dedicated Server.
# Come with SteamCMD.
# Come with the server installed.
# Will update the server on every start.
#
# SteamCMD part is inspired by: https://github.com/CM2Walki/steamcmd
# BaroServer part is inspired by: https://github.com/gnoeley/barotrauma-dedicated-server-docker
################################################################################
FROM opensuse/leap:15.6
LABEL maintainer="[email protected]"
# Create a low-privilege user.
RUN set -eux \
&& sed -i 's/^CREATE_MAIL_SPOOL=yes/CREATE_MAIL_SPOOL=no/' /etc/default/useradd \
&& mkdir -p /home/runner \
&& groupadd runner \
&& useradd runner -g runner -d /home/runner \
&& chown runner:runner /home/runner
# Install runtimes & SteamCMD.
# When done, disable all Zypper repos.
COPY resources/microsoft-prod.repo /etc/zypp/repos.d/microsoft-prod.repo
RUN zypper --gpg-auto-import-keys \
install --no-confirm --no-recommends --auto-agree-with-licenses \
libicu \
dotnet-runtime-6.0 \
libSDL2-2_0-0 \
steamcmd \
&& zypper modifyrepo --disable --all \
&& rm -rf /var/cache/zypp/*
# Run SteamCMD for the first time, let it update & install some files,
# so other low-privilege users could run it properly.
# Clear /tmp when done.
RUN steamcmd +'quit' \
&& rm -rf /root/Steam/appcache/httpcache/* \
&& rm -rf /tmp/*
# Install & run the game server in a low-privilege user.
USER runner:runner
ENV STEAMAPPID=1026340
ENV GAMEDIR="/home/runner/Steam/steamapps/common/Barotrauma Dedicated Server"
# Necessary symlink for SteamCMD.
RUN set -eux \
&& mkdir -p /home/runner/Steam \
&& mkdir -p /home/runner/.steam/sdk32 \
&& mkdir -p /home/runner/.steam/sdk64 \
&& ln -s /usr/lib/steamcmd/linux32/steamclient.so /home/runner/.steam/sdk32/steamclient.so \
&& ln -s /usr/lib/steamcmd/linux64/steamclient.so /home/runner/.steam/sdk64/steamclient.so
# Download the game server and validate.
# Could be skipped to get smaller image size, but have to download more on first run.
RUN steamcmd \
@ShutdownOnFailedCommand \
@NoPromptForPassword \
+login anonymous \
+app_update ${STEAMAPPID} validate \
+'quit'
# Preload files from this git repository.
ARG SAVEDIR="${GAMEDIR}/Daedalic Entertainment GmbH/Barotrauma/Multiplayer"
RUN mkdir -p "${SAVEDIR}"
# COPY from Windows will chmod 777, *nix respect original modes.
COPY --chown=runner:runner ["preloads/configs/serversettings.xml","preloads/configs/config_player.xml","${GAMEDIR}/"]
COPY --chown=runner:runner ["preloads/configs/clientpermissions.xml","preloads/configs/karmasettings.xml","${GAMEDIR}/Data/"]
# These COPY instructions work in add/replace mode, and respect subfolder structure.
COPY --chown=runner:runner preloads/submarines/. "${GAMEDIR}/Submarines/"
COPY --chown=runner:runner preloads/multiplayer-saves/. "${SAVEDIR}/"
COPY --chown=runner:runner preloads/mods/. "${GAMEDIR}/LocalMods/"
VOLUME $GAMEDIR
WORKDIR $GAMEDIR
EXPOSE 27015/udp
EXPOSE 27016/udp
# On every start, update SteamCMD.
# On every start, update the game server from Steam, but without validation (or config files will be replaced).
# Have to use root to chown uploaded files. But will run server in low-privilege.
USER root:root
CMD steamcmd +'quit' \
&& rm -rf /tmp/dumps \
&& chown -R runner:runner "${GAMEDIR}/" \
&& su runner -c '\
steamcmd @ShutdownOnFailedCommand @NoPromptForPassword +login anonymous +app_update ${STEAMAPPID} +'quit' \
&& "${GAMEDIR}/DedicatedServer"\
'