Compare commits

...

3 Commits

Author SHA1 Message Date
4c936245cd Merge pull request 'dev' (#4) from dev into master
Reviewed-on: #4
2026-05-07 05:06:08 +08:00
f351a37403 v1.0.5
- 修改启停脚本拉取命令
2026-05-07 05:05:45 +08:00
4cceb7717c v1.0.5
- 修改启停脚本拉取命令
2026-05-07 05:04:47 +08:00
2 changed files with 191 additions and 73 deletions

View File

@ -1,15 +1,16 @@
# 一个基于 Ubuntu2204 制作的 欧卡自动化安装脚本 # 一个基于 Ubuntu2204 制作的 欧卡自动化安装脚本
## 一、拉取执行脚本 ## 一、快速部署
### 1、拉取脚本 一键安装脚本-推荐:
```bash ```bash
https://git.a-hxin.cn/ahxin/ets2-server/rss/branch/master/install_server/install_server.sh curl -fsSL "https://git.a-hxin.cn/ahxin/ets2-server/raw/branch/master/install_server/install_server.sh" | sudo bash
```
添加权限
```bash
``` ```
执行 单条执行:
```bash
sudo chown ubuntu:ubuntu install_server.sh
chmod +x install_server.sh
sudo bash install_server.sh
```
## 二、 ## 二、

View File

@ -1,38 +1,76 @@
#!/usr/bin/env bash #!/usr/bin/env bash
# 2026年5月7日04点25分 # 2026年5月7日
# 项目地址: https://git.a-hxin.cn/ahxin/ets2-server/raw/branch/master/install_server/install_server.sh # 项目地址: https://git.a-hxin.cn/ahxin/ets2-server.git
set -Eeuo pipefail 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_USER="steam"
STEAM_HOME="/home/steam" STEAM_HOME="/home/steam"
STEAMCMD_DIR="${STEAM_HOME}/steamcmd" STEAMCMD_DIR="${STEAM_HOME}/steamcmd"
ETS2_DIR="${STEAM_HOME}/ets2_sv" ETS2_DIR="${STEAM_HOME}/ets2_sv"
ETS2_DOC_DIR="${STEAM_HOME}/ets2_doc" ETS2_DOC_DIR="${STEAM_HOME}/ets2_doc"
ETS2_BIN_DIR="${ETS2_DIR}/bin/linux_x64" ETS2_BIN_DIR="${ETS2_DIR}/bin/linux_x64"
SCRIPT_REPO="https://git.a-hxin.cn/ahxin/ets2-server/raw/branch/master/server/server.sh"
TMP_SCRIPT_DIR="${ETS2_BIN_DIR}/server" 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" 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 "========================================"
echo " ETS2 Dedicated Server 一键部署脚本" echo " ETS2 Dedicated Server 一键部署脚本"
echo " System: Ubuntu" echo " System: Ubuntu / Debian"
echo " Branch: ${BRANCH}"
echo "========================================" echo "========================================"
if [ "$(id -u)" -ne 0 ]; then if [ "$(id -u)" -ne 0 ]; then
echo "请使用 root 权限执行:" echo "[ERROR] 请使用 root 权限执行:"
echo "sudo bash install_ets2_server.sh" echo "curl -fsSL \"${RAW_BASE}/install_server/install_server.sh\" | sudo bash"
exit 1 exit 1
fi fi
echo echo
echo "一、创建 steam 用户" 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 if id "${STEAM_USER}" >/dev/null 2>&1; then
echo "用户 ${STEAM_USER} 已存在,跳过创建" echo "[OK] 用户 ${STEAM_USER} 已存在,跳过创建"
else else
adduser \ adduser \
--system \ --system \
@ -43,33 +81,38 @@ else
--home "${STEAM_HOME}" \ --home "${STEAM_HOME}" \
"${STEAM_USER}" "${STEAM_USER}"
echo "用户 ${STEAM_USER} 创建完成" echo "[OK] 用户 ${STEAM_USER} 创建完成"
fi fi
echo echo
echo "、创建工作目录" echo "、创建工作目录"
mkdir -p "${STEAMCMD_DIR}" "${ETS2_DIR}" "${ETS2_DOC_DIR}" mkdir -p "${STEAMCMD_DIR}" "${ETS2_DIR}" "${ETS2_DOC_DIR}" "${ETS2_BIN_DIR}"
chown -R "${STEAM_USER}:${STEAM_USER}" "${STEAM_HOME}" chown -R "${STEAM_USER}:${STEAM_USER}" "${STEAM_HOME}"
echo "目录创建完成:" echo "[OK] 目录创建完成:"
echo "${STEAMCMD_DIR}" echo "${STEAMCMD_DIR}"
echo "${ETS2_DIR}" echo "${ETS2_DIR}"
echo "${ETS2_DOC_DIR}" echo "${ETS2_DOC_DIR}"
echo echo
echo "、安装运行库" echo "、安装运行库"
dpkg --add-architecture i386 || true dpkg --add-architecture i386 || true
apt update apt-get update
apt install -y \ apt-get install -y \
sudo \
curl \ curl \
ca-certificates \ ca-certificates \
tar \ tar \
gzip \ gzip \
git \ git \
util-linux \
coreutils \
procps \
iproute2 \
libc6:i386 \ libc6:i386 \
libstdc++6:i386 \ libstdc++6:i386 \
libgcc-s1:i386 \ libgcc-s1:i386 \
@ -84,85 +127,151 @@ apt install -y \
libbz2-1.0:i386 \ libbz2-1.0:i386 \
libtinfo6:i386 libtinfo6:i386
echo echo "[OK] 运行库安装完成"
echo "四、下载 SteamCMD"
sudo -u "${STEAM_USER}" bash -c " echo
cd '${STEAMCMD_DIR}' && 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 - curl -sqL 'https://steamcdn-a.akamaihd.net/client/installer/steamcmd_linux.tar.gz' | tar zxvf -
chmod +x '${STEAMCMD_DIR}/steamcmd.sh'
" "
chmod +x "${STEAMCMD_DIR}/steamcmd.sh" || true echo "[OK] SteamCMD 准备完成"
echo echo
echo "、安装 / 更新 ETS2 Dedicated Server" echo "、安装 / 更新 ETS2 Dedicated Server"
sudo -u "${STEAM_USER}" bash -c " chown -R "${STEAM_USER}:${STEAM_USER}" "${STEAMCMD_DIR}" "${ETS2_DIR}"
set +e
sudo -u "${STEAM_USER}" bash -lc "
cd '${STEAMCMD_DIR}' && cd '${STEAMCMD_DIR}' &&
'${STEAMCMD_DIR}/steamcmd.sh' \ ./steamcmd.sh \
+force_install_dir '${ETS2_DIR}' \ +@sSteamCmdForcePlatformType linux \
+login anonymous \ +login anonymous \
+app_info_update 1 \
+force_install_dir '${ETS2_DIR}' \
+app_update '${APP_ID}' validate \ +app_update '${APP_ID}' validate \
+quit +quit
" "
echo INSTALL_RESULT=$?
echo "六、安装 server.sh 管理脚本"
mkdir -p "${ETS2_BIN_DIR}" if [ "${INSTALL_RESULT}" -ne 0 ]; then
echo "[WARN] 第一次安装失败,尝试清理 SteamCMD 缓存后重试..."
rm -rf "${TMP_SCRIPT_DIR}" 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}" git clone "${SCRIPT_REPO}" "${TMP_SCRIPT_DIR}" 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
"
if [ -f "${TMP_SCRIPT_DIR}/server.sh" ]; then INSTALL_RESULT=$?
mv "${TMP_SCRIPT_DIR}/server.sh" "${ETS2_BIN_DIR}/server.sh" fi
chmod +x "${ETS2_BIN_DIR}/server.sh"
rm -rf "${TMP_SCRIPT_DIR}" set -e
else
echo "错误:没有找到 server.sh" 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 exit 1
fi fi
echo "[OK] ETS2 Dedicated Server 安装完成"
echo echo
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_BIN_DIR}/logs"
mkdir -p "${ETS2_DOC_DIR}/Euro Truck Simulator 2" mkdir -p "${ETS2_DOC_DIR}/Euro Truck Simulator 2"
chown -R "${STEAM_USER}:${STEAM_USER}" "${ETS2_BIN_DIR}" chown -R "${STEAM_USER}:${STEAM_USER}" "${STEAM_HOME}"
chown -R "${STEAM_USER}:${STEAM_USER}" "${ETS2_DOC_DIR}"
chmod -R 775 "${ETS2_BIN_DIR}" chmod -R 775 "${ETS2_BIN_DIR}" || true
chmod -R 775 "${ETS2_DOC_DIR}" chmod -R 775 "${ETS2_DOC_DIR}" || true
echo "[OK] 权限设置完成"
echo echo
echo "八、创建快捷命令" echo "十、创建快捷命令 ets2_sv"
ln -sfn "${ETS2_BIN_DIR}/server.sh" /usr/local/bin/ets2_sv rm -f "${ETS2_CMD}"
chmod +x /usr/local/bin/ets2_sv
echo cat > "${ETS2_CMD}" <<EOF
echo "九、是否立即执行一次 server.sh 初始化?" #!/usr/bin/env bash
if [ -t 0 ]; then SERVER_SCRIPT="${SERVER_SCRIPT_PATH}"
read -rp "是否现在执行一次?可能会进入服务器运行状态 [y/N]: " RUN_ONCE
case "${RUN_ONCE}" in if [ ! -f "\$SERVER_SCRIPT" ]; then
y|Y|yes|YES) echo "[ERROR] 找不到服务脚本: \$SERVER_SCRIPT"
echo "正在以 steam 用户执行 server.sh..." exit 1
sudo -u "${STEAM_USER}" bash "${ETS2_BIN_DIR}/server.sh"
;;
*)
echo "已跳过首次执行"
;;
esac
else
echo "非交互环境,跳过首次执行"
fi 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 "========================================"
echo
echo "仓库地址:"
echo "${REPO_HOST}.git"
echo
echo "当前分支:"
echo "${BRANCH}"
echo echo
echo "服务器目录:" echo "服务器目录:"
echo "${ETS2_DIR}" echo "${ETS2_DIR}"
@ -171,14 +280,22 @@ echo "配置目录:"
echo "${ETS2_DOC_DIR}/Euro Truck Simulator 2" echo "${ETS2_DOC_DIR}/Euro Truck Simulator 2"
echo echo
echo "管理脚本:" echo "管理脚本:"
echo "${ETS2_BIN_DIR}/server.sh" echo "${SERVER_SCRIPT_PATH}"
echo echo
echo "快捷命令:" echo "快捷命令:"
echo "ets2_sv" echo "ets2_sv"
echo echo
echo "如需设置 steam 用户密码:" echo "下一步:"
echo "sudo passwd steam" 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
echo "如需切换到 steam 用户:"
echo "su - steam"
echo "========================================" echo "========================================"