Files
OpenFUT/fifa17-recon/docs/BASELINE-python-2026-08-10.md
T
root 28773e7cf1 fifa17-python: sync tools to running container state
The frozen baseline image predates two hot-patches made in the running
container after build:
* utas_server.py: FUT_MODES-gated offlineSeason block in GetHubData's club
  response (keeps the offline-season summary valid)
* test_hub_offline_season_contract.py added to /app/tools

Sync fifa17-python/tools to the running container (verified byte-identical,
237 files incl. the redir cert pair) and snapshot the live FS as
openfut-fut-backend:python-running-2026-08-10 (docker commit). A fresh build
from the committed sources now reproduces the running backend exactly
(baked SHA256SUMS.txt diffed against the container manifest: identical).
2026-08-10 23:56:58 +00:00

5.0 KiB

Python backend baseline — 2026-08-10

Frozen rollback target for the working offline FUT backend (Python migration) as it ran on 10.10.0.120. Everything here was recorded from the live system before any cleanup/restructure; the image and state are archived in /home/alex/OpenFUT/docker-backups/.

Frozen image

field value
tag openfut-fut-backend:python-baseline-2026-08-10
image id e1f93ad647ab
digest sha256:e1f93ad647abbec32e2751f3e88fed75d3e574d4500395b21c31d0f0b96abac6
created 2026-08-10T02:14:56Z (built as openfut-fut-backend:dev)
size 278 MB
archive docker-backups/openfut-fut-backend-python-baseline-2026-08-10.tar.gz (53 MB, docker save | gzip -1)

Frozen container

field value
id f16d3204cbf48151be232ff8f4194b429e311042f8f6f95644760d4b8eba2938
created 2026-08-10T02:14:56.194470252Z
image openfut-fut-backend:dev (= baseline image id)
restart unless-stopped
network docker_default, IP 172.19.0.2, aliases openfut-fut-backend, fut-backend
log json-file
inspect docker-backups/openfut-fut-backend-container-inspect-2026-08-10.json

Environment (Config.Env)

FUT_SETTINGS=off
FUT_MODES=1
OPENFUT_BIND=0.0.0.0
OPENFUT_ADVERTISE=10.10.0.120
POW_CONTENT_ADDR=0.0.0.0:8080
POW_CONTENT_HOST=10.10.0.120:8085
FUT_ACCOUNT_PATH=/state/active_account.json
FUT_PROFILE_ROOT=/state/accounts
PYTHON_VERSION=3.12.13   (python:3.12-slim base)

Volumes / mounts

Bind mount docker/state (host) -> /state (container, rw). Runtime state: active_account.json (active persona) + accounts/ (FUT saves by persona). Snapshot: docker-backups/state-2026-08-10/.

Ports (host -> container)

host container service
4216 4216 LSX (Origin bootstrap)
42127 42127 Blaze redirector (TLS)
42130 42130 Blaze main
42131 42131 Nucleus OAuth stub
8081 8081 FUT roster XML (HTTPS)
8099 8099 UTAS / RS4 FUT REST API
8094 8094 POW / EASFC API
8085 8080 POW content (remapped to avoid openfut-core:8080)

All listeners verified bound on 0.0.0.0 in the container (LSX/Blaze/nucleus, roster, UTAS, POW, POW content).

Dataset manifest

docker-backups/SHA256SUMS-container-baseline-2026-08-10.txt — sha256 of all 323 files under /app/tools + /app/data inside the running container.

fifa17-python/tools/ and fifa17-python/data/ are the staged sources that built this image (verified byte-identical to the container copies at freeze time). Images rebuilt from git now bake their own /app/SHA256SUMS.txt; the rebuild-equivalence check is diff between that and this manifest; the only expected deltas are pycache files (not committed) and the redir cert pair (regenerated per build).

Restore

# From the archived image (works offline, exact layers):
docker load -i /home/alex/OpenFUT/docker-backups/openfut-fut-backend-python-baseline-2026-08-10.tar.gz
docker tag openfut-fut-backend:python-baseline-2026-08-10 openfut-fut-backend:dev

# Or rebuild from git:
cd /home/alex/OpenFUT/fifa17-recon/docker/fifa17-python
cp .env.example .env            # set OPENFUT_ADVERTISE
docker compose up -d --build

Status at freeze time

  • The 2026-08-10 openfut-fut-backend container was left running untouched (the .105 launcher audit uses it). No rebuild/replacement happens until that audit finishes; the frozen image is the rollback target if cleanup breaks it.
  • docker/state was not moved during restructure (bind path must not change while the container is live); the new compose mounts ../state from the same location.
  • TURN/relay re-addressing (multiplayer) and long-tail endpoints (weather, matchday, kit assets) are deferred feature gaps — tracked separately.

Running state vs image — what the frozen image does NOT contain

The baseline image (python-baseline-2026-08-10 / dev) was built at 02:14Z, but the container's /app was hot-patched afterwards:

  • tools/utas_server.py — gained the FUT_MODES-gated offlineSeason block in GetHubData's club response (keeps the hub's offline-season summary valid).
  • tools/test_hub_offline_season_contract.py — added to /app/tools.

docker save captures the image, not the container's writable layer, so the baseline tar.gz lacks those two changes. Two paths cover the exact runtime:

  • openfut-fut-backend:python-running-2026-08-10docker commit of the running container (sha256:093a98fa0496...), the exact runtime FS.
  • The committed fifa17-python/tools + data — synced to match the running container byte-for-byte (237 files verified, incl. the redir cert pair), so a fresh build reproduces the actual running backend. Proven by rebuilding from the committed sources and diffing the baked /app/SHA256SUMS.txt against the container manifest: identical.

Archive: docker-backups/openfut-fut-backend-python-running-2026-08-10.tar.gz.