#!/usr/bin/env bash set -Eeuo pipefail STEAM_USER="steam" STEAM_HOME="/home/steam" STEAMCMD_DIR="${STEAM_HOME}/steamcmd" ETS2_DIR="${STEAM_HOME}/ets2_sv" ETS2_DOC_DIR="${STEAM_HOME}/ets2_doc" ETS2_BIN_DIR="${ETS2_DIR}/bin/linux_x64" SCRIPT_REPO="https://github.com/A-hxin/ets2_server.git" TMP_SCRIPT_DIR="${ETS2_BIN_DIR}/server" APP_ID="1948160" echo "========================================" echo " ETS2 Dedicated Server 一键部署脚本" echo " System: Ubuntu" echo "========================================" if [ "$(id -u)" -ne 0 ]; then echo "请使用 root 权限执行:" echo "sudo bash install_ets2_server.sh" exit 1 fi echo echo "一、创建 steam 用户" if id "${STEAM_USER}" >/dev/null 2>&1; then echo "用户 ${STEAM_USER} 已存在,跳过创建" else adduser \ --system \ --shell /bin/bash \ --gecos 'Steam Service User' \ --group \ --disabled-password \ --home "${STEAM_HOME}" \ "${STEAM_USER}" echo "用户 ${STEAM_USER} 创建完成" fi echo echo "二、创建工作目录" mkdir -p "${STEAMCMD_DIR}" "${ETS2_DIR}" "${ETS2_DOC_DIR}" chown -R "${STEAM_USER}:${STEAM_USER}" "${STEAM_HOME}" echo "目录创建完成:" echo "${STEAMCMD_DIR}" echo "${ETS2_DIR}" echo "${ETS2_DOC_DIR}" echo echo "三、安装运行库" dpkg --add-architecture i386 || true apt update apt install -y \ curl \ ca-certificates \ tar \ gzip \ git \ libc6:i386 \ libstdc++6:i386 \ libgcc-s1:i386 \ libx11-6:i386 \ libxext6:i386 \ libxau6:i386 \ libxdmcp6:i386 \ libncurses5:i386 \ libncursesw5:i386 \ libcurl4:i386 \ zlib1g:i386 \ libbz2-1.0:i386 \ libtinfo6:i386 echo echo "四、下载 SteamCMD" sudo -u "${STEAM_USER}" bash -c " cd '${STEAMCMD_DIR}' && curl -sqL 'https://steamcdn-a.akamaihd.net/client/installer/steamcmd_linux.tar.gz' | tar zxvf - " chmod +x "${STEAMCMD_DIR}/steamcmd.sh" || true echo echo "五、安装 / 更新 ETS2 Dedicated Server" sudo -u "${STEAM_USER}" bash -c " cd '${STEAMCMD_DIR}' && '${STEAMCMD_DIR}/steamcmd.sh' \ +force_install_dir '${ETS2_DIR}' \ +login anonymous \ +app_update '${APP_ID}' validate \ +quit " echo echo "六、安装 server.sh 管理脚本" mkdir -p "${ETS2_BIN_DIR}" rm -rf "${TMP_SCRIPT_DIR}" sudo -u "${STEAM_USER}" git clone "${SCRIPT_REPO}" "${TMP_SCRIPT_DIR}" if [ -f "${TMP_SCRIPT_DIR}/server.sh" ]; then mv "${TMP_SCRIPT_DIR}/server.sh" "${ETS2_BIN_DIR}/server.sh" chmod +x "${ETS2_BIN_DIR}/server.sh" rm -rf "${TMP_SCRIPT_DIR}" else echo "错误:没有找到 server.sh" exit 1 fi echo echo "七、创建必要目录并设置权限" mkdir -p "${ETS2_BIN_DIR}/logs" mkdir -p "${ETS2_DOC_DIR}/Euro Truck Simulator 2" chown -R "${STEAM_USER}:${STEAM_USER}" "${ETS2_BIN_DIR}" chown -R "${STEAM_USER}:${STEAM_USER}" "${ETS2_DOC_DIR}" chmod -R 775 "${ETS2_BIN_DIR}" chmod -R 775 "${ETS2_DOC_DIR}" echo echo "八、创建快捷命令" ln -sfn "${ETS2_BIN_DIR}/server.sh" /usr/local/bin/ets2_sv chmod +x /usr/local/bin/ets2_sv echo echo "九、是否立即执行一次 server.sh 初始化?" if [ -t 0 ]; then read -rp "是否现在执行一次?可能会进入服务器运行状态 [y/N]: " RUN_ONCE case "${RUN_ONCE}" in y|Y|yes|YES) echo "正在以 steam 用户执行 server.sh..." sudo -u "${STEAM_USER}" bash "${ETS2_BIN_DIR}/server.sh" ;; *) echo "已跳过首次执行" ;; esac else echo "非交互环境,跳过首次执行" fi echo echo "========================================" echo "部署完成" echo echo "服务器目录:" echo "${ETS2_DIR}" echo echo "配置目录:" echo "${ETS2_DOC_DIR}/Euro Truck Simulator 2" echo echo "管理脚本:" echo "${ETS2_BIN_DIR}/server.sh" echo echo "快捷命令:" echo "ets2_sv" echo echo "如需设置 steam 用户密码:" echo "sudo passwd steam" echo echo "如需切换到 steam 用户:" echo "su - steam" echo "========================================"