diff --git a/scripts/install-cmd-agent.sh b/scripts/install-cmd-agent.sh new file mode 100644 index 000000000..68716c802 --- /dev/null +++ b/scripts/install-cmd-agent.sh @@ -0,0 +1,83 @@ +#!/bin/bash +# CMD Agent 安装脚本 +# 在 CI Runner 宿主机上安装 CMD Agent 服务 + +set -e + +echo "=== 主机信息 ===" +echo "主机名: $(hostname)" +echo "IP: $(hostname -I 2>/dev/null || ip addr show | grep 'inet ' | awk '{print $2}' | tr '\n' ' ')" +echo "用户: $(whoami)" +echo "Runner 名称: ${RUNNER_NAME:-unknown}" + +# 检查是否已安装 +if [ -f /opt/xiaoxia-cmd-agent/server.py ] && systemctl is-active xiaoxia-cmd-agent &>/dev/null; then + echo "CMD Agent 已安装且运行中,跳过安装" + systemctl status xiaoxia-cmd-agent --no-pager + exit 0 +fi + +SUDO="" +[ "$(id -u)" != "0" ] && SUDO="sudo" + +SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" +SERVER_PY="$SCRIPT_DIR/../infra/cmd-agent/server.py" + +if [ ! -f "$SERVER_PY" ]; then + echo "ERROR: 找不到 server.py: $SERVER_PY" + exit 1 +fi + +echo "=== 开始安装 CMD Agent ===" + +# 创建目录 +$SUDO mkdir -p /opt/xiaoxia-cmd-agent +$SUDO cp "$SERVER_PY" /opt/xiaoxia-cmd-agent/server.py +$SUDO chmod +x /opt/xiaoxia-cmd-agent/server.py + +# 生成 token +TOKEN="xsa-$(openssl rand -hex 16)" +echo "TOKEN: $TOKEN" +echo "$TOKEN" | $SUDO tee /etc/xiaoxia-cmd-agent.token > /dev/null +$SUDO chmod 600 /etc/xiaoxia-cmd-agent.token + +# 修改监听地址为 0.0.0.0(新服务器需要远程访问) +$SUDO sed -i 's/("127.0.0.1", LISTEN_PORT)/("0.0.0.0", LISTEN_PORT)/' /opt/xiaoxia-cmd-agent/server.py + +# 创建 installed flag +echo "1" | $SUDO tee /etc/xiaoxia-cmd-agent.installed > /dev/null + +# 创建 systemd service +$SUDO tee /etc/systemd/system/xiaoxia-cmd-agent.service > /dev/null </dev/null | awk '{print $1}')" +echo "端口: 18888" +echo "Token: $TOKEN" + +# 验证 +curl -s -H "Authorization: $TOKEN" http://127.0.0.1:18888/status && echo "" || echo "本地验证失败"