safesight/edge/scripts/package-offline.sh
tian 29d9ef5d0d refactor: 项目结构梳理 - 设备端/管理端对称布局
仓库结构:
  edge/     设备端(原根目录设备端代码整体移入)
  control/  管理端(清理后)
  docs/     文档(PRD 移入 design/)
  README.md 根导航(新增)

清理:
- control/.brainstorm 临时草稿删除
- control 根级重复文档(API表/PRD_04)并入 docs/design/
- control/plan.md -> docs/implementation/control-plan.md
- control/safesightd-linux-arm64 二进制取消版本控制(.gitignore)
- edge/transform 模型转换产物归入 models/,onnx/pt 大源文件取消跟踪(.gitignore)
- Readme.md(PRD) -> docs/design/PRD_Product_v1.2.md(避开 README 大小写冲突)

更新:
- 根 README.md 导航、docs/README.md 文档索引
- deployment.md/检查表路径加 edge/ 前缀
- .gitignore 重写(edge/control 分区规则)
2026-08-02 11:39:54 +08:00

106 lines
3.7 KiB
Bash

#!/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"
AGENT_VERSION="$(cat "$PROJECT_DIR/VERSION" 2>/dev/null || echo "1.0.0")"
AGENT_GIT_SHA="$(git rev-parse --short HEAD 2>/dev/null || echo "nogit")"
AGENT_BUILD_ID="$(date +%Y%m%d.%H%M%S)"
go build -trimpath -ldflags "-s -w -X main.Version=${AGENT_VERSION} -X main.BuildID=${AGENT_BUILD_ID} -X main.BuildType=release -X main.GitSHA=${AGENT_GIT_SHA}" -o safesight-edge-agent ./cmd/safesight-agent
echo " Agent 版本: V${AGENT_VERSION} (build ${AGENT_BUILD_ID}, git ${AGENT_GIT_SHA})"
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
if [ -f scripts/install_deps.sh ]; then cp scripts/install_deps.sh "$BUILD_DIR/"; fi
if [ -f scripts/setup-overlayroot.sh ]; then cp scripts/setup-overlayroot.sh "$BUILD_DIR/"; fi
if [ -f scripts/prepare-image.sh ]; then cp scripts/prepare-image.sh "$BUILD_DIR/"; fi
if [ -f scripts/init-device.sh ]; then cp scripts/init-device.sh "$BUILD_DIR/"; fi
# 系统硬件加速库(从当前设备复制,确保兼容)
mkdir -p "$BUILD_DIR/lib_deps"
for pattern in '/usr/lib/librknnrt.so*' '/usr/lib/aarch64-linux-gnu/librga.so*' '/usr/lib/aarch64-linux-gnu/librockchip_mpp.so*' '/usr/lib/aarch64-linux-gnu/libavcodec.so*' '/usr/lib/aarch64-linux-gnu/libavformat.so*' '/usr/lib/aarch64-linux-gnu/libavutil.so*' '/usr/lib/aarch64-linux-gnu/libswscale.so*' '/usr/lib/aarch64-linux-gnu/libswresample.so*'; do
cp $pattern "$BUILD_DIR/lib_deps/" 2>/dev/null || true
done
echo "库文件: $(ls $BUILD_DIR/lib_deps/ | wc -l)"
# 创建说明文件
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"