| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081 |
- #!/bin/bash
- # 同步代码到远端设备并编译
- # 用法: ./sync_build.sh # 同步所有设备
- # ./sync_build.sh 231 # 只同步 rk3576
- # ./sync_build.sh 232 # 只同步 rk3568
- set -o pipefail
- ROOT_DIR="$(cd "$(dirname "$0")" && pwd)"
- USER="root"
- PASS="123456"
- REMOTE_DIR="/root/zone_alarm"
- # 设备列表: 别名 IP
- DEVICES=(
- "rk3576 192.168.1.231 yolov5s_rk3576_int8.rknn"
- "rk3568 192.168.1.232 yolov5s_rk3568_int8.rknn"
- )
- # 过滤参数指定的设备
- if [ -n "$1" ]; then
- FILTERED=()
- for dev in "${DEVICES[@]}"; do
- name=$(echo "$dev" | awk '{print $1}')
- ip=$(echo "$dev" | awk '{print $2}')
- if [[ "$1" == "$name" || "$ip" == *"$1"* ]]; then
- FILTERED+=("$dev")
- fi
- done
- DEVICES=("${FILTERED[@]}")
- fi
- sync_and_build() {
- local name="$1"
- local ip="$2"
- local model="$3"
- echo "=========================================="
- echo "[${name}] ${ip} 同步中..."
- echo "=========================================="
- # 排除本地编译产物和依赖,远端自行生成
- sshpass -p "$PASS" rsync -az --delete \
- --exclude 'build/' \
- --exclude '.deps/' \
- --exclude '.git/' \
- "$ROOT_DIR/" "${USER}@${ip}:${REMOTE_DIR}/"
- if [ $? -ne 0 ]; then
- echo "[${name}] [ERROR] 同步失败"
- return 1
- fi
- echo "[${name}] [OK] 同步完成"
- # 自动修改 model_path
- sshpass -p "$PASS" ssh -o StrictHostKeyChecking=no "${USER}@${ip}" \
- "sed -i 's|\"model_path\": \"[^\"]*\"|\"model_path\": \"models/${model}\"|' ${REMOTE_DIR}/config/config.json"
- echo "[${name}] [OK] 模型已设置为 ${model}"
- echo "[${name}] 编译中..."
- sshpass -p "$PASS" ssh -o StrictHostKeyChecking=no "${USER}@${ip}" \
- "cd ${REMOTE_DIR} && bash build.sh 2>&1"
- if [ $? -ne 0 ]; then
- echo "[${name}] [ERROR] 编译失败"
- return 1
- fi
- echo "[${name}] [OK] 编译成功"
- }
- RESULT=0
- for dev in "${DEVICES[@]}"; do
- name=$(echo "$dev" | awk '{print $1}')
- ip=$(echo "$dev" | awk '{print $2}')
- model=$(echo "$dev" | awk '{print $3}')
- sync_and_build "$name" "$ip" "$model" || RESULT=1
- done
- echo "=========================================="
- if [ $RESULT -eq 0 ]; then
- echo "[全部完成]"
- else
- echo "[存在失败项,请检查上方日志]"
- fi
- exit $RESULT
|