对于 OpenWrt 用户来说,系统升级一直是个让人既期待又担心的话题。期待新功能和安全更新,又担心配置丢失或升级失败。今天,我们要介绍的主角 owut(OpenWrt Upgrade Tool)正是为了解决这些痛点而生。
什么是 owut?
owut 是一个专为 OpenWrt 设计的命令行升级工具,它的核心理念很简单:保留配置,无损升级。只需运行 owut upgrade,几分钟后你的设备就会自动重启,运行最新版本的 OpenWrt,而你的所有设置都完好如初。
主要特点
配置保留:自动备份和恢复系统配置
智能检测:检查包依赖、版本兼容性
灵活定制:支持添加/删除软件包
多种输出:可生成固件选择器或源码编译所需的包列表
预安装钩子:支持升级前自动执行自定义脚本
安装 owut
owut 已经成为 OpenWrt 的标准软件包,在以下版本中可用:
主线 SNAPSHOT(测试版)
24.10 及之后的稳定版
安装命令
24.10 稳定版(使用 opkg):
bash
opkg update && opkg install owut主线测试版(使用 apk):
bash
apk -U add owut升级 owut
虽然 owut 通常会随系统一起更新,但如果需要单独升级:
bash
# 24.10 稳定版
opkg update && opkg upgrade owut
# 主线测试版
apk -U upgrade owut快速上手:一键升级
最简单的使用方式就是直接运行升级命令:
bash
owut upgrade这个命令会自动完成以下步骤:
检查当前系统状态
对比可用的新版本
分析已安装包的变化
构建自定义固件
下载并验证固件
执行升级并重启
升级前的准备工作
重要:一定要先备份!
图形化备份(LuCI):
系统(System)→ 备份与升级(Backup/Flash firmware)→ 生成备份(Generate archive)
命令行备份:
bash
sysupgrade --create-backup /tmp/backup.tar.gz
# 然后将备份文件复制到安全位置
scp /tmp/backup.tar.gz user@your-computer:~/子命令详解
owut 提供了多个子命令,满足不同的使用需求:
实用示例
查看详细系统状态:
bash
owut check --verbose仅下载固件:
bash
owut download查看可用的 OpenWrt 版本:
bash
owut versions高级功能
1. 自定义软件包
想在升级时添加或删除某些包?使用 --add 和 --remove 参数:
bash
# 升级时替换 DNS 和流量控制工具
owut upgrade -r dnsmasq,tc-tiny -a "dnsmasq-full tc-full"也可以从文件读取包列表:
bash
cat > additions << EOF
nmap
bind-dig
tcpdump
EOF
owut download --add "$(cat additions)"2. 处理默认包变更
当系统默认包发生变化时(如从 firewall 切换到 firewall4),owut 会自动处理。如果你希望保留某些变更,可以使用 --ignored-changes:
bash
# 忽略 firewall 到 firewall4 的自动替换
owut upgrade --ignored-changes firewall3. 首次启动脚本(uci-defaults)
你可以在新固件首次启动时自动执行自定义脚本:
bash
# 创建自定义脚本
cat > my-init.sh << 'EOF'
#!/bin/sh
# 设置自定义主机名
uci set system.@system[0].hostname='MyRouter'
uci commit system
EOF
# 升级时包含该脚本
owut upgrade --init-script my-init.sh安全提示:脚本内容会发送到构建服务器,请不要包含敏感信息!
4. 调整文件系统类型
对于 x86、ARM 等设备,可以更改根文件系统类型:
bash
# 从 squashfs 切换到 ext4
owut upgrade --fstype ext45. 扩展根分区大小
对于存储空间较大的设备,可以增加根分区大小:
bash
# 临时设置(仅本次升级)
owut upgrade --rootfs-size 512
# 永久设置(写入配置)
uci set attendedsysupgrade.owut=owut
uci set attendedsysupgrade.owut.rootfs_size=512
uci commit注意:ASU 服务器通常限制最大 1024MB,因为构建过大的映像会消耗大量资源。
配置文件管理
为了避免每次升级都输入冗长的命令行参数,可以将常用设置写入配置文件:
bash
# 编辑 /etc/config/attendedsysupgrade
cat >> /etc/config/attendedsysupgrade << 'EOF'
config owut 'owut'
option rootfs_size 512
option verbosity 1
list ignored_defaults "kmod-drm-i915"
list ignored_defaults "kmod-dwmac-intel"
list ignored_changes "firewall"
option init_script '/etc/owut.d/custom-init.sh'
option pre_install '/etc/owut.d/pre-install.sh'
EOF查看当前配置效果:
bash
owut dump | grep -A20 '"options"'预安装脚本
owut 提供了一个强大的钩子:在验证固件后、实际安装前执行自定义脚本。这可用于自动备份、存档构建工件等操作。
示例脚本(/etc/owut.d/pre-install.sh):
bash
#!/bin/sh
# 创建备份目录
BACKUP_DIR="/etc/owut.d/backups"
mkdir -p "$BACKUP_DIR"
# 备份当前配置
sysupgrade --create-backup "$BACKUP_DIR/pre-upgrade-backup.tar.gz"
# 记录升级信息
date > "$BACKUP_DIR/last-upgrade.txt"
echo "升级到版本:$(owut check --quiet | grep Version-to)" >> "$BACKUP_DIR/last-upgrade.txt"
# 保存当前固件(如果需要)
cp /tmp/firmware.bin "$BACKUP_DIR/firmware-$(date +%Y%m%d-%H%M%S).bin"常见问题
Q1: 如何在不保留配置的情况下升级?
A: owut 没有直接提供这个选项(为了避免误操作)。可以分两步完成:
bash
owut download
sysupgrade -n /tmp/firmware.binQ2: 为什么我的 x86 设备不能设置 10GB 的根分区?
A: ASU 服务器限制最大 1024MB。构建超大映像会消耗过多服务器资源(构建 20GB 映像需要近 30 分钟,是 104MB 映像的 60 多倍)。
Q3: 如何切换不同的 ASU 服务器?
A: 编辑配置文件:
bash
uci set attendedsysupgrade.server.url="https://sysupgrade.guerra24.net"
uci commit可选的 ASU 服务器:
Guerra24 镜像:https://sysupgrade.guerra24.net(支持 4096MB 根分区)
LibreMesh:https://sysupgrade.antennine.org
ImmortalWrt:https://sysupgrade.kyarucloud.moe
Q4: 升级过程中出现包降级警告怎么办?
A: owut 默认会停止升级,如果需要继续,使用 --force 参数:
bash
owut upgrade --force但在使用前,最好在论坛确认是否安全。
最佳实践总结
永远先备份 - 无备份不升级
先检查再升级 -
owut check可以提前发现问题配置持久化 - 常用参数写入配置文件
测试环境验证 - 重要设备先在测试机上升级
关注论坛 - 了解其他用户的使用经验
结语
owut 代表了 OpenWrt 系统升级的发展方向:智能、安全、可定制。它不仅简化了升级流程,还提供了丰富的定制选项,让高级用户能够精细控制整个过程。无论你是刚接触 OpenWrt 的新手,还是经验丰富的老用户,owut 都能帮你更优雅地管理系统更新。
如果在使用中遇到问题,欢迎到 OpenWrt 论坛相关帖子 讨论,或提交 GitHub Issue。
快乐升级,稳定运行!
OpenWrt升级新选择:owut 命令行工具详解
https://niujinkai.com/archives/1773068840413.html
评论