ets2-server/install_server/install_server.sh
ASUS f351a37403 v1.0.5
- 修改启停脚本拉取命令
2026-05-07 05:05:45 +08:00

301 lines
6.6 KiB
Bash
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/usr/bin/env bash
# 2026年5月7日
# 项目地址: https://git.a-hxin.cn/ahxin/ets2-server.git
set -Eeuo pipefail
export DEBIAN_FRONTEND=noninteractive
export NEEDRESTART_MODE=l
REPO_HOST="https://git.a-hxin.cn/ahxin/ets2-server"
BRANCH="master"
RAW_BASE="${REPO_HOST}/raw/branch/${BRANCH}"
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"
SERVER_SCRIPT_URL="${RAW_BASE}/server/server.sh"
SERVER_SCRIPT_PATH="${ETS2_BIN_DIR}/server.sh"
ETS2_CMD="/usr/local/bin/ets2_sv"
APP_ID="1948160"
while [ $# -gt 0 ]; do
case "$1" in
--branch)
BRANCH="$2"
RAW_BASE="${REPO_HOST}/raw/branch/${BRANCH}"
SERVER_SCRIPT_URL="${RAW_BASE}/server/server.sh"
shift 2
;;
*)
echo "[ERROR] 未知参数: $1"
exit 1
;;
esac
done
echo "========================================"
echo " ETS2 Dedicated Server 一键部署脚本"
echo " System: Ubuntu / Debian"
echo " Branch: ${BRANCH}"
echo "========================================"
if [ "$(id -u)" -ne 0 ]; then
echo "[ERROR] 请使用 root 权限执行:"
echo "curl -fsSL \"${RAW_BASE}/install_server/install_server.sh\" | sudo bash"
exit 1
fi
echo
echo "一、检查系统环境"
if [ -f /etc/os-release ]; then
. /etc/os-release
echo "[INFO] 当前系统: ${PRETTY_NAME:-unknown}"
fi
if ! command -v apt-get >/dev/null 2>&1; then
echo "[ERROR] 当前脚本主要适配 Ubuntu / Debian未检测到 apt-get"
exit 1
fi
echo
echo "二、创建 steam 用户"
if id "${STEAM_USER}" >/dev/null 2>&1; then
echo "[OK] 用户 ${STEAM_USER} 已存在,跳过创建"
else
adduser \
--system \
--shell /bin/bash \
--gecos 'Steam Service User' \
--group \
--disabled-password \
--home "${STEAM_HOME}" \
"${STEAM_USER}"
echo "[OK] 用户 ${STEAM_USER} 创建完成"
fi
echo
echo "三、创建工作目录"
mkdir -p "${STEAMCMD_DIR}" "${ETS2_DIR}" "${ETS2_DOC_DIR}" "${ETS2_BIN_DIR}"
chown -R "${STEAM_USER}:${STEAM_USER}" "${STEAM_HOME}"
echo "[OK] 目录创建完成:"
echo "${STEAMCMD_DIR}"
echo "${ETS2_DIR}"
echo "${ETS2_DOC_DIR}"
echo
echo "四、安装运行库"
dpkg --add-architecture i386 || true
apt-get update
apt-get install -y \
sudo \
curl \
ca-certificates \
tar \
gzip \
git \
util-linux \
coreutils \
procps \
iproute2 \
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 "[OK] 运行库安装完成"
echo
echo "五、下载 / 更新 SteamCMD"
sudo -u "${STEAM_USER}" bash -lc "
mkdir -p '${STEAMCMD_DIR}'
cd '${STEAMCMD_DIR}'
curl -sqL 'https://steamcdn-a.akamaihd.net/client/installer/steamcmd_linux.tar.gz' | tar zxvf -
chmod +x '${STEAMCMD_DIR}/steamcmd.sh'
"
echo "[OK] SteamCMD 准备完成"
echo
echo "六、安装 / 更新 ETS2 Dedicated Server"
chown -R "${STEAM_USER}:${STEAM_USER}" "${STEAMCMD_DIR}" "${ETS2_DIR}"
set +e
sudo -u "${STEAM_USER}" bash -lc "
cd '${STEAMCMD_DIR}' &&
./steamcmd.sh \
+@sSteamCmdForcePlatformType linux \
+login anonymous \
+app_info_update 1 \
+force_install_dir '${ETS2_DIR}' \
+app_update '${APP_ID}' validate \
+quit
"
INSTALL_RESULT=$?
if [ "${INSTALL_RESULT}" -ne 0 ]; then
echo "[WARN] 第一次安装失败,尝试清理 SteamCMD 缓存后重试..."
sudo -u "${STEAM_USER}" rm -rf "${STEAMCMD_DIR}/appcache" || true
sudo -u "${STEAM_USER}" rm -rf "${STEAM_HOME}/Steam/appcache" || true
sudo -u "${STEAM_USER}" rm -rf "${STEAM_HOME}/.steam/appcache" || true
sudo -u "${STEAM_USER}" bash -lc "
cd '${STEAMCMD_DIR}' &&
./steamcmd.sh \
+@sSteamCmdForcePlatformType linux \
+login anonymous \
+app_info_update 1 \
+force_install_dir '${ETS2_DIR}' \
+app_update '${APP_ID}' validate \
+quit
"
INSTALL_RESULT=$?
fi
set -e
if [ "${INSTALL_RESULT}" -ne 0 ]; then
echo "[ERROR] ETS2 Dedicated Server 安装失败"
echo
echo "可手动测试:"
echo "sudo -u steam bash -lc 'cd ${STEAMCMD_DIR} && ./steamcmd.sh +login anonymous +app_info_print ${APP_ID} +quit'"
exit 1
fi
echo "[OK] ETS2 Dedicated Server 安装完成"
echo
echo "七、安装 server.sh 管理脚本"
mkdir -p "${ETS2_BIN_DIR}"
echo "[INFO] 下载地址:${SERVER_SCRIPT_URL}"
curl -fsSL "${SERVER_SCRIPT_URL}" -o "${SERVER_SCRIPT_PATH}"
chmod +x "${SERVER_SCRIPT_PATH}"
chown "${STEAM_USER}:${STEAM_USER}" "${SERVER_SCRIPT_PATH}"
echo "[OK] server.sh 安装完成:${SERVER_SCRIPT_PATH}"
echo
echo "八、修复 steamclient.so 链接"
if [ -f "${ETS2_DIR}/linux64/steamclient.so" ]; then
sudo -u "${STEAM_USER}" mkdir -p "${STEAM_HOME}/.steam/sdk64"
sudo -u "${STEAM_USER}" ln -sfn \
"${ETS2_DIR}/linux64/steamclient.so" \
"${STEAM_HOME}/.steam/sdk64/steamclient.so"
echo "[OK] steamclient.so 链接完成"
else
echo "[WARN] 未找到 ${ETS2_DIR}/linux64/steamclient.so跳过"
fi
echo
echo "九、创建必要目录并设置权限"
mkdir -p "${ETS2_BIN_DIR}/logs"
mkdir -p "${ETS2_DOC_DIR}/Euro Truck Simulator 2"
chown -R "${STEAM_USER}:${STEAM_USER}" "${STEAM_HOME}"
chmod -R 775 "${ETS2_BIN_DIR}" || true
chmod -R 775 "${ETS2_DOC_DIR}" || true
echo "[OK] 权限设置完成"
echo
echo "十、创建快捷命令 ets2_sv"
rm -f "${ETS2_CMD}"
cat > "${ETS2_CMD}" <<EOF
#!/usr/bin/env bash
SERVER_SCRIPT="${SERVER_SCRIPT_PATH}"
if [ ! -f "\$SERVER_SCRIPT" ]; then
echo "[ERROR] 找不到服务脚本: \$SERVER_SCRIPT"
exit 1
fi
if [ "\$(id -un)" = "${STEAM_USER}" ]; then
exec "\$SERVER_SCRIPT" "\$@"
else
exec sudo -u ${STEAM_USER} "\$SERVER_SCRIPT" "\$@"
fi
EOF
chmod +x "${ETS2_CMD}"
echo "[OK] 快捷命令创建完成:${ETS2_CMD}"
echo
echo "========================================"
echo "部署完成"
echo "========================================"
echo
echo "仓库地址:"
echo "${REPO_HOST}.git"
echo
echo "当前分支:"
echo "${BRANCH}"
echo
echo "服务器目录:"
echo "${ETS2_DIR}"
echo
echo "配置目录:"
echo "${ETS2_DOC_DIR}/Euro Truck Simulator 2"
echo
echo "管理脚本:"
echo "${SERVER_SCRIPT_PATH}"
echo
echo "快捷命令:"
echo "ets2_sv"
echo
echo "下一步:"
echo "1. 上传 server_config.sii、server_packages.sii、server_packages.dat 到:"
echo " ${ETS2_DOC_DIR}/Euro Truck Simulator 2"
echo
echo "2. 检查配置:"
echo " ets2_sv check"
echo
echo "3. 前台调试启动:"
echo " ets2_sv debug"
echo
echo "4. 后台启动:"
echo " ets2_sv start"
echo
echo "========================================"