Skip to content

Radxa E20C build with Docker/Tailscale fails because ImageBuilder rootfs is too small #3

@tacomilkshake

Description

@tacomilkshake

Summary

Building a Radxa E20C image with Docker and Tailscale selected fails during OpenWrt ImageBuilder image creation:

Error: Selected packages exceed device storage
error: ext4_allocate_best_fit_partial: failed to allocate 4654 blocks, out of space?
RuntimeError: Selected packages exceed device storage

The physical target devices have 16 GB eMMC, so this appears to be the generated OpenWrt rootfs/image size, not actual device capacity.

Repro Steps

  1. Open Sensorbox.
  2. Choose Radxa E20C.
  3. Add an Orb deployment token.
  4. Set a root password.
  5. Enable Install to onboard eMMC.
  6. Add a Tailscale auth key.
  7. Enable Install Docker.
  8. Build image.

Actual Result

Build fails while creating root.ext4:

Build failed.
Error: Selected packages exceed device storage
imagebuilder_status=failed

Pseudo file "dev" exists in source filesystem "/builder/build_dir/target-aarch64_generic_musl/root-rockchip/dev".
Ignoring, exclude it (-e/-ef) to override.
error: ext4_allocate_best_fit_partial: failed to allocate 4654 blocks, out of space?
make[3]: *** [/builder/include/image.mk:426: /builder/build_dir/target-aarch64_generic_musl/linux-rockchip_armv8/root.ext4] Error 1
make[2]: *** [Makefile:288: build_image] Error 2
make[1]: *** [Makefile:185: _call_image] Error 2
make: *** [Makefile:357: image] Error 2

RuntimeError: Selected packages exceed device storage

Expected Result

Radxa E20C builds intended for onboard eMMC should generate a rootfs large enough for the selected package set, especially when Docker/Compose and Tailscale are selected.

Observed Details

The failing ASU request had:

"target": "rockchip/armv8",
"profile": "radxa_e20c",
"version": "25.12.2",
"packages": [
  "micrond",
  "umdns",
  "sudo",
  "tcpdump",
  "ip-full",
  "orb",
  "tailscale",
  "dockerd",
  "docker",
  "docker-compose"
],
"diff_packages": false,
"rootfs_size_mb": null

ImageBuilder then created a small ext4 rootfs:

Creating filesystem with parameters:
    Size: 109051904
    Block size: 4096
    Blocks: 26624

That is about 104 MiB, while the package install reported:

OK: 278.5 MiB in 156 packages

So the failure makes sense: the generated ext4 rootfs is much smaller than the selected package payload.

Build Environment

Self-hosted Sensorbox instance:

  • Host: ranch
  • OS: openSUSE Tumbleweed
  • Deployment style: rootless Podman services managed by pyinfra
  • Sensorbox URL: http://ranch:8089/
  • Podman socket used by ASU worker: /run/user/1000/podman/podman.sock
  • Public/build store path: /opt/stacks/sensorbox/public
  • ASU image: localhost/sensorbox/asu:orb-patches
  • OpenWrt ImageBuilder image: ghcr.io/openwrt/imagebuilder:rockchip-armv8-v25.12.2
  • Target: rockchip/armv8
  • Profile: radxa_e20c
  • OpenWrt version: 25.12.2

Relevant services:

  • sensorbox nginx selector
  • asu-server
  • asu-worker
  • redis
  • openwrt-builder

Possible Fix

Sensorbox likely needs a recipe-level way to request a larger rootfs for eMMC/SD-card devices.

For Radxa E20C, something like this would be reasonable:

rootfs_size_mb: 2048

Then the ASU build request should include:

"rootfs_size_mb": 2048

ASU already appears to support rootfs_size_mb and maps it to ImageBuilder ROOTFS_PARTSIZE, but Sensorbox currently submits rootfs_size_mb: null for this flow.

A good Sensorbox-side solution would avoid requiring users to manually tune this when the recipe already knows the device has large eMMC storage.

Prior Closed PR References

These are included only as references for the maintainer to inspect; they were closed and should not be merged as-is:

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions