safesight-control/scripts/package.sh
tian 24b9400767 feat: 离线部署包一体化,启动自动导入种子数据,人脸库构建流程修复
- package.sh: 打包包含 configs 种子数据、tools 构建工具、deps 离线依赖、scripts 辅助脚本
- ImportSeedAssets: 首次启动检测空库自动导入 templates/profiles/overlays
- face_gallery.html: 添加构建人脸库按钮
- device.html: 无标准配置时显示设备实际模型/资源,无人脸库配置时隐藏按钮
- register-face-gallery.py: 手动注册已构建人脸库到 standard_resources
- deployment.md: 更新部署流程反映新包结构
- .gitignore: 排除 *.tar.gz 构建产物
2026-07-23 17:57:47 +08:00

116 lines
4.5 KiB
Bash
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/bin/bash
# 管理端离线部署包构建脚本
# 交叉编译 safesightd打包配置、种子数据、工具和部署脚本
set -e
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
PROJECT_DIR="$(cd "$SCRIPT_DIR/.." && pwd)"
EDGE_DIR="$(cd "$PROJECT_DIR/../safesight-edge" 2>/dev/null && pwd || echo '')"
PACKAGE_NAME="safesight-control-$(date +%Y%m%d-%H%M%S)"
BUILD_DIR="/tmp/$PACKAGE_NAME"
echo "========== 构建管理端离线部署包 =========="
echo "项目目录: $PROJECT_DIR"
[ -n "$EDGE_DIR" ] && echo "Edge 目录: $EDGE_DIR"
echo ""
# ── 编译 ──
echo "[1/6] 交叉编译..."
cd "$PROJECT_DIR"
mkdir -p "$BUILD_DIR"
CGO_ENABLED=0 GOOS=linux GOARCH=arm64 go build -ldflags="-s -w" -o "$BUILD_DIR/safesightd-linux-arm64" ./cmd/safesightd/ 2>/dev/null && echo " ✓ ARM64" || echo " ✗ ARM64 failed"
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -ldflags="-s -w" -o "$BUILD_DIR/safesightd-linux-amd64" ./cmd/safesightd/ 2>/dev/null && echo " ✓ AMD64" || echo " ✗ AMD64 failed"
# ── 部署文件 ──
echo "[2/6] 部署文件..."
mkdir -p "$BUILD_DIR/scripts"
cp scripts/deploy/safesightd.service "$BUILD_DIR/"
cp scripts/deploy/safesightd "$BUILD_DIR/" 2>/dev/null || true
cp scripts/deploy/import-assets.py "$BUILD_DIR/scripts/" 2>/dev/null || true
cp scripts/deploy/register-face-gallery.py "$BUILD_DIR/scripts/" 2>/dev/null || true
cp safesightd.json.example "$BUILD_DIR/safesightd.json.example" 2>/dev/null || true
echo " ✓ 部署脚本已复制"
# ── 种子配置数据 ──
echo "[3/6] 种子配置数据..."
SEED_SRC=""
if [ -n "$EDGE_DIR" ] && [ -d "$EDGE_DIR/configs" ]; then
SEED_SRC="$EDGE_DIR/configs"
elif [ -d "$PROJECT_DIR/seed-configs" ]; then
SEED_SRC="$PROJECT_DIR/seed-configs"
fi
if [ -n "$SEED_SRC" ]; then
mkdir -p "$BUILD_DIR/configs"
cp -r "$SEED_SRC/templates" "$BUILD_DIR/configs/" 2>/dev/null || true
cp -r "$SEED_SRC/profiles" "$BUILD_DIR/configs/" 2>/dev/null || true
cp -r "$SEED_SRC/overlays" "$BUILD_DIR/configs/" 2>/dev/null || true
echo " ✓ 种子数据 ($SEED_SRC)"
else
echo " ⚠ 找不到 configs 目录,跳过"
fi
# ── 人脸库构建工具 ──
echo "[4/6] 人脸库构建工具..."
if [ -d "$PROJECT_DIR/tools" ]; then
mkdir -p "$BUILD_DIR/tools"
cp -r "$PROJECT_DIR/tools/gallery_builder" "$BUILD_DIR/tools/" 2>/dev/null || true
cp "$PROJECT_DIR/tools/build_gallery.py" "$BUILD_DIR/tools/" 2>/dev/null || true
mkdir -p "$BUILD_DIR/tools/models"
cp "$PROJECT_DIR/tools/models"/*.onnx "$BUILD_DIR/tools/models/" 2>/dev/null || true
cp "$PROJECT_DIR/tools/models"/*.json "$BUILD_DIR/tools/models/" 2>/dev/null || true
echo " ✓ 构建工具已复制"
else
echo " ⚠ 找不到 tools 目录,跳过"
fi
# ── 离线 Python 依赖 ──
echo "[5/6] 离线 Python 依赖..."
mkdir -p "$BUILD_DIR/deps"
# 尝试下载 onnxruntime ARM64 wheel离线安装用
if command -v pip3 &>/dev/null; then
pip3 download onnxruntime numpy --platform linux_aarch64 --platform manylinux2014_aarch64 --only-binary=:all: -d "$BUILD_DIR/deps/" 2>/dev/null && echo " ✓ ARM64 wheels" || echo " ⚠ pip download 失败,跳过"
else
echo " ⚠ pip3 不可用,跳过"
fi
# ── README ──
echo "[6/6] 生成 README..."
cat > "$BUILD_DIR/README.txt" << 'EOF'
SafeSight Control 离线部署包
=============================
快速部署ARM64
sudo mkdir -p /opt/safesightd/{bin,config,data,scripts,tools}
sudo cp safesightd-linux-arm64 /opt/safesightd/bin/safesightd
sudo chmod +x /opt/safesightd/bin/safesightd
sudo cp safesightd.json.example /opt/safesightd/config/safesightd.json
sudo cp -r configs /opt/safesightd/
sudo cp -r tools /opt/safesightd/
sudo cp -r scripts /opt/safesightd/
sudo cp safesightd.service /etc/systemd/system/
sudo systemctl daemon-reload
sudo systemctl enable --now safesightd
初始化(首次部署必做):
sudo python3 /opt/safesightd/scripts/import-assets.py /opt/safesightd/configs
安装人脸库构建依赖(离线):
sudo pip3 install deps/*.whl
人脸库注册(如已有 face_gallery.db
sudo cp face_gallery.db /opt/safesightd/resources/standard_resources/face_gallery/
sudo python3 /opt/safesightd/scripts/register-face-gallery.py
打开 http://<IP>:18080
EOF
# ── 打包 ──
cd /tmp
tar -czf "$PROJECT_DIR/$PACKAGE_NAME.tar.gz" "$PACKAGE_NAME"
rm -rf "$BUILD_DIR"
echo ""
echo "========== 打包完成 =========="
echo "$PROJECT_DIR/$PACKAGE_NAME.tar.gz"
ls -lh "$PROJECT_DIR/$PACKAGE_NAME.tar.gz"