#!/bin/bash # 离线升级包构建脚本 # 编译所有组件并打包,可在无网络的生产设备上完整部署 set -e SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" PROJECT_DIR="$(cd "$SCRIPT_DIR/.." && pwd)" PACKAGE_NAME="safesight-upgrade-$(date +%Y%m%d-%H%M%S)" BUILD_DIR="/tmp/$PACKAGE_NAME" echo "========== 构建离线升级包 ==========" echo "" # 编译 echo "[1/3] 编译 Edge Server..." cd "$PROJECT_DIR" bash scripts/build.sh -m -j4 echo "[2/3] 编译 Agent..." cd "$PROJECT_DIR/agent" go build -o safesight-edge-agent ./cmd/safesight-agent cd "$PROJECT_DIR" # 打包 echo "[3/3] 打包..." mkdir -p "$BUILD_DIR" # 核心二进制 cp build/safesight-edge-server "$BUILD_DIR/" cp agent/safesight-edge-agent "$BUILD_DIR/" # 部署脚本和配置 cp scripts/deploy.sh "$BUILD_DIR/" cp scripts/upgrade-from-old.sh "$BUILD_DIR/" cp -r scripts/deploy/ "$BUILD_DIR/deploy/" # 插件和库 if [ -d build/plugins ]; then mkdir -p "$BUILD_DIR/plugins" cp build/plugins/*.so "$BUILD_DIR/plugins/" 2>/dev/null || true fi find build/ -maxdepth 1 -name '*.so' -exec cp {} "$BUILD_DIR/" \; 2>/dev/null || true # web 静态文件 if [ -d web ]; then cp -r web "$BUILD_DIR/" fi # 模型文件 if [ -d models ]; then mkdir -p "$BUILD_DIR/models" cp models/*.rknn "$BUILD_DIR/models/" 2>/dev/null || true fi # 配置文件 if [ -d configs ]; then mkdir -p "$BUILD_DIR/configs" cp -r configs/templates "$BUILD_DIR/configs/" 2>/dev/null || true cp -r configs/profiles "$BUILD_DIR/configs/" 2>/dev/null || true cp -r configs/overlays "$BUILD_DIR/configs/" 2>/dev/null || true fi # 运维脚本 if [ -f scripts/ops.sh ]; then cp scripts/ops.sh "$BUILD_DIR/"; fi if [ -f scripts/monitor_hw.sh ]; then cp scripts/monitor_hw.sh "$BUILD_DIR/"; fi if [ -f scripts/ddr_mode.sh ]; then cp scripts/ddr_mode.sh "$BUILD_DIR/"; fi # 创建说明文件 cat > "$BUILD_DIR/README.txt" << 'EOF' 离线升级包 - SafeSight Edge Server ==================================== 新设备(从新系统安装): sudo ./deploy.sh install (需要 AGENT_TOKEN 参数) 已部署过 safesight-edge-server 的设备升级: sudo ./deploy.sh upgrade 首次从旧版 rk3588-media-server/3588admin 升级: sudo ./upgrade-from-old.sh EOF cd /tmp tar -czf "$PROJECT_DIR/$PACKAGE_NAME.tar.gz" "$PACKAGE_NAME" rm -rf "$BUILD_DIR" echo "" echo "✓ 打包完成: $PROJECT_DIR/$PACKAGE_NAME.tar.gz" ls -lh "$PROJECT_DIR/$PACKAGE_NAME.tar.gz"