[优化] 安装脚本更新

This commit is contained in:
ryan
2026-03-15 00:09:52 +08:00
parent 932f2fc6fa
commit 93bd3704e7
3 changed files with 35 additions and 29 deletions
+2 -1
View File
@@ -161,7 +161,8 @@ curl -fsSL https://raw.githubusercontent.com/Rain-kl/ATSFlare/main/scripts/insta
* `--server-url` 替换为实际控制面地址,例如 `http://192.168.1.10:3000` * `--server-url` 替换为实际控制面地址,例如 `http://192.168.1.10:3000`
* 默认安装目录为 `/opt/atsflare-agent` * 默认安装目录为 `/opt/atsflare-agent`
* 脚本会创建 `atsflare-agent.service` 并启动 systemd 服务 * 脚本会创建 `atsflare-agent.service` 并启动 systemd 服务
* 重复执行安装命令可用于升级 Agent 到最新 Release * 重复执行安装命令可用于重装或升级 Agent 到最新 Release
* 重装时会先删除整个安装目录,再重新生成 `agent.json`、本地状态和二进制;旧数据不会保留
## 典型使用流程 ## 典型使用流程
+14 -13
View File
@@ -415,19 +415,20 @@ curl -fsSL https://raw.githubusercontent.com/Rain-kl/ATSFlare/main/scripts/insta
| `--repo` | GitHub Release 仓库 | `Rain-kl/ATSFlare` | | `--repo` | GitHub Release 仓库 | `Rain-kl/ATSFlare` |
| `--no-service` | 不创建 systemd 服务 | - | | `--no-service` | 不创建 systemd 服务 | - |
安装脚本会: 安装脚本会:
1. 从 GitHub Releases 下载最新 Agent 二进制(`atsflare-agent-{os}-{arch}`) 1. 从 GitHub Releases 下载最新 Agent 二进制(`atsflare-agent-{os}-{arch}`)
2. 先下载到临时文件,再替换安装目录中的 Agent 二进制,避免覆盖运行中进程导致写入失败 2. 若检测到已存在安装目录,会先停止运行中的 `atsflare-agent` 服务并删除整个安装目录
3. 生成 `agent.json` 配置文件 3. 先下载到临时文件,再写入全新的安装目录,避免覆盖运行中进程导致写入失败
4. 创建 systemd 服务 `atsflare-agent.service` 4. 生成 `agent.json` 配置文件
5. 启动并启用自启 5. 创建 systemd 服务 `atsflare-agent.service`
6. 启动并启用自启
说明:
说明:
* 脚本可重复执行,用于升级到最新 Release
* 若检测到已运行的 `atsflare-agent` systemd 服务,会先停止服务、替换二进制,再重新启动 * 脚本可重复执行,用于重装或升级到最新 Release
* 已存在的 `agent.json` 不会被覆盖 * 若检测到已运行的 `atsflare-agent` systemd 服务,会先停止服务、清空安装目录,再重新安装
* 重装会删除旧的 `agent.json`、本地状态、缓存数据和旧二进制,因此节点会按新的 Token 或 Discovery Token 重新接入
### 7.2 管理端生成部署命令 ### 7.2 管理端生成部署命令
+19 -15
View File
@@ -37,6 +37,10 @@ Examples:
# Install with node-specific token # Install with node-specific token
install-agent.sh --server-url http://10.0.0.1:3000 --agent-token node-token-xyz install-agent.sh --server-url http://10.0.0.1:3000 --agent-token node-token-xyz
Notes:
Reinstall will remove the entire install directory before installing again,
including the old agent.json, local state, cached data, and downloaded binary.
EOF EOF
exit 0 exit 0
} }
@@ -99,13 +103,9 @@ fi
TAG=$(echo "$RELEASE_INFO" | grep -o '"tag_name"[[:space:]]*:[[:space:]]*"[^"]*"' | grep -o '"[^"]*"$' | tr -d '"') TAG=$(echo "$RELEASE_INFO" | grep -o '"tag_name"[[:space:]]*:[[:space:]]*"[^"]*"' | grep -o '"[^"]*"$' | tr -d '"')
echo "Latest release: ${TAG}" echo "Latest release: ${TAG}"
# Create install directory
echo "Installing to ${INSTALL_DIR}..."
mkdir -p "${INSTALL_DIR}/data"
# Download binary # Download binary
echo "Downloading ${ASSET_NAME}..." echo "Downloading ${ASSET_NAME}..."
TMP_BINARY="$(mktemp "${INSTALL_DIR}/atsflare-agent.tmp.XXXXXX")" TMP_BINARY="$(mktemp "/tmp/atsflare-agent.tmp.XXXXXX")"
cleanup() { cleanup() {
rm -f "$TMP_BINARY" rm -f "$TMP_BINARY"
} }
@@ -117,19 +117,26 @@ chmod +x "$TMP_BINARY"
SERVICE_WAS_ACTIVE="false" SERVICE_WAS_ACTIVE="false"
if [[ "$OS" == "linux" && "$SYSTEMCTL_AVAILABLE" == "true" ]] && systemctl is-active --quiet "$SERVICE_NAME"; then if [[ "$OS" == "linux" && "$SYSTEMCTL_AVAILABLE" == "true" ]] && systemctl is-active --quiet "$SERVICE_NAME"; then
SERVICE_WAS_ACTIVE="true" SERVICE_WAS_ACTIVE="true"
echo "Stopping running service before upgrade..." echo "Stopping running service before reinstall..."
systemctl stop "$SERVICE_NAME" systemctl stop "$SERVICE_NAME"
fi fi
if [[ -d "$INSTALL_DIR" ]]; then
echo "Removing existing installation directory: ${INSTALL_DIR}"
rm -rf "$INSTALL_DIR"
fi
echo "Installing to ${INSTALL_DIR}..."
mkdir -p "${INSTALL_DIR}/data"
mv -f "$TMP_BINARY" "${INSTALL_DIR}/atsflare-agent" mv -f "$TMP_BINARY" "${INSTALL_DIR}/atsflare-agent"
trap - EXIT trap - EXIT
# Generate config # Generate config
CONFIG_FILE="${INSTALL_DIR}/agent.json" CONFIG_FILE="${INSTALL_DIR}/agent.json"
if [[ ! -f "$CONFIG_FILE" ]]; then echo "Generating agent.json..."
echo "Generating agent.json..." if [[ -n "$AGENT_TOKEN" ]]; then
if [[ -n "$AGENT_TOKEN" ]]; then cat > "$CONFIG_FILE" <<CFGEOF
cat > "$CONFIG_FILE" <<CFGEOF
{ {
"server_url": "${SERVER_URL}", "server_url": "${SERVER_URL}",
"agent_token": "${AGENT_TOKEN}", "agent_token": "${AGENT_TOKEN}",
@@ -139,8 +146,8 @@ if [[ ! -f "$CONFIG_FILE" ]]; then
"request_timeout": 10000 "request_timeout": 10000
} }
CFGEOF CFGEOF
else else
cat > "$CONFIG_FILE" <<CFGEOF cat > "$CONFIG_FILE" <<CFGEOF
{ {
"server_url": "${SERVER_URL}", "server_url": "${SERVER_URL}",
"discovery_token": "${DISCOVERY_TOKEN}", "discovery_token": "${DISCOVERY_TOKEN}",
@@ -150,9 +157,6 @@ CFGEOF
"request_timeout": 10000 "request_timeout": 10000
} }
CFGEOF CFGEOF
fi
else
echo "Config file already exists, skipping generation"
fi fi
# Create systemd service # Create systemd service