fix(ark): run as the image's own user; honour custom RCON ports
ARK's image is built around user gameserver (uid 25000) and locks
/home/gameserver to it, so under the node's default 1000:1000 the
startup script got "Permission denied" and the server restart-looped,
on real nodes as well as in boot tests. Set containerUser 25000:25000
(needs node-agent and panel support for containerUser).
The startup command read ${RCON_PORT}, but the node passes the RCONPort
setting as RCONPORT, so custom RCON ports were ignored for 27020.
Boot-tested in the Linux agent image: up 30 minutes with no restart.
The test now waits 10 minutes, covering the first ~13 GB download.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
944b5fdd3e
commit
2ad445ffdd
5 files changed
+13
-3
No files matched your search
@@ -119,6 +119,7 @@ func runBootTestPayload(args []string) error {
|
|||||||
"configFormatOptions": g["configFormatOptions"],
|
"configFormatOptions": g["configFormatOptions"],
|
||||||
"startupCommand": g["defaultStartupCommand"],
|
"startupCommand": g["defaultStartupCommand"],
|
||||||
"memoryLimitMb": g["requiredMemoryMb"],
|
"memoryLimitMb": g["requiredMemoryMb"],
|
||||||
|
"containerUser": g["containerUser"],
|
||||||
"dockerNetwork": bootTestNetwork,
|
"dockerNetwork": bootTestNetwork,
|
||||||
"logFilePath": g["logFilePath"],
|
"logFilePath": g["logFilePath"],
|
||||||
"readyPattern": g["readyPattern"],
|
"readyPattern": g["readyPattern"],
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ import (
|
|||||||
// (enabled, allowPaidHosting, allowPrivateHosting, imageUrl) are deliberately left out.
|
// (enabled, allowPaidHosting, allowPrivateHosting, imageUrl) are deliberately left out.
|
||||||
var gameFields = []string{
|
var gameFields = []string{
|
||||||
"id", "name",
|
"id", "name",
|
||||||
"defaultDockerImage", "defaultStartupCommand", "requiredMemoryMb", "requiredDiskMb", "defaultPorts",
|
"defaultDockerImage", "containerUser", "defaultStartupCommand", "requiredMemoryMb", "requiredDiskMb", "defaultPorts",
|
||||||
"installMethod", "installConfig",
|
"installMethod", "installConfig",
|
||||||
"defaultConfig", "configSchema", "configFilePath", "configFileFormat", "configFormatOptions",
|
"defaultConfig", "configSchema", "configFilePath", "configFileFormat", "configFormatOptions",
|
||||||
"agnosticCommandConfig", "clusterConfig",
|
"agnosticCommandConfig", "clusterConfig",
|
||||||
|
|||||||
@@ -2,7 +2,8 @@
|
|||||||
id: ark-survival-ascended-crossplay
|
id: ark-survival-ascended-crossplay
|
||||||
name: 'ARK: Survival Ascended (Crossplay Dedicated Server)'
|
name: 'ARK: Survival Ascended (Crossplay Dedicated Server)'
|
||||||
defaultDockerImage: mschnitzer/asa-linux-server:latest
|
defaultDockerImage: mschnitzer/asa-linux-server:latest
|
||||||
defaultStartupCommand: bash -c 'mkdir -p /server /data/Steam /data/steamcmd /data/cluster-shared && rm -rf /home/gameserver/server-files /home/gameserver/Steam /home/gameserver/steamcmd /home/gameserver/cluster-shared && ln -sfn /server /home/gameserver/server-files && ln -sfn /data/Steam /home/gameserver/Steam && ln -sfn /data/steamcmd /home/gameserver/steamcmd && ln -sfn /data/cluster-shared /home/gameserver/cluster-shared && export ASA_START_PARAMS="${ASA_START_PARAMS:-${SERVER_MAP:-TheIsland_WP}?listen?Port=${PORT:-7777}?RCONPort=${RCON_PORT:-27020}?RCONEnabled=True -WinLiveMaxPlayers=${MAX_PLAYERS:-70} -ServerPlatform=ALL}" && exec /usr/bin/start_server'
|
containerUser: "25000:25000"
|
||||||
|
defaultStartupCommand: bash -c 'mkdir -p /server /data/Steam /data/steamcmd /data/cluster-shared && rm -rf /home/gameserver/server-files /home/gameserver/Steam /home/gameserver/steamcmd /home/gameserver/cluster-shared && ln -sfn /server /home/gameserver/server-files && ln -sfn /data/Steam /home/gameserver/Steam && ln -sfn /data/steamcmd /home/gameserver/steamcmd && ln -sfn /data/cluster-shared /home/gameserver/cluster-shared && export ASA_START_PARAMS="${ASA_START_PARAMS:-${SERVER_MAP:-TheIsland_WP}?listen?Port=${PORT:-7777}?RCONPort=${RCONPORT:-27020}?RCONEnabled=True -WinLiveMaxPlayers=${MAX_PLAYERS:-70} -ServerPlatform=ALL}" && exec /usr/bin/start_server'
|
||||||
requiredMemoryMb: 16384
|
requiredMemoryMb: 16384
|
||||||
requiredDiskMb: 32768
|
requiredDiskMb: 32768
|
||||||
defaultPorts:
|
defaultPorts:
|
||||||
|
|||||||
@@ -1,3 +1,6 @@
|
|||||||
# yaml-language-server: $schema=../../schema/test.schema.json
|
# yaml-language-server: $schema=../../schema/test.schema.json
|
||||||
# Values CI uses to boot-test this game. Never put real credentials here: map them under 'secrets'.
|
# Values CI uses to boot-test this game. Never put real credentials here: map them under 'secrets'.
|
||||||
timeoutSec: 900
|
# No readyPattern yet: the server must stay up for 10 minutes, which covers the ~13 GB first
|
||||||
|
# download and Proton's slow first start.
|
||||||
|
settleSec: 600
|
||||||
|
timeoutSec: 2400
|
||||||
@@ -16,6 +16,11 @@
|
|||||||
"name": { "description": "Display name shown to users.", "type": "string", "minLength": 1 },
|
"name": { "description": "Display name shown to users.", "type": "string", "minLength": 1 },
|
||||||
|
|
||||||
"defaultDockerImage": { "description": "Image the game server runs in.", "type": "string", "minLength": 1 },
|
"defaultDockerImage": { "description": "Image the game server runs in.", "type": "string", "minLength": 1 },
|
||||||
|
"containerUser": {
|
||||||
|
"description": "uid:gid the server runs as, for images built around their own user (ARK's needs 25000:25000). Defaults to 1000:1000; root is never allowed.",
|
||||||
|
"type": ["string", "null"],
|
||||||
|
"pattern": "^[1-9][0-9]{0,8}:[1-9][0-9]{0,8}$"
|
||||||
|
},
|
||||||
"defaultStartupCommand": { "description": "Command run inside the container. May use config placeholders.", "type": ["string", "null"] },
|
"defaultStartupCommand": { "description": "Command run inside the container. May use config placeholders.", "type": ["string", "null"] },
|
||||||
"requiredMemoryMb": { "type": ["integer", "null"], "minimum": 128 },
|
"requiredMemoryMb": { "type": ["integer", "null"], "minimum": 128 },
|
||||||
"requiredDiskMb": { "type": ["integer", "null"], "minimum": 128 },
|
"requiredDiskMb": { "type": ["integer", "null"], "minimum": 128 },
|
||||||
|
|||||||
Reference in new issue
Block a user