OpenWrt Upgrade auf 8-MiB-Flash (TL-WDR3600/4300)

Ausgangslage (Router gw, read-only untersucht)

Frage

Kann man diese Installation upgraden, wo sich das “Binary-Format” seit 19.07 geändert hat und die Images größer wurden – bei nur noch 1,2 MB freiem Overlay?

Ergebnis: Platzmathematik (8000 KiB firmware-Partition)

Gemessen an den echten sysupgrade-Images von downloads.openwrt.org (Rest = 8000 − Bildgröße):

Release sysupgrade-Bild Kernel Rootfs Overlay danach
19.07.9 (aktuell, ar71xx) 4032 KiB 1558 2474 3968 KiB (3,9 MB)
21.02.7 (ath79) 5248 KiB 2018 3230 2752 KiB (2,7 MB)
22.03.5 5888 KiB 2205 3684 2112 KiB (2,1 MB)
23.05.5 5952 KiB 2284 3668 2048 KiB (2,0 MB)
24.10.8 6464 KiB 2556 3909 1536 KiB (1,5 MB)
25.12.5 (aktuell) 6848 KiB 2678 4170 1152 KiB (1,1 MB)

Nachzurüstender Bedarf (vom aktuellen Stand abgeleitet)

Von den 154 Paketen im Flash-Overlay sind 50 nicht Teil des 19.07-Base-Images (davon 122 mit user-installed-Flag insgesamt). Für 24.10 ergibt das:

Daraus folgt: 1,1 MB (25.12) reichen definitiv nicht, 1,5 MB (24.10) nur mit radikalem Verzicht, 2,0 MB (23.05) gerade so, 2,7 MB (21.02) komfortabel.

Weitere Brüche beim Upgrade

  1. ar71xx → ath79 (Zielwechsel, ab 21.02): ar71xx existiert nicht mehr. Die 24.10/25.12-Images enthalten supported_devices: ["tplink,tl-wdr4300-v1","tl-wdr4300"] – der eigene board_name tl-wdr4300 ist als Migrations-Alias drin, sysupgrade sollte akzeptieren, vermutlich -F nötig. Mit TFTP-Recovery als Backstop probieren.
  2. 25.12 nutzt apk statt opkg (Manifest enthält apk-mbedtls, kein opkg; Feed liefert .apk-Dateien). Die gesamte opkg -o /mnt/usb-Offline-Methode entfällt dort ersatzlos. 24.10 hat noch opkg.
  3. Config nicht retten (-n): firewall3 → firewall4 (nftables), Wifi-/netifd-Config-Format geändert.
  4. Kmods garantiert inkompatibel (4.14 → 6.6/6.12): USB-Storage, ext4, tun, sched-cake, wireguard müssen frisch vom Feed.
  5. Userland-Pakete auf dem USB-Stick (2018–2026) sind gegen altes musl/libstdc++ gebaut – ebenfalls neu installieren.
  6. 19.07-Feeds sind noch online (HTTP 200), aber EOL ohne Sicherheitsupdates.

Empfehlung: extroot auf dem USB-Stick

Dann ist der Flash-Platz egal – das Zielbild muss nur in 8000 KiB passen (tut es), und das Overlay wandert auf /dev/sda2 (3,4 GB).

  1. Backups: sysupgrade -b, /etc/config, Paketlisten (user-installed, openwrt-config-2026-07-04.sh) vom USB sichern
  2. sysupgrade -n auf 24.10.8 (opkg bleibt) oder 25.12.5 (apk)
  3. Sofort die USB-Kette nachinstallieren: block-mount kmod-fs-ext4 kmod-usb2 kmod-usb-core kmod-usb-ehci kmod-scsi-core kmod-usb-storage kmod-nls-base (≈1,6 MiB roh – passt im frischen Overlay nur eng bei 25.12)
  4. USB-Partition als Overlay einrichten; alten Root auf dem Stick vorher löschen (2018, ABI-tot)
  5. Rest (LuCI-Apps, adblock, sqm, wireguard, tcpdump …) läuft dann auf dem Stick statt im 1-MiB-Käfig

Alternativen: bei 19.07 bleiben (EOL) oder als Zwischenhalt 23.05 (2,0 MB Overlay) + dort extroot aufziehen.

Reproduktion / Befehle

# Flash-Layout und Overlay
ssh gw 'cat /proc/mtd; df -h /overlay /rom /tmp; cat /etc/openwrt_release; cat /tmp/sysinfo/board_name'

# eigene Pakete im Flash vs. 19.07-Base
ssh gw 'grep "^Package:" /usr/lib/opkg/status | awk "{print \$2}"'
curl -s https://downloads.openwrt.org/releases/19.07.9/targets/ar71xx/generic/openwrt-19.07.9-ar71xx-generic.manifest

# Image-Größen + Split (uImage/Magic-Suche, hsqs = squashfs-Offset)
curl -sO https://downloads.openwrt.org/releases/<V>/targets/ath79/generic/openwrt-<V>-ath79-generic-tplink_tl-wdr4300-v1-squashfs-sysupgrade.bin
python3 -c "d=open('img.bin','rb').read(); sq=d.find(b'hsqs'); print(len(d)/1024, sq/1024, (0x7d0000-len(d))/1024)"

# Board-Alias im Image prüfen
tail -c 300 img.bin | grep -o 'supported_devices.*'

Lesson

Bei 8-MiB-OpenWrt-Geräten ist nicht der freie Overlay-Spielraum von heute die Hürde, sondern (firmware_partition − neue_image_größe) nach dem Upgrade. Erst das gegen den zu reinstallierenden Paketbedarf rechnen – dann zeigt sich, ob eine Version überhaupt in Frage kommt.