# OpenFUT FIFA-17 FUT backend — Python migration deployment. # # Runs the 5 network responders (LSX / Blaze / roster / UTAS / POW) that FIFA 17 # dials to reach the FUT hub. Pure-Python; the only third-party dep is # pycryptodome (LSX AES handshake). autopatch.py is intentionally NOT run here — # it patches the game process memory and belongs on the client (105). # # Build context is fifa17-recon/ (the repo tree). tools/ is the AUTHORITATIVE # recon tree (fifa17-recon/tools/). Only the runtime file set listed in # docker/fifa17-python/runtime-tools.list is installed into /app/tools, so the # deployed manifest stays byte-identical to the frozen baseline image # openfut-fut-backend:python-baseline-2026-08-10 (see docs/BASELINE-*.md) while # recon scripts, ghidra_queries and docs stay out of the image. data/ comes # from the authoritative fifa17-recon/data. A SHA256SUMS.txt is baked into the # image so any running backend can be matched to the exact dataset it was built # from. FROM python:3.12-slim RUN pip install --no-cache-dir pycryptodome==3.20.0 WORKDIR /app # Stage the authoritative tools tree in full... COPY tools/ /app/tools-full/ # ...then install ONLY the runtime manifest (baseline image minus the two # git-ignored certs, which are regenerated below). COPY docker/fifa17-python/runtime-tools.list /app/runtime-tools.list RUN set -eu; \ mkdir -p /app/tools; \ while IFS= read -r f; do \ [ -n "$f" ] || continue; \ mkdir -p "/app/tools/$(dirname "$f")"; \ cp "/app/tools-full/$f" "/app/tools/$f"; \ done < /app/runtime-tools.list; \ rm -rf /app/tools-full COPY data/ /app/data/ # Redirector/roster TLS certificate. FIFA17's roster verifier compares only # dNSName SAN entries, so deployment advertises winter15.gosredirector.ea.com # through OPENFUT_ROSTER_HOST and resolves that hostname on the client. The # entrypoint validates this stable certificate; it never reissues it for an IP # SAN that the verifier ignores. # # OpenSSL remains in the image both to create the git-ignored keypair on a fresh # checkout and to validate the configured DNS identity at startup. RUN apt-get update && apt-get install -y --no-install-recommends openssl && \ rm -rf /var/lib/apt/lists/* RUN if [ ! -s tools/redir_cert.pem ] || [ ! -s tools/redir_key.pem ]; then \ openssl req -x509 -newkey rsa:2048 -nodes \ -keyout tools/redir_key.pem -out tools/redir_cert.pem \ -days 3650 -subj "/CN=winter15.gosredirector.ea.com" \ -addext "subjectAltName=DNS:winter15.gosredirector.ea.com,DNS:*.gosredirector.ea.com,DNS:*.ea.com,IP:127.0.0.1"; \ fi # Bake a dataset manifest so every image is self-identifying. RUN find /app/tools /app/data -type f | LC_ALL=C sort | xargs sha256sum > /app/SHA256SUMS.txt COPY docker/fifa17-python/entrypoint.sh /app/entrypoint.sh RUN chmod +x /app/entrypoint.sh # LSX 4216 | Blaze redir/main/nucleus 42127/42130/42131 | roster 8081 | UTAS 8099 | POW 8094/8080 EXPOSE 4216 42127 42130 42131 8081 8099 8094 8080 ENTRYPOINT ["/app/entrypoint.sh"]