diff --git a/docker/docker-compose.dev.yml b/docker/docker-compose.dev.yml index e4f402e..0a9dc00 100644 --- a/docker/docker-compose.dev.yml +++ b/docker/docker-compose.dev.yml @@ -90,7 +90,7 @@ services: dockerfile: Dockerfile restart: unless-stopped environment: - SHARD_IP: ${PUBLIC_HOST:-192.168.10.234} + SHARD_IP: 192.168.10.234 MOTD: ${OPENFUSION_MOTD:-Bienvenido a Project Afterlife - FusionFall Academy} ports: - "23000:23000" @@ -172,6 +172,25 @@ services: volumes: - afc_bridge_data:/data + sm64coopdx: + build: + context: ../servers/sm64coopdx + dockerfile: Dockerfile + restart: unless-stopped + container_name: sm64coopdx + environment: + SM64_PORT: ${SM64_PORT:-7777} + SM64_PLAYERS: ${SM64_PLAYERS:-16} + ports: + - "7777:7777/udp" + volumes: + - sm64_save:/server/save + - sm64_mods:/server/mods + deploy: + resources: + limits: + memory: 2G + volumes: postgres_data: minio_data: @@ -179,6 +198,8 @@ volumes: minecraft_ftb_data: geth_data: afc_bridge_data: + sm64_save: + sm64_mods: certbot_etc: external: true name: docker_certbot_etc diff --git a/servers/sm64coopdx/.dockerignore b/servers/sm64coopdx/.dockerignore new file mode 100644 index 0000000..de951f4 --- /dev/null +++ b/servers/sm64coopdx/.dockerignore @@ -0,0 +1,2 @@ +*.md +.git diff --git a/servers/sm64coopdx/.gitignore b/servers/sm64coopdx/.gitignore new file mode 100644 index 0000000..26b0f8d --- /dev/null +++ b/servers/sm64coopdx/.gitignore @@ -0,0 +1,4 @@ +# SM64 ROM — copyrighted, not distributable +*.z64 +*.n64 +*.v64 diff --git a/servers/sm64coopdx/Dockerfile b/servers/sm64coopdx/Dockerfile new file mode 100644 index 0000000..8284fc1 --- /dev/null +++ b/servers/sm64coopdx/Dockerfile @@ -0,0 +1,57 @@ +# sm64coopdx headless dedicated server +# Requires baserom.us.z64 (SM64 US ROM) in build context + +# --- Build stage --- +FROM ubuntu:jammy AS build + +RUN apt-get update && apt-get install -y \ + binutils-mips-linux-gnu \ + bsdmainutils \ + build-essential \ + libcapstone-dev \ + pkgconf \ + python3 \ + libz-dev \ + libcurl4-openssl-dev \ + git \ + && rm -rf /var/lib/apt/lists/* + +WORKDIR /sm64 + +RUN git clone --depth 1 https://github.com/coop-deluxe/sm64coopdx.git . + +COPY baserom.us.z64 . + +# Patch: add missing float.h include (GCC 11 strictness) +RUN sed -i '1i #include ' src/engine/math_util.c + +# Patch: fix platform.c fallback — upstream renamed functions but forgot the #else branch +RUN sed -i 's/const char \*sys_exe_path(void) {/const char *sys_exe_path_dir(void) {\n return ".";\n}\n\nconst char *sys_resource_path(void) {\n return ".";\n}\n\nconst char *sys_exe_path(void) {/' src/pc/platform.c + +RUN make HEADLESS=1 DISCORD_SDK=0 COOPNET=0 -j$(nproc) + +# --- Runtime stage --- +FROM ubuntu:jammy + +RUN apt-get update && apt-get install -y \ + libcurl4 \ + libz1 \ + && rm -rf /var/lib/apt/lists/* + +RUN useradd -m -s /bin/bash sm64 + +WORKDIR /server + +COPY --from=build /sm64/build/us_pc/ . +COPY --from=build /sm64/baserom.us.z64 . + +RUN mkdir -p /server/mods /server/save && chown -R sm64:sm64 /server + +USER sm64 + +EXPOSE 7777/udp + +ENV SM64_PORT=7777 +ENV SM64_PLAYERS=16 + +ENTRYPOINT ["sh", "-c", "./sm64coopdx --server ${SM64_PORT} --headless --playercount ${SM64_PLAYERS} --skip-intro"]