diff --git a/Dockerfile b/Dockerfile index a311088..9089607 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,36 +1,34 @@ -FROM debian:12-slim - -ENV DEBIAN_FRONTEND=noninteractive -ENV STEAMCMDDIR=/opt/steamcmd -ENV VALHEIMDIR=/opt/valheim -ENV BACKUPDIR=/backups - -RUN apt-get update && \ - apt-get install -y --no-install-recommends \ - ca-certificates \ - curl \ - wget \ - unzip \ - tzdata \ - lib32gcc-s1 \ - lib32stdc++6 && \ - rm -rf /var/lib/apt/lists/* - -# SteamCMD -RUN mkdir -p ${STEAMCMDDIR} ${VALHEIMDIR} ${BACKUPDIR} && \ - cd ${STEAMCMDDIR} && \ - wget https://steamcdn-a.akamaihd.net/client/installer/steamcmd_linux.tar.gz && \ - tar -xzf steamcmd_linux.tar.gz && rm steamcmd_linux.tar.gz - -# Copy scripts -COPY entrypoint.sh /entrypoint.sh -COPY backup.sh /backup.sh -RUN chmod +x /entrypoint.sh /backup.sh - -WORKDIR ${VALHEIMDIR} - -EXPOSE 2456/udp 2457/udp 2458/udp - -VOLUME ["/config", "/backups"] - -ENTRYPOINT ["/entrypoint.sh"] +FROM debian:12-slim + +ENV DEBIAN_FRONTEND=noninteractive +ENV STEAMCMDDIR=/opt/steamcmd +ENV VALHEIMDIR=/opt/valheim +ENV BACKUPDIR=/backups + +RUN apt-get update && \ + apt-get install -y --no-install-recommends \ + ca-certificates \ + curl \ + wget \ + unzip \ + tzdata \ + lib32gcc-s1 \ + lib32stdc++6 && \ + rm -rf /var/lib/apt/lists/* + +RUN mkdir -p ${STEAMCMDDIR} ${VALHEIMDIR} ${BACKUPDIR} && \ + cd ${STEAMCMDDIR} && \ + wget https://steamcdn-a.akamaihd.net/client/installer/steamcmd_linux.tar.gz && \ + tar -xzf steamcmd_linux.tar.gz && rm steamcmd_linux.tar.gz + +COPY entrypoint.sh /entrypoint.sh +COPY backup.sh /backup.sh +RUN chmod +x /entrypoint.sh /backup.sh + +WORKDIR ${VALHEIMDIR} + +EXPOSE 2456/udp 2457/udp 2458/udp + +VOLUME ["/config", "/backups"] + +ENTRYPOINT ["/entrypoint.sh"] diff --git a/backup.sh b/backup.sh index be75815..055c50d 100644 --- a/backup.sh +++ b/backup.sh @@ -1,13 +1 @@ -#!/usr/bin/env bash -set -euo pipefail - -WORLD_NAME="${WORLD_NAME:-Dedicated}" -BACKUPDIR="${BACKUPDIR:-/backups}" - -ts=$(date +"%Y-%m-%d_%H-%M-%S") -mkdir -p "${BACKUPDIR}" - -cp "/config/worlds_local/${WORLD_NAME}.db" "${BACKUPDIR}/${WORLD_NAME}_${ts}.db" -cp "/config/worlds_local/${WORLD_NAME}.fwl" "${BACKUPDIR}/${WORLD_NAME}_${ts}.fwl" - -echo "Backup complete: ${BACKUPDIR}/${WORLD_NAME}_${ts}" +#!/usr/bin/env bashset -euo pipefailWORLD_NAME="${WORLD_NAME:-Dedicated}"BACKUPDIR="${BACKUPDIR:-/backups}"ts=$(date +"%Y-%m-%d_%H-%M-%S")mkdir -p "${BACKUPDIR}"cp "/config/worlds_local/${WORLD_NAME}.db" "${BACKUPDIR}/${WORLD_NAME}_${ts}.db"cp "/config/worlds_local/${WORLD_NAME}.fwl" "${BACKUPDIR}/${WORLD_NAME}_${ts}.fwl"echo "Backup complete: ${BACKUPDIR}/${WORLD_NAME}_${ts}" \ No newline at end of file diff --git a/compose.yml b/compose.yml index b350f31..345bcf8 100644 --- a/compose.yml +++ b/compose.yml @@ -1,18 +1 @@ -services: - valheim: - image: valheim-managed:latest - container_name: valheim - restart: unless-stopped - environment: - SERVER_NAME: "Minisip Valheim" - WORLD_NAME: "MinisipWorld" - SERVER_PASSWORD: "changeme" - PUBLIC: "1" - TZ: "America/Moncton" - volumes: - - /mnt/tank/valheim/config:/config - - /mnt/tank/valheim/backups:/backups - ports: - - "2456:2456/udp" - - "2457:2457/udp" - - "2458:2458/udp" +services: valheim: image: valheim-managed:latest container_name: valheim restart: unless-stopped environment: SERVER_NAME: "Minisip Valheim" WORLD_NAME: "MinisipWorld" SERVER_PASSWORD: "changeme" PUBLIC: "1" TZ: "America/Moncton" volumes: - /mnt/tank/valheim/config:/config - /mnt/tank/valheim/backups:/backups ports: - "2456:2456/udp" - "2457:2457/udp" - "2458:2458/udp" \ No newline at end of file diff --git a/entrypoint.sh b/entrypoint.sh index 3e87c5d..41479f5 100644 --- a/entrypoint.sh +++ b/entrypoint.sh @@ -1,10 +1,13 @@ #!/usr/bin/env bash set -euo pipefail +export TERM=xterm + STEAMCMDDIR="${STEAMCMDDIR:-/opt/steamcmd}" VALHEIMDIR="${VALHEIMDIR:-/opt/valheim}" BACKUPDIR="${BACKUPDIR:-/backups}" -BEPINEX_URL="${BEPINEX_URL:-https://thunderstore.io/package/download/BepInExPack_Valheim/latest.zip}" + +BEPINEX_URL="${BEPINEX_URL:-https://cloud.theminisip.ca/index.php/s/K32Lnjc6TyWXaiN/download}" SERVER_NAME="${SERVER_NAME:-Valheim Server}" WORLD_NAME="${WORLD_NAME:-Dedicated}" @@ -12,35 +15,57 @@ SERVER_PASSWORD="${SERVER_PASSWORD:-changeme}" PUBLIC="${PUBLIC:-1}" install_valheim() { - echo "[valheim] installing/updating via SteamCMD..." - "${STEAMCMDDIR}/steamcmd.sh" +login anonymous \ + echo "[valheim] installing/updating via SteamCMD (forced non-interactive)..." + "${STEAMCMDDIR}/steamcmd.sh" \ +force_install_dir "${VALHEIMDIR}" \ + +@sSteamCmdForcePlatformType linux \ + +login anonymous \ +app_update 896660 validate \ +quit } install_bepinex() { - if [ -f "${VALHEIMDIR}/start_server_bepinex.sh" ]; then - echo "[bepinex] already installed." - return - fi - echo "[bepinex] downloading pack..." curl -L "${BEPINEX_URL}" -o /tmp/bepinex.zip + + echo "[bepinex] validating zip..." + if ! unzip -t /tmp/bepinex.zip >/dev/null 2>&1; then + echo "[bepinex] ERROR: Downloaded file is not a valid ZIP." + exit 1 + fi + + echo "[bepinex] extracting..." + rm -rf /tmp/bepinex + mkdir -p /tmp/bepinex unzip -q /tmp/bepinex.zip -d /tmp/bepinex - cp -r /tmp/bepinex/* "${VALHEIMDIR}/" - rm -rf /tmp/bepinex /tmp/bepinex.zip + + # Folder confirmed by you + bep_root="/tmp/bepinex/BepInExPack_Valheim" + + if [ ! -d "${bep_root}" ]; then + echo "[bepinex] ERROR: Expected folder BepInExPack_Valheim not found." + ls -R /tmp/bepinex + exit 1 + fi + + echo "[bepinex] copying contents of ${bep_root} to ${VALHEIMDIR}" + cp -r "${bep_root}/"* "${VALHEIMDIR}/" + + # Fix CRLF if present + sed -i 's/\r$//' "${VALHEIMDIR}/start_server_bepinex.sh" + + # Ensure executable + chmod +x "${VALHEIMDIR}/start_server_bepinex.sh" } backup_world() { echo "[backup] backing up world..." ts=$(date +"%Y-%m-%d_%H-%M-%S") mkdir -p "${BACKUPDIR}" - cp "/config/worlds_local/${WORLD_NAME}.db" "${BACKUPDIR}/${WORLD_NAME}_${ts}.db" - cp "/config/worlds_local/${WORLD_NAME}.fwl" "${BACKUPDIR}/${WORLD_NAME}_${ts}.fwl" + cp "/config/worlds_local/${WORLD_NAME}.db" "${BACKUPDIR}/${WORLD_NAME}_${ts}.db" || true + cp "/config/worlds_local/${WORLD_NAME}.fwl" "${BACKUPDIR}/${WORLD_NAME}_${ts}.fwl" || true } -# Install/update install_valheim install_bepinex @@ -52,7 +77,9 @@ done & cd "${VALHEIMDIR}" +echo "[valheim] using password: ${SERVER_PASSWORD}" echo "[valheim] starting server..." + exec ./start_server_bepinex.sh \ -name "${SERVER_NAME}" \ -port 2456 \