对于 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

这个命令会自动完成以下步骤:

  1. 检查当前系统状态

  2. 对比可用的新版本

  3. 分析已安装包的变化

  4. 构建自定义固件

  5. 下载并验证固件

  6. 执行升级并重启

升级前的准备工作

重要:一定要先备份!

图形化备份(LuCI):
系统(System)→ 备份与升级(Backup/Flash firmware)→ 生成备份(Generate archive)

命令行备份:

bash

sysupgrade --create-backup /tmp/backup.tar.gz
# 然后将备份文件复制到安全位置
scp /tmp/backup.tar.gz user@your-computer:~/

子命令详解

owut 提供了多个子命令,满足不同的使用需求:

子命令

功能描述

check

检查系统状态,显示详细的版本和包信息

list

生成已安装软件包列表

blob

显示发送给 ASU 服务器的 JSON 请求数据

download

仅下载固件,不安装

verify

验证已下载的固件

install

安装指定的本地固件

upgrade

下载、验证并安装固件(一键升级)

versions

列出所有可用的 OpenWrt 版本

dump

导出内部数据结构(调试用)

实用示例

查看详细系统状态:

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 firewall

3. 首次启动脚本(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 ext4

5. 扩展根分区大小

对于存储空间较大的设备,可以增加根分区大小:

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.bin

Q2: 为什么我的 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 服务器:

Q4: 升级过程中出现包降级警告怎么办?

A: owut 默认会停止升级,如果需要继续,使用 --force 参数:

bash

owut upgrade --force

但在使用前,最好在论坛确认是否安全。

最佳实践总结

  1. 永远先备份 - 无备份不升级

  2. 先检查再升级 - owut check 可以提前发现问题

  3. 配置持久化 - 常用参数写入配置文件

  4. 测试环境验证 - 重要设备先在测试机上升级

  5. 关注论坛 - 了解其他用户的使用经验

结语

owut 代表了 OpenWrt 系统升级的发展方向:智能、安全、可定制。它不仅简化了升级流程,还提供了丰富的定制选项,让高级用户能够精细控制整个过程。无论你是刚接触 OpenWrt 的新手,还是经验丰富的老用户,owut 都能帮你更优雅地管理系统更新。

如果在使用中遇到问题,欢迎到 OpenWrt 论坛相关帖子 讨论,或提交 GitHub Issue

快乐升级,稳定运行!