1
1
This repository is for TEW-829DRU OpenWRT development purposes only.
Go to file
Guoxin Pu 78c88ce188 image: fix per device targz rootfs wrong suffix and redundant images
In commit d89cb72c23 , a new rootfs type "targz" was introduced, to correctly pack the rootfs AFTER `DEVICE_PACKAGES` installation (unlike the old simple `rootfs.tar.gz`) .

The expected release artifact shall be a single corresponding tar gz release accompanying or relacing the old simple `rootfs.tar.gz`.

However, if one take a look at the v25.12 series release download pages, e.g. [25.12.4/x86/64](https://downloads.openwrt.org/releases/25.12.4/targets/x86/64/), one could see that there're now four release artifacts related to rootfs targz:

- [generic-targz-combined-efi.img.gz](https://downloads.openwrt.org/releases/25.12.4/targets/x86/64/openwrt-25.12.4-x86-64-generic-targz-combined-efi.img.gz)
- [generic-targz-combined.img.gz](https://downloads.openwrt.org/releases/25.12.4/targets/x86/64/openwrt-25.12.4-x86-64-generic-targz-combined.img.gz)
- [generic-targz-rootfs.img.gz](https://downloads.openwrt.org/releases/25.12.4/targets/x86/64/openwrt-25.12.4-x86-64-generic-targz-rootfs.img.gz)
- [rootfs.tar.gz](https://downloads.openwrt.org/releases/25.12.4/targets/x86/64/openwrt-25.12.4-x86-64-rootfs.tar.gz)

It's obvious the new `targz` release actually reuses the same `TARGET_ROOTFS_{TYPE}` handler same as `squashfs`, `ext4` and alike. And the three `generic-targz` img.gz contains the same expected tar gz either as their second partition, or as the whole image. This could be verified by the following script:

```bash
URL_PARENT=https://downloads.openwrt.org/releases/25.12.4/targets/x86/64/openwrt-25.12.4-x86-64-
for TYPE in combined-efi combined rootfs; do
        curl -L "${URL_PARENT}generic-targz-${TYPE}.img.gz" | gzip -cd > "${TYPE}.img"
done
for TYPE in combined-efi combined; do
        INFO=$(sfdisk -d "${TYPE}.img" | sed -n 's/^'"${TYPE}.img"'2 : start= \+\([0-9]\+\), size= \+\([0-9]\+\),.\+.\+$/\1 \2/p')
        dd if="${TYPE}.img" of="${TYPE}.tar.gz" bs=512 skip="${INFO%% *}" count="${INFO##* }"
done
cp rootfs.img rootfs.tar.gz
sha256sum combined-efi.tar.gz combined.tar.gz rootfs.tar.gz
file rootfs.tar.gz
```

Output:
```log
  % Total    % Received % Xferd  Average Speed  Time    Time    Time   Current
                                 Dload  Upload  Total   Spent   Left   Speed
100 13.12M 100 13.12M   0      0 194.6M      0                              0
  % Total    % Received % Xferd  Average Speed  Time    Time    Time   Current
                                 Dload  Upload  Total   Spent   Left   Speed
100 12.93M 100 12.93M   0      0 190.9M      0                              0
  % Total    % Received % Xferd  Average Speed  Time    Time    Time   Current
                                 Dload  Upload  Total   Spent   Left   Speed
100  7.13M 100  7.13M   0      0 257.6M      0                              0
GPT PMBR size mismatch (246304 != 246334) will be corrected by write.
The backup GPT table is corrupt, but the primary appears OK, so that will be used.
The backup GPT table is not on the end of the device.
212992+0 records in
212992+0 records out
109051904 bytes (109 MB, 104 MiB) copied, 0.258064 s, 423 MB/s
212992+0 records in
212992+0 records out
109051904 bytes (109 MB, 104 MiB) copied, 0.261621 s, 417 MB/s
18b98d3562dc3067ae095ee44d4ff3158cf84e89063c3df66c0ef6638922ba71  combined-efi.tar.gz
18b98d3562dc3067ae095ee44d4ff3158cf84e89063c3df66c0ef6638922ba71  combined.tar.gz
18b98d3562dc3067ae095ee44d4ff3158cf84e89063c3df66c0ef6638922ba71  rootfs.tar.gz
rootfs.tar.gz: gzip compressed data, max compression, from Unix, original size modulo 2^32 0
```

The checksum of the extracted, actually expected .tar.gz are all same. And if we peek inside its content, it's indeed what we expected:

```
> tar -tzf rootfs.tar.gz
./
./bin/
./bin/ash
./bin/board_detect
./bin/busybox
./bin/cat
./bin/chgrp
./bin/chmod
./bin/chown
./bin/config_generate
./bin/cp
./bin/date
...
```

A disk image with a `tar.gz` as its second partiton doesn't boot anyway and I doubt if there's any mechanic to make it bootable. So `generic-targz-combined-efi.img.gz` and `generic-targz-combined.img.gz` are not needed at all, and `generic-targz-rootfs.img.gz` shall be renamed to have a `tar.gz` suffix instead.

Therefore work around this by skipping creating images for fs `targz` in the general loop, and only create the rootfs.tar.gz later for `targz` "fs"

This affects both the real builder and imagebuilder. I've tested this with multiple imagebuilders.

Tested with `openwrt-imagebuilder-25.12.4-mvebu-cortexa53.Linux-x86_64`:

```sh
rm -rf bin && make image PROFILE=generic
```

Without the fix:

```
> tree bin/
bin/
└── targets
    └── x86
        └── 64
            ├── openwrt-25.12.4-x86-64-generic.bom.cdx.json
            ├── openwrt-25.12.4-x86-64-generic-ext4-combined-efi.img.gz
            ├── openwrt-25.12.4-x86-64-generic-ext4-combined.img.gz
            ├── openwrt-25.12.4-x86-64-generic-ext4-rootfs.img.gz
            ├── openwrt-25.12.4-x86-64-generic-kernel.bin
            ├── openwrt-25.12.4-x86-64-generic.manifest
            ├── openwrt-25.12.4-x86-64-generic-rootfs.tar.gz
            ├── openwrt-25.12.4-x86-64-generic-squashfs-combined-efi.img.gz
            ├── openwrt-25.12.4-x86-64-generic-squashfs-combined.img.gz
            ├── openwrt-25.12.4-x86-64-generic-squashfs-rootfs.img.gz
            ├── openwrt-25.12.4-x86-64-generic-targz-combined-efi.img.gz
            ├── openwrt-25.12.4-x86-64-generic-targz-combined.img.gz
            ├── openwrt-25.12.4-x86-64-generic-targz-rootfs.img.gz
            ├── profiles.json
            └── sha256sums
```

With the fix:
```
> tree bin/
bin/
└── targets
    └── x86
        └── 64
            ├── openwrt-25.12.4-x86-64-generic.bom.cdx.json
            ├── openwrt-25.12.4-x86-64-generic-ext4-combined-efi.img.gz
            ├── openwrt-25.12.4-x86-64-generic-ext4-combined.img.gz
            ├── openwrt-25.12.4-x86-64-generic-ext4-rootfs.img.gz
            ├── openwrt-25.12.4-x86-64-generic-kernel.bin
            ├── openwrt-25.12.4-x86-64-generic.manifest
            ├── openwrt-25.12.4-x86-64-generic-rootfs.tar.gz
            ├── openwrt-25.12.4-x86-64-generic-squashfs-combined-efi.img.gz
            ├── openwrt-25.12.4-x86-64-generic-squashfs-combined.img.gz
            ├── openwrt-25.12.4-x86-64-generic-squashfs-rootfs.img.gz
            ├── openwrt-25.12.4-x86-64-generic-targz-rootfs.tar.gz
            ├── profiles.json
            └── sha256sums
```

And with `openwrt-imagebuilder-25.12.4-mvebu-cortexa53.Linux-x86_64`:

```sh
rm -rf bin && make image PROFILE=ripe_atlas-v5
```

Without the fix:
```
> tree bin/
bin/
└── targets
    └── mvebu
        └── cortexa53
            ├── openwrt-25.12.4-mvebu-cortexa53-ripe_atlas-v5.bom.cdx.json
            ├── openwrt-25.12.4-mvebu-cortexa53-ripe_atlas-v5-ext4-sdcard.img.gz
            ├── openwrt-25.12.4-mvebu-cortexa53-ripe_atlas-v5.manifest
            ├── openwrt-25.12.4-mvebu-cortexa53-ripe_atlas-v5-rootfs.tar.gz
            ├── openwrt-25.12.4-mvebu-cortexa53-ripe_atlas-v5-squashfs-sdcard.img.gz
            ├── openwrt-25.12.4-mvebu-cortexa53-ripe_atlas-v5-targz-sdcard.img.gz
            ├── profiles.json
            └── sha256sums
```

With the fix:
```
> tree bin/
bin/
└── targets
    └── mvebu
        └── cortexa53
            ├── openwrt-25.12.4-mvebu-cortexa53-ripe_atlas-v5.bom.cdx.json
            ├── openwrt-25.12.4-mvebu-cortexa53-ripe_atlas-v5-ext4-sdcard.img.gz
            ├── openwrt-25.12.4-mvebu-cortexa53-ripe_atlas-v5.manifest
            ├── openwrt-25.12.4-mvebu-cortexa53-ripe_atlas-v5-rootfs.tar.gz
            ├── openwrt-25.12.4-mvebu-cortexa53-ripe_atlas-v5-squashfs-sdcard.img.gz
            ├── openwrt-25.12.4-mvebu-cortexa53-ripe_atlas-v5-targz-rootfs.tar.gz
            ├── profiles.json
            └── sha256sums
```

Signed-off-by: Guoxin Pu <pugokushin@gmail.com>
Link: https://github.com/openwrt/openwrt/pull/23570
Signed-off-by: Robert Marko <robimarko@gmail.com>
(cherry picked from commit 246b216df5)
2026-05-29 13:11:15 +02:00
.devcontainer/ci-env devcontainer: Add development environment for gihub codespace 2023-10-30 23:34:26 +01:00
.github microchipsw: add support for Microchip LAN969x switches 2025-12-03 12:13:17 +01:00
.vscode meta: VS Code: add "Git: Always Sign Off" setting 2024-10-03 17:18:51 +02:00
config microchipsw: enable DCB by default 2026-01-25 22:14:16 +01:00
include image: fix per device targz rootfs wrong suffix and redundant images 2026-05-29 13:11:15 +02:00
LICENSES LICENSES: include all used licenses in LICENSES directory 2021-02-14 19:21:38 +01:00
package fstools: update to Git HEAD (2026-05-23) 2026-05-28 11:19:50 +02:00
scripts scripts/ext-tools.sh: set all prebuilt tool files to same timestamp 2026-04-12 20:21:57 +02:00
target mvebu: cortexa53: uDPU/eDPU: update active bootscript as well 2026-05-28 11:19:50 +02:00
toolchain toolchain: musl: backport patches with CVE fixes 2026-05-15 20:58:27 +02:00
tools firmware-utils: update to Git HEAD (2026-03-05) 2026-05-28 11:19:50 +02:00
.gitattributes gitattributes: automatically convert dts file CRLF line endings to LF 2025-11-29 17:52:35 +01:00
.gitignore gitignore: ignore local APK keys 2024-05-17 22:03:06 +03:00
BSDmakefile
Config.in build: scripts/config - update to kconfig-v5.14 2022-02-19 13:10:01 +01:00
COPYING COPYING: add COPYING file to specify project licenses 2021-02-14 19:21:38 +01:00
feeds.conf.default OpenWrt v25.12.4: revert to branch defaults 2026-05-14 00:58:17 +02:00
Makefile build: include tests/Makefile if available 2024-06-17 17:51:31 +02:00
README.md README: replace "MacOSX" with "macOS" 2024-04-01 18:46:30 +02:00
rules.mk build: do not set CCACHE_COMPILERCHECK 2026-04-30 01:48:36 +02:00

OpenWrt logo

OpenWrt Project is a Linux operating system targeting embedded devices. Instead of trying to create a single, static firmware, OpenWrt provides a fully writable filesystem with package management. This frees you from the application selection and configuration provided by the vendor and allows you to customize the device through the use of packages to suit any application. For developers, OpenWrt is the framework to build an application without having to build a complete firmware around it; for users this means the ability for full customization, to use the device in ways never envisioned.

Sunshine!

Download

Built firmware images are available for many architectures and come with a package selection to be used as WiFi home router. To quickly find a factory image usable to migrate from a vendor stock firmware to OpenWrt, try the Firmware Selector.

If your device is supported, please follow the Info link to see install instructions or consult the support resources listed below.

An advanced user may require additional or specific package. (Toolchain, SDK, ...) For everything else than simple firmware download, try the wiki download page:

Development

To build your own firmware you need a GNU/Linux, BSD or macOS system (case sensitive filesystem required). Cygwin is unsupported because of the lack of a case sensitive file system.

Requirements

You need the following tools to compile OpenWrt, the package names vary between distributions. A complete list with distribution specific packages is found in the Build System Setup documentation.

binutils bzip2 diff find flex gawk gcc-6+ getopt grep install libc-dev libz-dev
make4.1+ perl python3.7+ rsync subversion unzip which

Quickstart

  1. Run ./scripts/feeds update -a to obtain all the latest package definitions defined in feeds.conf / feeds.conf.default

  2. Run ./scripts/feeds install -a to install symlinks for all obtained packages into package/feeds/

  3. Run make menuconfig to select your preferred configuration for the toolchain, target system & firmware packages.

  4. Run make to build your firmware. This will download all sources, build the cross-compile toolchain and then cross-compile the GNU/Linux kernel & all chosen applications for your target system.

The main repository uses multiple sub-repositories to manage packages of different categories. All packages are installed via the OpenWrt package manager called opkg. If you're looking to develop the web interface or port packages to OpenWrt, please find the fitting repository below.

  • LuCI Web Interface: Modern and modular interface to control the device via a web browser.

  • OpenWrt Packages: Community repository of ported packages.

  • OpenWrt Routing: Packages specifically focused on (mesh) routing.

  • OpenWrt Video: Packages specifically focused on display servers and clients (Xorg and Wayland).

Support Information

For a list of supported devices see the OpenWrt Hardware Database

Documentation

Support Community

  • Forum: For usage, projects, discussions and hardware advise.
  • Support Chat: Channel #openwrt on oftc.net.

Developer Community

License

OpenWrt is licensed under GPL-2.0