58 lines
1.5 KiB
Bash
58 lines
1.5 KiB
Bash
#!/bin/sh
|
|
# OTA 更新脚本 - 使用 curl 断点下载
|
|
# 用法: sh ota_curl.sh <下载URL>
|
|
# 示例: sh ota_curl.sh http://example.com/maix-t11-v2.15.1.zip
|
|
|
|
set -e
|
|
|
|
APP_DIR="/maixapp/apps/t11"
|
|
BACKUP_BASE="$APP_DIR/backups"
|
|
TMP_DIR="/tmp/ota_curl"
|
|
PENDING_FILE="$APP_DIR/ota_pending.json"
|
|
|
|
if [ $# -lt 1 ]; then
|
|
echo "用法: $0 <下载URL>"
|
|
exit 1
|
|
fi
|
|
|
|
OTA_URL="$1"
|
|
FILENAME=$(basename "$OTA_URL" | sed 's/?.*//')
|
|
[ -z "$FILENAME" ] && FILENAME="update.zip"
|
|
|
|
mkdir -p "$TMP_DIR" "$BACKUP_BASE"
|
|
|
|
# 1. 断点下载
|
|
echo "[OTA] 开始下载: $OTA_URL"
|
|
echo "[OTA] 保存到: $TMP_DIR/$FILENAME"
|
|
curl -C - -L --retry 3 --retry-delay 5 -o "$TMP_DIR/$FILENAME" "$OTA_URL"
|
|
echo "[OTA] 下载完成"
|
|
|
|
# 2. 备份当前目录
|
|
TIMESTAMP=$(date +%Y%m%d_%H%M%S 2>/dev/null || echo "00000000_000000")
|
|
BACKUP_DIR="$BACKUP_BASE/backup_$TIMESTAMP"
|
|
mkdir -p "$BACKUP_DIR"
|
|
echo "[OTA] 备份到: $BACKUP_DIR"
|
|
for f in "$APP_DIR"/*.py "$APP_DIR"/*.json "$APP_DIR"/*.xml "$APP_DIR"/*.yaml "$APP_DIR"/*.pem "$APP_DIR"/*.mud "$APP_DIR"/*.so "$APP_DIR"/S99archery; do
|
|
[ -f "$f" ] && cp "$f" "$BACKUP_DIR/"
|
|
done
|
|
echo "[OTA] 备份完成"
|
|
|
|
# 3. 解压并替换文件
|
|
echo "[OTA] 开始更新..."
|
|
if echo "$FILENAME" | grep -qi '\.zip$'; then
|
|
unzip -q -o "$TMP_DIR/$FILENAME" -d "$APP_DIR/"
|
|
else
|
|
cp "$TMP_DIR/$FILENAME" "$APP_DIR/"
|
|
fi
|
|
sync
|
|
|
|
# 4. 写入 pending 文件(用于崩溃恢复)
|
|
echo '{"ts":0,"url":"'"$OTA_URL"'","backup_dir":"'"$BACKUP_DIR"'","restart_count":0,"max_restarts":3}' > "$PENDING_FILE"
|
|
sync
|
|
|
|
echo "[OTA] 更新完成,准备重启..."
|
|
|
|
# 5. 重启
|
|
sleep 1
|
|
reboot
|