The OpenWrt Firmware Selector

I whipped up a script that checks for broken package builds, compares them to what you have installed and tells you if an auc upgrade will succeed (I hope it does, anyhow :neutral_face:).

https://raw.githubusercontent.com/efahl/tools/main/src/pkg-scan.sh

If you download that to your router, and run it like this:

$ wget https://raw.githubusercontent.com/efahl/tools/main/src/pkg-scan.sh
$ chmod +x pkg-scan.sh
$ ./pkg-scan.sh --check --version-to 23.05.2

it should show you the currently broken packages for your device, and an indicator as to whether that will cause an issue. Here's example output on my x86 VM, take note of the "package build failures" section, where we see that cloudflared and wifidog are currently broken on in 23.05.2 for that device.

$ ./pkg-scan.sh --check -V 23.05.2
Board-name    generic
Target        x86/64
Package-arch  x86_64
Version-from  SNAPSHOT r24750-f1de1a090f (kernel 6.1.70)
Version-to    23.05.2 r23630-842932a63d (kernel 5.15.137)
Image-prefix  openwrt-23.05.2-x86-64-generic
Root-FS-type  ext4
Sys-type      combined-efi
Image-file    openwrt-23.05.2-x86-64-generic-ext4-combined-efi.img.gz
Build-at      2023-11-14T13:38:11.000000Z

Default package analysis:
  dnsmasq             - default package replaced/provided by dnsmasq-full
  libgcc              - default package replaced/provided by libgcc1
  libustream-mbedtls  - Warning: default package is not present
  nftables            - default package replaced/provided by nftables-json

There are currently package build failures for 23.05.2 x86_64:
  cloudflared      - Package not installed locally, you should be ok
  shared-mime-info - Package not installed locally, you should be ok
Details at https://downloads.openwrt.org/releases/faillogs-23.05/x86_64/packages/

Installed packages replaced in 23.05.2:
  No changes detected.

Installed packages not available in 23.05.2:
  No issues, all packages present.

Done, logged 76 of 259 entries in ./pkg-scan-installed.txt

To just print out the packages you need to append to the list on the firmware selector, use this:

$ ./pkg-scan.sh --list
auc bind-dig btop conntrack curl diffutils dmidecode dnsmasq-full ethtool fdisk gawk grep grub2 grub2-efi htop iperf3 iptables-nft kmod-lib-lzo kmod-nft-dup-inet kmod-nft-xfrm less libudev-zero lscpu luasocket luci luci-app-adblock luci-app-attendedsysupgrade luci-app-sqm luci-app-statistics luci-ssl-openssl luci-theme-openwrt-2020 mtr-json nmap ntpdate openssh-sftp-server pciutils snort3 strace tc-tiny tcpdump usbutils vim-full

Some caveats:

  1. The output from --list may contain packages that conflict with the default packages for your platform. The above example contains one such case, with dnsmasq-full, which replaces the basic dnsmasq package. The solution is simply to delete the replaced package (dnsmasq in this example) from the list of default packages to avoid a build conflict.

  2. You can get a full list of top-level packages by using --list --defaults. In this case, you'd use the generated list to replace the whole package list in the Firmware Selector. This might not work if you are upgrading versions and packages were renamed, added or deleted. For example, with some MediaTek devices the jump from 22.03 to 23.05 contains a refactoring of the kmods such that the 5G radio wouldn't work until you added a missing set of packages. When jumping versions it's probably best to just use --list and do some manual fixes to the resulting full list.

11 Likes