pack.sh 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. #!/bin/bash
  2. # 打包部署文件,用于快速部署到其它 RK3568
  3. # 打包产物与 pack.sh 同目录 (deploy/)
  4. # 用法: ./deploy/pack.sh [-c] [-j N]
  5. # -c 打包前先编译
  6. # -j N 编译并行数 (默认 nproc)
  7. set -e
  8. DIR="$(cd "$(dirname "$0")/.." && pwd)"
  9. BUILD_DIR="$DIR/build"
  10. DEPLOY_DIR="$(cd "$(dirname "$0")" && pwd)"
  11. OUT_DIR="/tmp/rtsp_multi_view_deploy"
  12. TARBALL="$DEPLOY_DIR/rtsp_multi_view_aarch64_$(date +%Y%m%d_%H%M%S).tar.gz"
  13. DO_BUILD=0
  14. JOBS=${JOBS:-$(nproc)}
  15. while [ $# -gt 0 ]; do
  16. case "$1" in
  17. -c) DO_BUILD=1 ;;
  18. -j) JOBS="$2"; shift ;;
  19. *) echo "Unknown option: $1"; exit 1 ;;
  20. esac
  21. shift
  22. done
  23. if [ "$DO_BUILD" -eq 1 ]; then
  24. echo "== 编译 =="
  25. "$DIR/build.sh" -j "$JOBS"
  26. fi
  27. # 检查必要文件
  28. for f in "$BUILD_DIR/rtsp_multi_view" "$BUILD_DIR/plc_sim" "$DIR/plc_server.py" "$DIR/channels.conf" "$DEPLOY_DIR/install.sh"; do
  29. if [ ! -f "$f" ]; then
  30. echo "ERROR: $f 不存在,请先编译或检查文件" >&2
  31. exit 1
  32. fi
  33. done
  34. echo "== 准备打包目录 =="
  35. rm -rf "$OUT_DIR"
  36. mkdir -p "$OUT_DIR"/{bin,conf,models,scripts,fonts}
  37. echo "== 复制文件 =="
  38. # 二进制
  39. cp "$BUILD_DIR/rtsp_multi_view" "$OUT_DIR/bin/"
  40. cp "$BUILD_DIR/plc_sim" "$OUT_DIR/bin/"
  41. chmod +x "$OUT_DIR/bin/"*
  42. # 配置
  43. cp "$DIR/channels.conf" "$OUT_DIR/conf/"
  44. # 模型
  45. if [ -d "$DIR/models" ] && ls "$DIR/models/"* >/dev/null 2>&1; then
  46. cp "$DIR/models/"* "$OUT_DIR/models/"
  47. fi
  48. # 脚本
  49. cp "$DIR/plc_server.py" "$OUT_DIR/scripts/"
  50. cp "$DIR/plc_server.sh" "$OUT_DIR/scripts/"
  51. cp "$DIR/auto_reboot.sh" "$OUT_DIR/scripts/"
  52. chmod +x "$OUT_DIR/scripts/"*.sh
  53. # Logo
  54. if [ -f "$DIR/fltk.png" ]; then
  55. cp "$DIR/fltk.png" "$OUT_DIR/"
  56. fi
  57. # 中文字体(标题栏渲染用,避免目标机缺 wqy-microhei 时标题文字不显示)
  58. if [ -f "/usr/share/fonts/truetype/wqy/wqy-microhei.ttc" ]; then
  59. cp "/usr/share/fonts/truetype/wqy/wqy-microhei.ttc" "$OUT_DIR/fonts/"
  60. fi
  61. # 目标机安装脚本:复用统一的 deploy/install.sh(唯一维护源)
  62. cp "$DEPLOY_DIR/install.sh" "$OUT_DIR/install.sh"
  63. chmod +x "$OUT_DIR/install.sh"
  64. # 可选:离线依赖 deb(若 deploy/deps/ 存在则随包携带,install.sh 会自动使用)
  65. if [ -d "$DEPLOY_DIR/deps" ] && ls "$DEPLOY_DIR/deps/"*.deb >/dev/null 2>&1; then
  66. mkdir -p "$OUT_DIR/deps"
  67. cp "$DEPLOY_DIR/deps/"*.deb "$OUT_DIR/deps/"
  68. echo " 已包含离线依赖: $(ls "$DEPLOY_DIR/deps/"*.deb | wc -l) 个 deb"
  69. fi
  70. echo "== 生成打包 =="
  71. cd /tmp
  72. tar czf "$TARBALL" -C /tmp rtsp_multi_view_deploy
  73. rm -rf "$OUT_DIR"
  74. SIZE=$(du -h "$TARBALL" | cut -f1)
  75. echo ""
  76. echo "=========================================="
  77. echo " 打包完成!"
  78. echo "=========================================="
  79. echo " 文件: $TARBALL"
  80. echo " 大小: $SIZE"
  81. echo ""
  82. echo " 部署到目标机:"
  83. echo " scp $TARBALL root@<目标IP>:/tmp/"
  84. echo " ssh root@<目标IP>"
  85. echo " cd /tmp && tar xzf $(basename "$TARBALL") && cd rtsp_multi_view_deploy && ./install.sh"
  86. echo ""