Skip to content

fix(images): match SteamCMD platform descriptors to executable support #921

Open

Description

@Baylem

Finding

The published SteamCMD base advertises linux/arm64 in both its OCI index and child configuration. The arm64 child contains x86-64 Bash and dpkg binaries and a 32-bit Intel SteamCMD executable. A native ARM worker can select that child successfully and then fail to start a game. A builder with QEMU registered can hide the error.

Reproduced on November 11, 2026

Artifact Verified value
Public common-steamcmd index sha256:7cc7c2a9f45a6f0f69654517666de75db944e08ff110028a2586eaca77287801
Advertised linux/arm64 child sha256:bae9c352d48a1da0a9207bd0aa00e309ef78521151c6f8910026a99ef28f565c
/bin/bash and /usr/bin/dpkg ELF64 e_machine 62 (x86-64). Both packages are recorded as amd64.
/usr/lib/games/steam/steamcmd ELF32 e_machine 3 (Intel 80386), SHA-256 7e8563bf1aeb400481429f5b415d579f0f4813f47b38242bf238b17f45e4735e. The SteamCMD package is recorded as i386.

The pinned Dockerfile foundation is a single amd64 manifest. The image workflow uses QEMU during its multi-platform build. The 12 component images verified by the panel release consumer have a separate publication path. SteamCMD foundation · Image workflow.

Five official game templates inherited the SteamCMD foundation at the audit snapshot. At catalog commit 48b8b65c, the pinned ARK Survival Evolved, Squad, The Isle, Mount & Blade II Bannerlord and Nuclear Option game images each advertised only amd64. Their templates contained no architecture placement constraint. On mixed clusters with no operator-level worker constraint, these five games can therefore land on a node that cannot pull their image. The wrongly advertised arm64 descriptor was verified on the published common base itself. Official catalog · Game build platform.

After this report, upstream switched ARK Survival Evolved to a pinned hermsi/ark-server image and removed its Gameplane Dockerfile. Four in-tree game images still use the SteamCMD foundation at platform commit 7413822. The five-image result above applies to the original pins. Module change · Platform change.

Inspect the advertised arm64 image without executing its contents:

image=ghcr.io/gameplanepanel/gameplane/common-steamcmd@sha256:bae9c352d48a1da0a9207bd0aa00e309ef78521151c6f8910026a99ef28f565c
docker pull --platform linux/arm64 "$image"
container=$(docker create --platform linux/arm64 --network none --entrypoint /bin/false "$image")
scratch=$(mktemp -d)
trap 'docker rm "$container" >/dev/null' EXIT
docker cp -L "${container}:/bin/bash" "$scratch/bash"
docker cp "${container}:/usr/lib/games/steam/steamcmd" "$scratch/steamcmd"
readelf -h "$scratch/bash" "$scratch/steamcmd"

Acceptance

Publish platform descriptors and official module placement rules that reflect executable support. Inventory the derived game images and record the impact on mixed-architecture clusters, including already-pinned artifacts. Qualify each advertised platform by running the actual game image startup path on a matching worker with known emulator settings. Any supported emulated path needs an explicit runtime contract and its own startup and performance evidence. Include a regression check capable of detecting a mislabeled image even when its OCI config agrees with the index.

Observed while qualifying #867. The independent APT mirror repair is #920.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions