Skip to content

Commit 06c3627

Browse files
committed
major update: add log checker
1 parent 4732040 commit 06c3627

File tree

4 files changed

+172
-28
lines changed

4 files changed

+172
-28
lines changed

dockerfile.native

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,22 @@
11
FROM debian
22

3+
COPY entrypoint.sh /usr/local/bin/entrypoint.sh
4+
35
RUN apt-get update && apt-get install -y lib32gcc-s1 curl && rm -rf /var/lib/apt/lists/* && apt-get clean && \
4-
useradd -m -s /bin/bash 5k
6+
chmod +x /usr/local/bin/entrypoint.sh && useradd -m 5k
57

68
ENV APPID=884110
79
ENV STEAMPATH="/home/5k/Steam"
810
ENV SRVPATH="${STEAMPATH}/steamapps/common/SCP Pandemic Dedicated Server"
911
ENV ARGS=""
1012

1113
USER 5k
12-
RUN mkdir -p "${STEAMPATH}" "${SRVPATH}" && cd "${STEAMPATH}" && \
14+
RUN mkdir -p "$STEAMPATH" "$SRVPATH" && cd "$STEAMPATH" && \
1315
curl -sqL "https://steamcdn-a.akamaihd.net/client/installer/steamcmd_linux.tar.gz" | tar zxvf -
1416

17+
ENV STARTENV=""
18+
ENV STARTCMD="./LinuxServer/PandemicServer.sh"
19+
ENV ENTRYPOINT_ARGS="native skip"
20+
1521
USER root
16-
CMD chown -R 5k:5k "${SRVPATH}" && su 5k -c' \
17-
"${STEAMPATH}/steamcmd.sh" @ShutdownOnFailedCommand @NoPromptForPassword +force_install_dir ${SRVPATH} +login anonymous +app_update ${APPID} +quit && \
18-
cd "${SRVPATH}" && ./LinuxServer/PandemicServer.sh ${ARGS}'
22+
CMD chown -R 5k:5k "$SRVPATH" && su 5k -c "entrypoint.sh $ENTRYPOINT_ARGS"

dockerfile.wine

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,29 @@
11
FROM debian
22

3+
COPY entrypoint.sh /usr/local/bin/entrypoint.sh
4+
35
RUN apt-get update && apt-get install -y lib32gcc-s1 curl && rm -rf /var/lib/apt/lists/* && apt-get clean && \
4-
useradd -m -s /bin/bash 5k
6+
chmod +x /usr/local/bin/entrypoint.sh && useradd -m 5k
57

68
ENV APPID=884110
79
ENV STEAMPATH="/home/5k/Steam"
810
ENV SRVPATH="${STEAMPATH}/steamapps/common/SCP Pandemic Dedicated Server"
911
ENV ARGS=""
1012

1113
USER 5k
12-
RUN mkdir -p "${STEAMPATH}" "${SRVPATH}" && cd "${STEAMPATH}" && \
14+
RUN mkdir -p "$STEAMPATH" "$SRVPATH" && cd "$STEAMPATH" && \
1315
curl -sqL "https://steamcdn-a.akamaihd.net/client/installer/steamcmd_linux.tar.gz" | tar zxvf -
1416

1517
USER root
1618
RUN dpkg --add-architecture i386 && \
1719
mkdir -pm755 /etc/apt/keyrings && \
1820
curl -so /etc/apt/keyrings/winehq-archive.key https://dl.winehq.org/wine-builds/winehq.key && \
1921
curl -so /etc/apt/sources.list.d/winehq-trixie.sources https://dl.winehq.org/wine-builds/debian/dists/trixie/winehq-trixie.sources && \
20-
apt-get update && apt-get install -y --install-recommends winehq-staging xvfb && \
22+
apt-get update && apt-get install -y --install-recommends winehq-staging && \
2123
rm -rf /var/lib/apt/lists/* && apt-get clean
2224

2325
ENV STARTENV="WINEDLLOVERRIDES=dwmapi=native,builtin"
24-
ENV STARTCMD="xvfb-run wine ./WindowsServer/PandemicServer.exe"
26+
ENV STARTCMD="wine ./WindowsServer/PandemicServer.exe"
27+
ENV ENTRYPOINT_ARGS="wine skip"
2528

26-
CMD chown -R 5k:5k "${SRVPATH}" && su 5k -c' \
27-
"${STEAMPATH}/steamcmd.sh" @ShutdownOnFailedCommand @NoPromptForPassword +@sSteamCmdForcePlatformType windows +force_install_dir ${SRVPATH} +login anonymous +app_update ${APPID} +quit && \
28-
cd "${SRVPATH}" && if [ -n "${STARTENV}" ]; then export ${STARTENV} && ${STARTCMD} ${ARGS}; else ${STARTCMD} ${ARGS}; fi'
29+
CMD chown -R 5k:5k "$SRVPATH" && su 5k -c "entrypoint.sh $ENTRYPOINT_ARGS"

entrypoint.sh

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
#!/bin/sh
2+
set -eu
3+
4+
if [ -z "${1-}" ]; then
5+
echo "entrypoint.sh: require arguments \$1."
6+
exit 1
7+
elif [ "$1" = "native" ]; then
8+
"${STEAMPATH}/steamcmd.sh" @ShutdownOnFailedCommand @NoPromptForPassword +force_install_dir "$SRVPATH" +login anonymous +app_update $APPID +quit
9+
elif [ "$1" = "wine" ]; then
10+
"${STEAMPATH}/steamcmd.sh" @ShutdownOnFailedCommand @NoPromptForPassword +@sSteamCmdForcePlatformType windows +force_install_dir "$SRVPATH" +login anonymous +app_update $APPID +quit
11+
elif [ "$1" = "skip" ]; then
12+
echo "entrypoint.sh: skipping steamcmd!"
13+
else
14+
echo "entrypoint.sh: invalid arguments \$1, use \"native\" or \"wine\" or \"skip\"."
15+
exit 1
16+
fi
17+
18+
cd "$SRVPATH"
19+
20+
if [ -n "$STARTENV" ]; then
21+
export $STARTENV
22+
fi
23+
24+
if [ -n "${2-}" ]; then
25+
if [ "${2-}" != "skip" ]; then
26+
echo "entrypoint.sh: invalid arguments \$2, leave undefined or use \"skip\"."
27+
exit 1
28+
fi
29+
30+
$STARTCMD $ARGS
31+
exit
32+
fi
33+
34+
echo "entrypoint.sh: activate log checker!"
35+
36+
pipe=$(mktemp -u)
37+
mkfifo $pipe
38+
$STARTCMD $ARGS > $pipe &
39+
SRV_PID=$!
40+
SHELL_PID=$$
41+
42+
MATCH_TARGET="FOnlineAsyncTaskSteamCreateServer bWasSuccessful: 0
43+
Error: SteamSockets API"
44+
45+
(while IFS= read -r line; do
46+
printf '%s\n' "$line"
47+
48+
while IFS=$(printf '\n') read -r TARGET; do
49+
if ! echo "$line" | grep -q "$TARGET"; then
50+
continue
51+
fi
52+
53+
echo "\n======== entrypoint.sh ========\nentrypoint.sh: detected \"$TARGET\", exiting!\n================================"
54+
kill "$SRV_PID"
55+
kill "$SHELL_PID"
56+
done <<EOF
57+
$MATCH_TARGET
58+
EOF
59+
60+
done < $pipe) &
61+
62+
wait "$SRV_PID"
63+
kill "$SHELL_PID"

readme.md

Lines changed: 92 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -87,14 +87,52 @@ Add `-d` if you want it running on background
8787

8888
You have to create a volume for stoagre your server files, mount it on `${SRVPATH}` (see ENVs on below)
8989

90-
| ENVs | Native | Wine | Default Value | Description |
91-
|----------- |-------- |------ |--------------------------------------------------------------- |--------------------------------------------------------------------------------------- |
92-
| APPID | YES | YES | 884110 | Game server's steam appid |
93-
| STEAMPATH | YES | YES | "/home/5k/Steam" | Steamcmd path |
94-
| SRVPATH | YES | YES | "${STEAMPATH}/steamapps/common/SCP Pandemic Dedicated Server" | Game server path |
95-
| ARGS | YES | YES | "" | The params you want sent to the server |
96-
| STARTENV | NO | YES | "WINEDLLOVERRIDES=dwmapi=native,builtin" | Start environments, **modify may result in `UE4SS` not loading** |
97-
| STARTCMD | NO | YES | "wine ./WindowsServer/PandemicServer.exe" | Start command, used to start the server, a modify example: `"wine ./StartServer.bat"` |
90+
### ENVs
91+
92+
| ENVs | Default Value | Description |
93+
|----------------- |--------------------------------------------------------------------------------------------------- |--------------------------------------------------------------------------------------- |
94+
| APPID | `884110` | Game server's steam appid |
95+
| STEAMPATH | `"/home/5k/Steam"` | Steamcmd path |
96+
| SRVPATH | `"${STEAMPATH}/steamapps/common/SCP Pandemic Dedicated Server"` | Game server path |
97+
| ARGS | `""` | The params you want sent to the server |
98+
| STARTENV | Native: `""`<br/>Wine: `"WINEDLLOVERRIDES=dwmapi=native,builtin"` | Start environments, **modify `WINEDLLOVERRIDES` may result in `UE4SS` not loading** |
99+
| STARTCMD | Native: `"./LinuxServer/PandemicServer.sh"`<br/>Wine: `"wine ./WindowsServer/PandemicServer.exe"` | Start command, used to start the server, a modify example: `"wine ./StartServer.bat"` |
100+
| ENTRYPOINT_ARGS | Native: `"native skip"`<br/>Wine: `"wine skip"` | Params for entrypoint.sh, see Entrypoint Params on below |
101+
102+
### Entrypoint Params
103+
104+
| Params | Allowed value | Description |
105+
|-------- |-------------------------- |----------------------------------------------------------------------------------------- |
106+
| $1 | `native`, `wine`, `skip` | Used to set steamcmd's platform type, `skip` to skip the steamcmd |
107+
| $2 | `skip`, undefined | Used to should start Log Checker, `skip` to skip Log Checker, otherwise leave undefined |
108+
109+
Example:
110+
111+
```sh
112+
-e ENTRYPOINT_ARGS="native"
113+
```
114+
115+
Use linux platform, start log checker
116+
117+
```sh
118+
-e ENTRYPOINT_ARGS="wine skip"
119+
```
120+
121+
Use windows platform, skip log checker
122+
123+
```sh
124+
-e ENTRYPOINT_ARGS="skip skip"
125+
```
126+
127+
Skip steamcmd, skip log checker
128+
129+
### Log Checker
130+
131+
A simple script will keep watching the stdout, and if it find any matched strings, it will kill the server
132+
133+
Default matched strings: `FOnlineAsyncTaskSteamCreateServer bWasSuccessful: 0`, `Error: SteamSockets API`
134+
135+
You can modify it in `entrypoint.sh` > `$MATCH_TARGET`
98136

99137
----
100138

@@ -184,11 +222,49 @@ docker run --name scp5kserver -p 7777:7777/tcp -p 7777:7777/udp -p 27015:27015/t
184222

185223
你需要创建一个volume存储你的服务器文件,并挂载在`${SRVPATH}`(参阅下方ENVs)
186224

187-
| ENVs | Native | Wine | 默认值 | 描述 |
188-
|----------- |-------- |------ |--------------------------------------------------------------- |--------------------------------------------------- |
189-
| APPID | YES | YES | 884110 | 游戏服务器的steam appid |
190-
| STEAMPATH | YES | YES | "/home/5k/Steam" | steamcmd的路径 |
191-
| SRVPATH | YES | YES | "${STEAMPATH}/steamapps/common/SCP Pandemic Dedicated Server" | 游戏服务器的路径 |
192-
| ARGS | YES | YES | "" | 你想发给服务器的参数 |
193-
| STARTENV | NO | YES | "WINEDLLOVERRIDES=dwmapi=native,builtin" | 环境变量,**修改可能会导致`UE4SS`不加载** |
194-
| STARTCMD | NO | YES | "wine ./WindowsServer/PandemicServer.exe" | 用于启动服务器的指令,修改例: `"wine ./StartServer.bat"` |
225+
### ENVs
226+
227+
| ENVs | 默认值 | 描述 |
228+
|----------------- |--------------------------------------------------------------------------------------------------- |-------------------------------------------------------- |
229+
| APPID | `884110` | 游戏服务器的steam appid |
230+
| STEAMPATH | `"/home/5k/Steam"` | steamcmd的路径 |
231+
| SRVPATH | `"${STEAMPATH}/steamapps/common/SCP Pandemic Dedicated Server"` | 游戏服务器的路径 |
232+
| ARGS | `""` | 你想发给服务器的参数 |
233+
| STARTENV | Native: `""`<br/>Wine: `"WINEDLLOVERRIDES=dwmapi=native,builtin"` | 环境变量,**修改`WINEDLLOVERRIDES`可能会导致`UE4SS`不加载** |
234+
| STARTCMD | Native: `"./LinuxServer/PandemicServer.sh"`<br/>Wine: `"wine ./WindowsServer/PandemicServer.exe"` | 用于启动服务器的指令,修改例: `"wine ./StartServer.bat"` |
235+
| ENTRYPOINT_ARGS | Native: `"native skip"`<br/>Wine: `"wine skip"` | entrypoint.sh的参数,详见下方Entrypoint Params |
236+
237+
### Entrypoint Params
238+
239+
| Params | 合法值 | 描述 |
240+
|-------- |-------------------------- |--------------------------------------------------------------------- |
241+
| $1 | `native`, `wine`, `skip` | 用于设置steamcmd的平台类型,`skip`为跳过steamcmd |
242+
| $2 | `skip`, undefined | 用于启动Log Checker,`skip`为跳过Log Checker, 否则请保持未定义(undefined) |
243+
244+
示例:
245+
246+
```sh
247+
-e ENTRYPOINT_ARGS="native"
248+
```
249+
250+
使用linux平台,启动Log Checker
251+
252+
```sh
253+
-e ENTRYPOINT_ARGS="wine skip"
254+
```
255+
256+
使用windows平台,跳过Log Checker
257+
258+
```sh
259+
-e ENTRYPOINT_ARGS="skip skip"
260+
```
261+
262+
跳过steamcmd,跳过Log Checker
263+
264+
### Log Checker
265+
266+
一个简单的脚本,会持续监听标准输出(stdout),如果发现匹配的字符串,就会杀掉服务器
267+
268+
默认匹配字符串:`FOnlineAsyncTaskSteamCreateServer bWasSuccessful: 0`, `Error: SteamSockets API`
269+
270+
你可以在`entrypoint.sh` > `$MATCH_TARGET`修改

0 commit comments

Comments
 (0)