From 30c7200a7a05d8543443b6cebb2bb05fdfed4c88 Mon Sep 17 00:00:00 2001 From: linyimin <18316471919@139.com> Date: Wed, 3 Jun 2026 13:21:06 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=96=B0=E7=89=88=E6=9C=ACota?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ota_curl.sh | 57 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 ota_curl.sh diff --git a/ota_curl.sh b/ota_curl.sh new file mode 100644 index 0000000..bddf4a9 --- /dev/null +++ b/ota_curl.sh @@ -0,0 +1,57 @@ +#!/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