路由器更新 OpenWrt 固件一般步骤

没想到 OpenWrt 小版本的升级也差不多相当于重新刷固件了。可能是我还有什么每搞清楚的地方。已经勾选了保存现有配置,升级后无线配置至少是还在。可是网页管理界面能打开,但是无法登录进去。然后固件之外自定义安装的软件还会在升级过程中消失。其实升级过程仅仅是比安装过程少了一些配置方面的工作。

踩了一些坑之后就整理了一下一般的升级流程,免得一次又一次踩坑。

2022-04-02 根据在 Netgear R8000 上从 OpenWRT 19.07.3 升级到 OpenWRT 21.02.2 的过程修改和增加了部分内容。

参考流程

  1. 下载升级固件。通过 OpenWRT 固件库搜索和下载对应的升级固件包。(这里仅仅针对后缀为 .chk 的固件包做了尝试。)
  2. 下载保存当前的配置文件。通过 OpenWRT 网页版管理界面的「系统」== 「备份/升级固件」页面可以生成和下载当前路由器配置文件。
  3. 停用 Scheduled Tasks,等完成全部升级内容之后再恢复。这个主要是防止自己配置的一些自动化脚本会在升级过程中重启路由器之类的。通过 OpenWRT 网页版管理界面的「系统」== 「计划任务」页面,将其中的 crontab 条目剪切出来保存到本地文本文件中即可。
  4. 通过 OpenWRT 网页版管理界面的「系统」== 「备份/升级固件」页面中的「Flash new firmware image」上传并升级固件,也可以通过 SSH 到路由器的命令行界面(sysupgrade)执行固件升级升级时勾选保留当前配置
    网页版操作很简单,不多说。下面是通过 SSH 升级固件需要用到的指令。先上传下载好的固件,

    $ scp openwrt-19.07.3-bcm53xx-netgear-r8000-squashfs.chk root@192.168.1.1:/tmp

    在路由器中通过命令行升级,例如,

    # sysupgrade -v /tmp/openwrt-19.07.3-bcm53xx-netgear-r8000-squashfs.chk
  5. 路由器升级之后会自动重启,如果没有,可以手动重启一下。重启之后应该可以自动连接上无线热点或者有线连接。不出意外的话应该已经可以上网了。PPPoE 自动拨号什么的不会受影响。如果遇到网页管理界面可以访问但是不能登录进去,可以清空一下浏览器缓存,或者换用浏览器的隐身模式。这个网络管理界面 LuCI 无法登入可能是浏览器缓存的问题,使用浏览器的隐身模式很容易检查。实在不行还可以 SSH 登录命令行界面。
  6. 2022-04-02 在升级到 OpenWRT 21.02.2 的过程中遇到了几个问题,见这里的说明。升级之后访问「网络」页面会提示迁移网桥配置(Network bridge configuration migration)「The existing network configuration needs to be changed for LuCI to function properly. Upon pressing “Continue”, bridges configuration will be updated and the network will be restarted to apply the updated configuration.」按照提示下一步即可自动完成迁移。
  7. 禁用自定义的 dnsmasq 的配置文件,恢复普通的网络访问能力,
    # mv /etc/dnsmasq.d /etc/dnsmasq.d.bak
    # /etc/init.d/dnsmasq retart
  8. 重新安装自己后来增加的各种应用,例如下面这样。
    下面一次性安装所有需要的软件包。将有冲突的配置文件先记录下来。遇到安装失败的可以多试几次。

    # # 文本编辑器 vim
    # opkg update && opkg install vim-full diffutils
    
    # # USB 驱动
    # opkg update && opkg install block-mount e2fsprogs kmod-fs-ext4 kmod-usb-storage kmod-usb2 kmod-usb3
    
    # # SS
    # opkg update && opkg install libustream-wolfssl ca-bundle ca-certificates etherwake openvpn-openssl shadowsocks-libev-config shadowsocks-libev-ss-local shadowsocks-libev-ss-redir shadowsocks-libev-ss-rules shadowsocks-libev-ss-tunnel ipset libpthread haveged curl bind-dig
    
    # # DNSMasq
    # opkg update && opkg remove dnsmasq && opkg install dnsmasq-full
    
    # # WireGuard
    # opkg update && opkg install kmod-wireguard wireguard-tools luci-proto-wireguard luci-app-wireguard qrencode
    
    # # 打印机
    # opkg update && opkg install kmod-usb-printer kmod-lp p910nd
    
    # # 扫描仪
    # opkg update && opkg install xinetd sane-daemon sane-frontends sane-xerox_mfp

    注:新版本的 OpenWRT 使用 libustream-wolfssl 软件包替换了原来的 libustream-mbedtls 来提供 /lib/libustream-ssl.so 库文件。

    安装并配置使用 vim 的代码高亮和文档比较编辑功能。详情参照这篇文章

    # sed -i 's/"\?set number/set number/' /usr/share/vim/vimrc
    # sed -i 's/"\?set rnu/set rnu/' /usr/share/vim/vimrc

    升级所有现有软件包,

    # opkg update && opkg upgrade $(opkg list-upgradable | awk '{print $1}')

    看提示有几个配置文件跟原来的不一样,需要先记下来,等下一个个再整。例如,(仅仅是举个例子),

    Collected errors:
    * resolve_conffiles: Existing conffile /etc/config/luci is different from the conffile in the new package. The new conffile will be placed at /etc/config/luci-opkg.
    * resolve_conffiles: Existing conffile /etc/config/ucitrack is different from the conffile in the new package. The new conffile will be placed at /etc/config/ucitrack-opkg.
    * resolve_conffiles: Existing conffile /etc/config/uhttpd is different from the conffile in the new package. The new conffile will be placed at /etc/config/uhttpd-opkg.

    使用刚刚配置好的 vimdiff 来比较和编辑上面列出的冲突的配置文件。例如,

    # vimdiff /etc/config/luci /etc/config/luci-opkg

    根据经验修改吧。保存之后如果觉得新的配置文件没用了可以直接删除,

    # rm /etc/config/luci-opkg
  9. 如果 U 盘没有自动挂载,最后再恢复 USB 盘的访问
    # ls -al /dev/sd*
    # block detect | uci import fstab
    # uci set fstab.@mount[0].enabled='1' && uci set fstab.@global[0].check_fs='1' && uci commit fstab
    # /etc/init.d/fstab boot
    # mount /dev/sda1 /home

    如果需要指定 USB 设备的挂载点,需要通过「系统」==「挂载点」页面编辑并启用配置项,当然也可以直接编辑配置文件 /etc/config/fstab,如

    config mount
            option uuid '0758853d-c6e1-4eae-bac9-e46c9502b57d'
            option enabled '1'
            option target '/home'

    恢复 /etc/dnsmasq.d

    # mv /etc/dnsmasq.d.bak /etc/dnsmasq.d
  10. 恢复 Scheduled Tasks 并重启路由器</>

跟之前的 OpenWrt 安装相比,上面重新安装 OpenWrt 19.07.3 中的软件的时候增加了 libipset13,这是因为新版本中该库文件从 ipset 软件包中分离出来了,需要主动安装它,否则部署 SS 的时候就无法使用 ipset 来配置自动分类代理功能了。©

本文发表于水景一页。永久链接:<https://cnzhx.net/blog/general-steps-to-upgrade-openwrt-in-home-router/>。转载请保留此信息及相应链接。

2 条关于 “路由器更新 OpenWrt 固件一般步骤” 的评论

  1. 引用通告: 升级路由器固件 OpenWRT 18.06.5 到 19.07.0(更新 19.07.3) | 水景一页

  2. 引用通告: OpenWrt 19.07.3 升级到 OpenWrt 21.02.2 遇到的问题 | 水景一页

时间过去太久,评论已关闭。
如果您有话要说,请到讨论区留言并给出此文章链接。
谢谢您的理解 :-)