#!/bin/sh # ImmortalWrt 软路由一键升级脚本 # 用法: curl -fsSL <此脚本的raw地址> -o /tmp/upgrade.sh && sh /tmp/upgrade.sh FIRMWARE_URL="https://git.stickrouter.com/mike/AC2100/raw/branch/main/x86.img.gz" FIRMWARE_FILE="/tmp/x86.img.gz" echo "==========================================" echo " ImmortalWrt 固件升级脚本" echo "==========================================" echo "" echo "固件地址: $FIRMWARE_URL" echo "下载路径: $FIRMWARE_FILE" echo "" echo "[1/4] 正在下载固件..." rm -f "$FIRMWARE_FILE" wget -c -O "$FIRMWARE_FILE" "$FIRMWARE_URL" # 若首次下载中断,自动用续传方式重试,最多重试 3 次 RETRY=0 while [ $? -ne 0 ] && [ $RETRY -lt 3 ]; do RETRY=$((RETRY+1)) echo "下载中断,正在进行第 $RETRY 次续传重试..." sleep 3 wget -c -O "$FIRMWARE_FILE" "$FIRMWARE_URL" done if [ $? -ne 0 ]; then echo "" echo "!! 下载失败(已重试 3 次),请检查网络连接或固件地址是否正确" exit 1 fi echo "" echo "[2/4] 下载完成,检查文件..." if [ ! -s "$FIRMWARE_FILE" ]; then echo "!! 文件为空或不存在,下载可能已损坏" exit 1 fi FILESIZE=$(ls -l "$FIRMWARE_FILE" | awk '{print $5}') echo "文件大小: $FILESIZE 字节" if [ "$FILESIZE" -lt 10000000 ]; then echo "!! 文件大小异常偏小 (小于 10MB),可能下载不完整或链接返回了错误页面" echo "!! 为安全起见,已中止刷机流程" exit 1 fi echo "" echo "[3/4] 校验固件与设备兼容性..." sysupgrade -T "$FIRMWARE_FILE" if [ $? -ne 0 ]; then echo "!! 固件校验未通过,已中止刷机" echo "!! 如确认固件无误,可手动执行: sysupgrade -v $FIRMWARE_FILE" exit 1 fi echo "" echo "[4/4] 校验通过,5 秒后开始刷机..." echo "!! 刷机过程中请勿断电,设备将自动重启" sleep 5 sysupgrade -v "$FIRMWARE_FILE"