OpenWrt 系统自动在线更新工具。命令行 + LuCI 双界面,支持定时升级、一键更新、镜像加速、断点续传。
- 命令行 + LuCI 双入口:SSH 里
soup -T一键测试,LuCI 页面点按钮升级 - 多下载器支持:aria2c / wget-ssl / curl / wget / uclient-fetch,可配置或命令行指定
- 镜像加速:支持多个 GitHub 镜像,随机打乱 + 逐镜像重试,直连垫底,避开限流
- 自定义升级源:从服务器拉取 JSON 清单
- 定时升级:weekly / monthly 两种计划,4 个独立高级开关
- x86 引导方式:自动探测 UEFI/BIOS,可手动指定
- SHA256 校验:下载后校验,防止损坏
- 固件格式:.img / .img.gz / .gz / .zip 全支持,自动解压
- 日志持久化:设备重启后保留最近一次升级记录
soup -T # 测试模式:下载 + 校验,不刷写
soup # 手动升级(保留配置)
soup -n # 升级(不保留配置)
soup --list # 打印系统信息
soup --help # 完整帮助更新固件:
-n 不保留配置更新固件
-u 适用于定时更新(跳过交互)
-f 跳过版本校验 + 强制刷写(危险)
-F, --force-flash 强制刷写(危险)
-D <Downloader> 指定下载器
可选: aria2c | wget-ssl | wget | curl | uclient-fetch
-P, --proxy <URL> 临时指定镜像(覆盖 Mirror_List,逗号分隔多个)
--decompress 解压 .img.gz / .zip 后再刷写
--skip-verify 跳过 SHA256 校验(危险)
--path <PATH> 固件下载到指定路径
更新脚本:
-x 自动更新 soup 程序
-x -path <PATH> 更新到指定路径
-x -url <URL> 从指定 URL 更新
其他:
--help 打印帮助
-T 测试模式(下载+校验,不刷写)
-B, --boot-mode <TYPE> x86 引导方式(UEFI / BIOS / auto)
-C, --api-url <URL> 更改 API 地址
--api 打印当前 API 内容
--backup [PATH] 备份系统配置
--chk 检查运行环境
--clean 清理缓存
--flag <FLAG> 更改固件标签
--flag -reset 恢复默认固件标签
--fw-log < | *> 打印云端更新日志
--env <ENV> [ENV]... 打印环境变量
--log 打印运行日志
-clean 清空运行日志
-del / -rm 同 -clean
-path <PATH> 更改日志保存路径(需配合 --log)
--list 打印系统信息
--reset 重置运行环境
--verbose 打印详细下载信息
-v < | [Cc]loud> 打印当前 / 云端脚本版本
-V < | [Cc]loud> 打印当前 / 云端固件版本
# 换镜像加速(临时,当次有效)
soup -T -P https://aa.com
# 多个镜像
soup -T -P "https://aa.com,https://bb.com"
# 用 curl 下载(弱网/代理环境)
soup -T -D curl
# 强制刷写固件
soup -F
# 更新 soup 程序自身
soup -x
# 打印云端更新日志
soup --fw-logcustom (用户覆盖) > default (出厂默认) > 内置默认值
custom 里只存"与 default 不同的值"。改回默认值时,custom 里对应行会被自动删除。
# 核心
Github=https://github.com/user/repo
TARGET_FLAG=oR
Log_Path=/tmp
# 镜像
Mirror_List=https://aa.com,https://bb.com
Mirror_Random=1 # 1=随机打乱 0=固定顺序
Mirror_Retry=1 # 每个镜像重试次数
# 下载器(auto = 走默认优先级列表)
Downloader=auto
# x86 引导(auto = 自动探测)
x86_Boot_Method=auto不指定下载器时,按以下顺序尝试(第一个可用即用):
aria2c > wget-ssl > curl > wget > uclient-fetch
指定下载器时(LuCI 下拉框 或 -D),全链路统一使用:
| 场景 | auto | 指定 curl |
|---|---|---|
| 拉 API 清单 | wget-ssl | curl |
| 拉云端日志 | wget-ssl | curl |
| 下载固件 | aria2c | curl |
-v cloud 拉脚本 |
aria2c | curl |
-x 更新脚本 |
aria2c | curl |
为什么 auto 时拉 API 用 wget-ssl 而非 aria2c?
API / 云端日志是小文件(几 KB),aria2c 的启动开销(~100ms)不划算。轻量的 wget-ssl/curl 更合适。固件(~200MB)才值得用 aria2c 多线程。
LuCI 页面勾选 Enable Scheduled Upgrade → 设置计划 → 保存。
# 每周一 3:30,带 --decompress
uci set soup.@soup[0].enable=1
uci set soup.@soup[0].schedule_type=weekly
uci set soup.@soup[0].week=1
uci set soup.@soup[0].hour=3
uci set soup.@soup[0].minute=30
uci set soup.@soup[0].decompress=1
uci commit soup
/etc/init.d/soup restart生成的 cron 任务:
30 3 * * 1 /usr/bin/soup -u --decompress ## soup crontab
uci set soup.@soup[0].enable=0
uci commit soup
/etc/init.d/soup restart- 分隔符:
逗号/分号/空格 - 空值 = 直连 GitHub
- 单用户:关掉随机,把最快的镜像放第一位
Mirror_List=https://aa.com,https://bb.com,https://cc.com Mirror_Random=0
- 多用户:保持随机,分散负载
Mirror_Random=1
soup --chk检查项:jq / sysupgrade / 各下载器 / HiCloud / GitHub / 必填环境变量。
| 症状 | 原因 | 处理 |
|---|---|---|
API 请求错误 |
网络不通 / 镜像挂 | 换镜像 或 -P 指定 |
云端未找到适配本机的固件 |
标签/设备/格式不匹配 | 检查 TARGET_FLAG / TARGET_PROFILE |
固件下载失败 |
镜像不稳 | 换镜像 / 加 -D wget-ssl |
SHA256 校验失败 |
文件损坏 / 缓存残留 | 清 /tmp/soup/ 重下 |
| LuCI 页面打不开 | controller 语法错 / 缓存 | rm -rf /tmp/luci-* + 重启 uhttpd |
-v cloud 失败 |
Script_Url 路径 404 |
检查 GitHub 仓库 |
# 实时日志
tail -f /tmp/soup.log
# 最近一次升级(重启后保留)
cat /etc/soup/last.log
# 命令行
soup --log本项目部分代码参考了 Hyy2001X/AutoBuild-Actions-BETA, 在此特别感谢原作者 Hyy2001X。
原始项目的模块化设计、镜像加速、固件挑选逻辑为 soup 提供了重要基础。
MIT
- GitHub Issues: https://github.com/ilxp/openwrt-soup/issues
- 运行日志 + 系统信息:
soup --log+soup --list