Owut: OpenWrt Upgrade Tool

hello!

I’m currently running OpenWrt 24.10.5, with all the packages updated.

PS C:\Users\artemp> & 'ssh.exe' 'root@pronichkin-router.lan'
root@pronichkin-router.lan's password:


BusyBox v1.36.1 (2025-12-17 21:08:22 UTC) built-in shell (ash)

  _______                     ________        __
 |       |.-----.-----.-----.|  |  |  |.----.|  |_
 |   -   ||  _  |  -__|     ||  |  |  ||   _||   _|
 |_______||   __|_____|__|__||________||__|  |____|
          |__| W I R E L E S S   F R E E D O M
 -----------------------------------------------------
 OpenWrt 24.10.5, r29087-d9c5716d1d
 -----------------------------------------------------
root@Pronichkin-router:~# opkg update
Downloading https://downloads.openwrt.org/releases/24.10.5/targets/mediatek/filogic/packages/Packages.gz
Updated list of available packages in /var/opkg-lists/openwrt_core
Downloading https://downloads.openwrt.org/releases/24.10.5/targets/mediatek/filogic/packages/Packages.sig
Signature check passed.
Downloading https://downloads.openwrt.org/releases/24.10.5/packages/aarch64_cortex-a53/base/Packages.gz
Updated list of available packages in /var/opkg-lists/openwrt_base
Downloading https://downloads.openwrt.org/releases/24.10.5/packages/aarch64_cortex-a53/base/Packages.sig
Signature check passed.
Downloading https://downloads.openwrt.org/releases/24.10.5/targets/mediatek/filogic/kmods/6.6.119-1-6a9e125268c43e0bae8cecb014c8ab03/Packages.gz
Updated list of available packages in /var/opkg-lists/openwrt_kmods
Downloading https://downloads.openwrt.org/releases/24.10.5/targets/mediatek/filogic/kmods/6.6.119-1-6a9e125268c43e0bae8cecb014c8ab03/Packages.sig
Signature check passed.
Downloading https://downloads.openwrt.org/releases/24.10.5/packages/aarch64_cortex-a53/luci/Packages.gz
Updated list of available packages in /var/opkg-lists/openwrt_luci
Downloading https://downloads.openwrt.org/releases/24.10.5/packages/aarch64_cortex-a53/luci/Packages.sig
Signature check passed.
Downloading https://downloads.openwrt.org/releases/24.10.5/packages/aarch64_cortex-a53/packages/Packages.gz
Updated list of available packages in /var/opkg-lists/openwrt_packages
Downloading https://downloads.openwrt.org/releases/24.10.5/packages/aarch64_cortex-a53/packages/Packages.sig
Signature check passed.
Downloading https://downloads.openwrt.org/releases/24.10.5/packages/aarch64_cortex-a53/routing/Packages.gz
Updated list of available packages in /var/opkg-lists/openwrt_routing
Downloading https://downloads.openwrt.org/releases/24.10.5/packages/aarch64_cortex-a53/routing/Packages.sig
Signature check passed.
Downloading https://downloads.openwrt.org/releases/24.10.5/packages/aarch64_cortex-a53/telephony/Packages.gz
Updated list of available packages in /var/opkg-lists/openwrt_telephony
Downloading https://downloads.openwrt.org/releases/24.10.5/packages/aarch64_cortex-a53/telephony/Packages.sig
Signature check passed.
root@Pronichkin-router:~# opkg list-upgradable
root@Pronichkin-router:~#

decided to try out 25.12.

first of all, it’s a bit weird that owut is complaining about nftables being missed. I believe that owut has previously reported that some different flavor of this package was installed. Although I don’t recall the details.

root@Pronichkin-router:~# owut check --verbose --version-to 25.12
owut - OpenWrt Upgrade Tool 2026.01.13~2526d84b-r1 (/usr/bin/owut)
ASU-Server     https://sysupgrade.openwrt.org
Upstream       https://downloads.openwrt.org
Target         mediatek/filogic
Profile        xiaomi_redmi-router-ax6000-ubootmod
Package-arch   aarch64_cortex-a53
Root-FS-type   squashfs
Sys-type       sysupgrade
Version-from   24.10.5 r29087-d9c5716d1d (kernel 6.6.119)
Version-to     25.12.0-rc4 r32534-12374d88b9 (kernel 6.12.66)
Build-commit   https://git.openwrt.org/?p=openwrt/openwrt.git;a=shortlog;h=12374d88b9
Build-FS-type  squashfs
Build-at       2026-01-29T22:36:22Z (~4 days ago)
Image-prefix   openwrt-25.12.0-rc4-mediatek-filogic-xiaomi_redmi-router-ax6000-ubootmod
Image-URL      https://downloads.openwrt.org/releases/25.12.0-rc4/targets/mediatek/filogic
Image-file     openwrt-25.12.0-rc4-mediatek-filogic-xiaomi_redmi-router-ax6000-ubootmod-squashfs-sysupgrade.itb
Installed      239 packages
Top-level       93 packages
Default         35 packages
User-installed  66 packages (top-level only)

Package version changes:
(skipped because otherwise post seems to be too long for the forum)
22 packages were downgraded
199 packages are out-of-date

Automatic package replacements/removals:
  Package                             Replaced-by
  opkg                                apk-mbedtls
Details at https://sysupgrade.openwrt.org/json/v1/overview.json

Default package analysis:
  Default                             Provided-by
  nftables                            not installed

There are currently package build failures for 25.12.0-rc4 aarch64_cortex-a53:
  Feed: packages
    pigeonhole                        Sun Feb  1 21:35:02 2026 - not installed
    pillow                            Sun Feb  1 21:20:30 2026 - not installed
    python-flask-httpauth             Sun Feb  1 22:19:21 2026 - not installed
    python-frozenlist                 Sun Feb  1 21:20:46 2026 - not installed
    python-gevent                     Sun Feb  1 22:01:48 2026 - not installed
    python-gmpy2                      Sun Feb  1 21:21:29 2026 - not installed
    python-multidict                  Sun Feb  1 21:20:54 2026 - not installed
    python-psycopg2                   Sun Feb  1 21:22:06 2026 - not installed
    python-pyodbc                     Sun Feb  1 22:02:28 2026 - not installed
    python-pyopenssl                  Sun Feb  1 22:02:41 2026 - not installed
    python-ubus                       Sun Feb  1 21:22:47 2026 - not installed
    python-yarl                       Sun Feb  1 21:35:10 2026 - not installed
  Feed: telephony
    asterisk-chan-sccp                Sun Feb  1 22:50:17 2026 - not installed
  Feed: video
    cog                               Sun Feb  1 22:50:30 2026 - not installed
    qt5base                           Sun Feb  1 22:32:39 2026 - not installed
    qt5quick                          Sun Feb  1 22:32:11 2026 - not installed
    qt5quick-controls                 Sun Feb  1 22:35:45 2026 - not installed
    qt5script                         Sun Feb  1 22:32:26 2026 - not installed
    qt5svg                            Sun Feb  1 22:32:30 2026 - not installed
    qt5translations                   Sun Feb  1 23:03:28 2026 - not installed
    qt5virtualkeyboard                Sun Feb  1 23:03:28 2026 - not installed
    wpewebkit                         Sun Feb  1 22:38:15 2026 - not installed
22 package build failures don't affect this device, details at
  https://downloads.openwrt.org/releases/faillogs-25.12/aarch64_cortex-a53/

WARNING: There are 1 missing default packages, confirm this is expected before proceeding
WARNING: Checks reveal package downgrades, upgrade still possible with '--force'
root@Pronichkin-router:~#

anyhow, let’s try updating.

root@Pronichkin-router:~# owut upgrade --verbose --version-to 25.12 --force
owut - OpenWrt Upgrade Tool 2026.01.13~2526d84b-r1 (/usr/bin/owut)
ASU-Server     https://sysupgrade.openwrt.org
Upstream       https://downloads.openwrt.org
Target         mediatek/filogic
Profile        xiaomi_redmi-router-ax6000-ubootmod
Package-arch   aarch64_cortex-a53
Root-FS-type   squashfs
Sys-type       sysupgrade
Version-from   24.10.5 r29087-d9c5716d1d (kernel 6.6.119)
Version-to     25.12.0-rc4 r32534-12374d88b9 (kernel 6.12.66)
Build-commit   https://git.openwrt.org/?p=openwrt/openwrt.git;a=shortlog;h=12374d88b9
Build-FS-type  squashfs
Build-at       2026-01-29T22:36:22Z (~4 days ago)
Image-prefix   openwrt-25.12.0-rc4-mediatek-filogic-xiaomi_redmi-router-ax6000-ubootmod
Image-URL      https://downloads.openwrt.org/releases/25.12.0-rc4/targets/mediatek/filogic
Image-file     openwrt-25.12.0-rc4-mediatek-filogic-xiaomi_redmi-router-ax6000-ubootmod-squashfs-sysupgrade.itb
Installed      239 packages
Top-level       93 packages
Default         35 packages
User-installed  66 packages (top-level only)

Package version changes:
(skipped because otherwise post seems to be too long for the forum)
22 packages were downgraded
199 packages are out-of-date

Automatic package replacements/removals:
  Package                             Replaced-by
  opkg                                apk-mbedtls
Details at https://sysupgrade.openwrt.org/json/v1/overview.json

Default package analysis:
  Default                             Provided-by
  nftables                            not installed

There are currently package build failures for 25.12.0-rc4 aarch64_cortex-a53:
  Feed: packages
    pigeonhole                        Sun Feb  1 21:35:02 2026 - not installed
    pillow                            Sun Feb  1 21:20:30 2026 - not installed
    python-flask-httpauth             Sun Feb  1 22:19:21 2026 - not installed
    python-frozenlist                 Sun Feb  1 21:20:46 2026 - not installed
    python-gevent                     Sun Feb  1 22:01:48 2026 - not installed
    python-gmpy2                      Sun Feb  1 21:21:29 2026 - not installed
    python-multidict                  Sun Feb  1 21:20:54 2026 - not installed
    python-psycopg2                   Sun Feb  1 21:22:06 2026 - not installed
    python-pyodbc                     Sun Feb  1 22:02:28 2026 - not installed
    python-pyopenssl                  Sun Feb  1 22:02:41 2026 - not installed
    python-ubus                       Sun Feb  1 21:22:47 2026 - not installed
    python-yarl                       Sun Feb  1 21:35:10 2026 - not installed
  Feed: telephony
    asterisk-chan-sccp                Sun Feb  1 22:50:17 2026 - not installed
  Feed: video
    cog                               Sun Feb  1 22:50:30 2026 - not installed
    qt5base                           Sun Feb  1 22:32:39 2026 - not installed
    qt5quick                          Sun Feb  1 22:32:11 2026 - not installed
    qt5quick-controls                 Sun Feb  1 22:35:45 2026 - not installed
    qt5script                         Sun Feb  1 22:32:26 2026 - not installed
    qt5svg                            Sun Feb  1 22:32:30 2026 - not installed
    qt5translations                   Sun Feb  1 23:03:28 2026 - not installed
    qt5virtualkeyboard                Sun Feb  1 23:03:28 2026 - not installed
    wpewebkit                         Sun Feb  1 22:38:15 2026 - not installed
22 package build failures don't affect this device, details at
  https://downloads.openwrt.org/releases/faillogs-25.12/aarch64_cortex-a53/

WARNING: There are 1 missing default packages, confirm this is expected before proceeding
Request:
  Version 25.12.0-rc4 r32534-12374d88b9 (kernel 6.12.66)
Request hash:
  6990daba3c9ec13bd6c7ac214313fe36850a8d4cf6e958d8fc5c0f2b46c422e1
--
Status:   queued - 0 ahead of you
Progress:   0s total =   0s in queue +   0s in build
--
Status:   init
Progress:   1s total =   0s in queue +   1s in build
--
Status:   container_setup
Progress:   9s total =   0s in queue +   9s in build
--
Status:   validate_manifest
Progress:  31s total =   0s in queue +  31s in build
--
Status:   building_image
Progress:  59s total =   0s in queue +  59s in build
--
Status:   done
Progress:  62s total =   0s in queue +  62s in build

Build succeeded in  62s total =   0s in queue +  62s to build:
  version_number = 25.12.0-rc4
  version_code   = r32534-12374d88b9 (requested r32534-12374d88b9)
  kernel_version = 6.12.66
  rootfs_size_mb = default
  init-script    = no-init-script

Image source: https://sysupgrade.openwrt.org/store/6990daba3c9ec13bd6c7ac214313fe36850a8d4cf6e958d8fc5c0f2b46c422e1/openwrt-25.12.0-rc4-c2cf6427fd5a-mediatek-filogic-xiaomi_redmi-router-ax6000-ubootmod-squashfs-sysupgrade.itb
Image saved : /tmp/firmware.bin
Manifest    : /tmp/firmware-manifest.json
Verifying   : /tmp/firmware.bin (21250362 bytes) against /tmp/firmware.sha256sums
ERROR: ubus: Failed to invoke function 'exec' on object 'file'
 from: 'ubus call file exec { "command": "/bin/busybox", "params": [ "sha256sum", "-c", "/tmp/firmware.sha256sums" ] }'
This is a bug in 'owut/2026.01.13~2526d84b-r1', please report at
  https://github.com/efahl/owut/issues

In [anonymous function](), file /usr/bin/owut, line 110, byte 24:
  called from function [anonymous function] (/usr/bin/owut:256:58)
  called from function [anonymous function] (/usr/bin/owut:261:74)
  called from function [anonymous function] (/usr/bin/owut:270:55)
  called from function [anonymous function] (/usr/bin/owut:311:59)
  called from function verify_image (/usr/bin/owut:1988:29)
  called from anonymous function (/usr/bin/owut:2348:20)

 `           `  ${issue_url}\n`);`
  Near here -------------------^


root@Pronichkin-router:~#

so, it fails for some reason that I don’t understand. Is that a known issue?

That is indeed strange, what's the output from whatprovides?

$ opkg whatprovides nftables
What provides nftables
    nftables-json

That happens when either the rpcd-mod-file package is not installed, or is of the wrong version with respect to rpcd itself. If you list out all the rpcd* packages, the "base" ones should all be the same version (those that come from rpcd repo itself, for example, the luci and rrdns ones below come from "other" feeds).

$ opkg list-installed 'rpcd*'
rpcd            - 2025.09.01~bba95191-r1
rpcd-mod-file   - 2025.09.01~bba95191-r1
rpcd-mod-iwinfo - 2025.09.01~bba95191-r1
rpcd-mod-luci   - 20240305-r1
rpcd-mod-rpcsys - 2025.09.01~bba95191-r1
rpcd-mod-rrdns  - 20170710
rpcd-mod-ucode  - 2025.09.01~bba95191-r1

You can test it with some simple command like ls:

$ ubus call file exec '{"command":"ls"}'
{
        "code": 0,
        "stdout": "bin\nboot\n..."
}
1 Like

same as yours!

root@Pronichkin-router:~# opkg whatprovides nftables
What provides nftables
    nftables-json
root@Pronichkin-router:~#

hmm. I think my situation is the same as yours here?

root@Pronichkin-router:~# opkg list-installed 'rpcd*'
rpcd            - 2025.09.01~bba95191-r1
rpcd-mod-file   - 2025.09.01~bba95191-r1
rpcd-mod-iwinfo - 2025.09.01~bba95191-r1
rpcd-mod-luci   - 20240305-r1
rpcd-mod-rpcsys - 2025.09.01~bba95191-r1
rpcd-mod-rrdns  - 20170710
rpcd-mod-ucode  - 2025.09.01~bba95191-r1
root@Pronichkin-router:~#

Interesting. I get this instead.

root@Pronichkin-router:~# ubus call file exec '{"command":"ls"}'
Command failed: Unknown error
root@Pronichkin-router:~#

thanks for looking into this!

Hmm, there's definitely something wrong with the rpcd setup. Have you rebooted recently? That might be worth a try.

dangit. Yes, reboot apparently fixed everything.

root@Pronichkin-router:~# ubus call file exec '{"command":"ls"}'
{
        "code": 0,
        "stdout": "bin\ndev\netc\nlib\nlib64\nmnt\noverlay\nproc\nrom\nroot\nrun\nsbin\nsys\ntmp\nusr\nvar\nwww\n"
}
root@Pronichkin-router:~# /usr/bin/owut check --verbose
owut - OpenWrt Upgrade Tool 2026.01.13~2526d84b-r1 (/usr/bin/owut)
ASU-Server     https://sysupgrade.openwrt.org
Upstream       https://downloads.openwrt.org
Target         mediatek/filogic
Profile        xiaomi_redmi-router-ax6000-ubootmod
Package-arch   aarch64_cortex-a53
Root-FS-type   squashfs
Sys-type       sysupgrade
Version-from   24.10.5 r29087-d9c5716d1d (kernel 6.6.119)
Version-to     24.10.5 r29087-d9c5716d1d (kernel 6.6.119)
Build-commit   https://git.openwrt.org/?p=openwrt/openwrt.git;a=shortlog;h=d9c5716d1d
Build-FS-type  squashfs
Build-at       2025-12-17T21:08:22Z (~47 days ago)
Image-prefix   openwrt-24.10.5-mediatek-filogic-xiaomi_redmi-router-ax6000-ubootmod
Image-URL      https://downloads.openwrt.org/releases/24.10.5/targets/mediatek/filogic
Image-file     openwrt-24.10.5-mediatek-filogic-xiaomi_redmi-router-ax6000-ubootmod-squashfs-sysupgrade.itb
Installed      239 packages
Top-level       93 packages
Default         36 packages
User-installed  65 packages (top-level only)

Package version changes:
All packages are up-to-date

Default package analysis:
  Default                             Provided-by
  nftables                            nftables-json

There are currently package build failures for 24.10.5 aarch64_cortex-a53:
  Feed: packages
    python-flask-httpauth             Sun Feb  1 16:04:39 2026 - not installed
    python-gevent                     Sun Feb  1 15:58:16 2026 - not installed
    python-msgpack                    Sun Feb  1 15:20:26 2026 - not installed
3 package build failures don't affect this device, details at
  https://downloads.openwrt.org/releases/faillogs-24.10/aarch64_cortex-a53/

There are no changes, upgrade not necessary
root@Pronichkin-router:~#

will try upgrading later today. Thanks a ton for help!

1 Like

(yes, of course it worked. I should’ve known better. A reboot fixed everything.)

1 Like

Hi everyone,

I'm using owut to create custom firmware images with additional packages and uci-defaults scripts. However, I need to perform a clean installation (without preserving old settings), similar to sysupgrade -n.

Current workflow:

  1. Create custom image with packages and uci-defaults:
owut download --force \
    -a "package1 package2 package3" \
    -I /tmp/99-uci-defaults
  1. Install the image:
# Option A: owut upgrade (preserves old configs - NOT what I want)
# Option B: sysupgrade -n /tmp/firmware.bin (clean install - what I want)

The problem:

  • owut upgrade preserves old configurations, so my uci-defaults doesn't apply properly (old WiFi settings remain)
  • owut download + sysupgrade -n <firmware-file> works, but I need to detect the firmware filename automatically

Questions:

  1. Is there a built-in way to do clean install with owut? (e.g., owut install --no-restore or similar?)

  2. What's the recommended workflow for automated clean installs with custom packages?

  3. How can I reliably get the firmware filename created by owut download? Currently using:

FIRMWARE_FILE=$(find /tmp -maxdepth 1 -name "*.bin" -type f -mmin -10 | head -n 1)

My use case:

I'm automating firmware upgrades with a script that:

  • Creates backup
  • Downloads custom image with owut
  • Performs clean install to ensure uci-defaults are applied
  • Reboots with new configuration

Any suggestions for best practices would be appreciated!

System info:

  • OpenWrt version: 25.12.0-rc4
  • Device: GL.iNet GL-MT6000 (Flint 2)

Reporting success with configuration kept when using resize_fs in Owut (using official server)
as asked for on docs:guide-user:installation:sysupgrade.owut

Very minimal configuration, but static IP and passwd retained post upgrade.
Board: mvebu/cortexa72 - Globalscale MOCHAbin

1 Like

No, some commentary on it in the first FAQ question:
https://openwrt.org/docs/guide-user/installation/sysupgrade.owut#faq

As in the FAQ, which is what you're already doing.

The result of a successful owut download is always /tmp/firmware.bin (and some other files in /tmp), so no need to search. You can see some related file handling in example 3 of /etc/owut.d/pre-install.sh.

This deserves a separate response, so...

What are you seeing that is not being applied? The first-boot should do exactly what you need, without any extra work. If you are seeing otherwise, then there's something wrong in either the sysupgrade process or your uci-defaults and we should fix that.