From 2fa82c4b31952fb5f7ccc21fed616042694b7847 Mon Sep 17 00:00:00 2001 From: mrlee <470349233@qq.com> Date: Wed, 23 Sep 2026 09:48:40 +0800 Subject: [PATCH] =?UTF-8?q?chore(scripts):=20=E7=BA=B3=E5=85=A5=20agent=20?= =?UTF-8?q?=E5=AE=89=E8=A3=85=E8=84=9A=E6=9C=AC=E5=B9=B6=E5=9B=BA=E5=AE=9A?= =?UTF-8?q?=20shell=20=E8=84=9A=E6=9C=AC=E8=A1=8C=E5=B0=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - .gitignore: scripts/ 改为 scripts/* 并例外 agent-install.sh - 新增 .gitattributes: *.sh text eol=lf --- .gitattributes | 2 ++ .gitignore | 4 ++- scripts/agent-install.sh | 63 ++++++++++++++++++++++++++++++++++++++++ 3 files changed, 68 insertions(+), 1 deletion(-) create mode 100644 .gitattributes create mode 100644 scripts/agent-install.sh diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..75dd0cf --- /dev/null +++ b/.gitattributes @@ -0,0 +1,2 @@ +# shell 脚本一律以 LF 入库与检出,避免在 Windows 上被 CRLF 破坏(Linux 端会报 bad interpreter) +*.sh text eol=lf diff --git a/.gitignore b/.gitignore index edd41bc..e70763c 100644 --- a/.gitignore +++ b/.gitignore @@ -7,4 +7,6 @@ cmd/fonu/web/dist/ /data/ .DS_Store .cursor/ -scripts/ +# scripts/ 下的本地辅助脚本不入库,但随仓库分发的 agent 安装脚本需要跟踪 +scripts/* +!scripts/agent-install.sh diff --git a/scripts/agent-install.sh b/scripts/agent-install.sh new file mode 100644 index 0000000..4f64f9b --- /dev/null +++ b/scripts/agent-install.sh @@ -0,0 +1,63 @@ +#!/usr/bin/env bash +set -eu + +if [ "$(id -u)" -ne 0 ]; then + echo "请使用 root 或 sudo 运行" >&2 + exit 1 +fi + +AGENT_BINARY=${1:-fonu-agent} +PREFIX=/usr/local/bin/fonu-agent +CONF_DIR=/etc/fonu-agent +CONF_FILE="$CONF_DIR/agent.env" +UNIT=/etc/systemd/system/fonu-agent.service +mkdir -p "$CONF_DIR" /var/lib/fonu-agent/certs +systemctl stop fonu-agent 2>/dev/null || true +TMP_PREFIX="${PREFIX}.new" +install -m 0755 "$AGENT_BINARY" "$TMP_PREFIX" +if [ ! -x "$TMP_PREFIX" ]; then + echo "agent 二进制安装失败:$TMP_PREFIX 不存在或不可执行" >&2 + exit 1 +fi +AGENT_VERSION=$($TMP_PREFIX -version 2>/dev/null) || { + echo "agent 二进制无法执行:$TMP_PREFIX" >&2 + rm -f "$TMP_PREFIX" + exit 1 +} +mv -f "$TMP_PREFIX" "$PREFIX" +if [ ! -x "$PREFIX" ]; then + echo "agent 原子替换失败:$PREFIX 不存在或不可执行" >&2 + exit 1 +fi +printf 'agent version: %s\n' "$AGENT_VERSION" + +if [ ! -f "$CONF_FILE" ]; then + umask 077 + printf 'FONU_AGENT_TOKEN=%s\n' "$(openssl rand -hex 32)" > "$CONF_FILE" +fi + +cat > "$UNIT" <<'UNIT' +[Unit] +Description=Fonu FRPS management agent +After=network-online.target nginx.service +Wants=network-online.target + +[Service] +Type=simple +EnvironmentFile=/etc/fonu-agent/agent.env +ExecStart=/usr/local/bin/fonu-agent +Restart=on-failure +RestartSec=3 +User=root + +[Install] +WantedBy=multi-user.target +UNIT + +systemctl daemon-reload +systemctl restart fonu-agent +systemctl enable fonu-agent +TOKEN=$(sed -n 's/^FONU_AGENT_TOKEN=//p' "$CONF_FILE") +echo "fonu-agent 已安装并启动" +echo "API: http://$(hostname -I 2>/dev/null | awk '{print $1}'):7700" +echo "Token: $TOKEN"