diff --git a/install.sh b/install.sh index 8bdf56e..b2cb987 100755 --- a/install.sh +++ b/install.sh @@ -293,8 +293,9 @@ build_from_source() { create_service() { echo -e "${BLUE}创建 systemd 服务...${NC}" - # 确保 run.sh 有执行权限 + # 确保启动脚本有执行权限 sudo chmod +x "$SOURCE_DIR/run.sh" + sudo chmod +x "$SOURCE_DIR/start-systemd.sh" sudo tee /etc/systemd/system/${SERVICE_NAME}.service > /dev/null </dev/null || true + + # 拉取最新代码 + if git pull 2>&1 > /dev/null; then + echo "代码更新完成" + fi + + # 检查 Go 环境 + if ! command -v go > /dev/null 2>&1; then + echo "错误: 未找到 Go 环境,无法编译" >&2 + exit 1 + fi + + # 更新依赖 + go mod download 2>&1 > /dev/null || true + + # 编译 + ARCH=$(uname -m) + case $ARCH in + x86_64) + ARCH="amd64" + ;; + aarch64|arm64) + ARCH="arm64" + ;; + *) + ARCH="amd64" + ;; + esac + + if GOOS=linux GOARCH=${ARCH} CGO_ENABLED=0 go build -buildvcs=false -ldflags="-w -s" -o "$BINARY_NAME" ./cmd/agent 2>&1; then + if [ -f "$BINARY_NAME" ] && [ -s "$BINARY_NAME" ]; then + chmod +x "$BINARY_NAME" + else + echo "错误: 编译失败,未生成二进制文件" >&2 + exit 1 + fi + else + echo "错误: 编译失败" >&2 + exit 1 + fi +} + +# 拉取最新源码并编译 +update_and_build + +# 设置环境变量 +export BACKEND_URL="$BACKEND_URL" + +# 直接运行二进制文件(systemd 会管理进程) +exec ./"$BINARY_NAME" +