Files
managed-valheim/entrypoint.sh
T
2026-09-13 20:37:06 -03:00

89 lines
2.2 KiB
Bash

#!/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://cloud.theminisip.ca/index.php/s/K32Lnjc6TyWXaiN/download}"
SERVER_NAME="${SERVER_NAME:-Valheim Server}"
WORLD_NAME="${WORLD_NAME:-Dedicated}"
SERVER_PASSWORD="${SERVER_PASSWORD:-changeme}"
PUBLIC="${PUBLIC:-1}"
install_valheim() {
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() {
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
# 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" || true
cp "/config/worlds_local/${WORLD_NAME}.fwl" "${BACKUPDIR}/${WORLD_NAME}_${ts}.fwl" || true
}
install_valheim
install_bepinex
# Background backup loop
while true; do
sleep 3600
backup_world
done &
cd "${VALHEIMDIR}"
echo "[valheim] using password: ${SERVER_PASSWORD}"
echo "[valheim] starting server..."
exec ./start_server_bepinex.sh \
-name "${SERVER_NAME}" \
-port 2456 \
-world "${WORLD_NAME}" \
-password "${SERVER_PASSWORD}" \
-public "${PUBLIC}"