Firmware and lab¶
Source: edge/firmware. All images carry the same files, staged by
scripts/stage-files.sh: agent + ea link, procd service and its rc.d
link, sysupgrade keep list (/etc/jumo/identity.json), fleet enroll code,
control plane URL. Packages: kmod-wireguard wireguard-tools kmod-vxlan
vxlan miniupnpc (+ iperf3 tcpdump-mini in dev). No LuCI.
Building¶
| Script | For | How long |
|---|---|---|
scripts/build-images.sh dev\|test --enroll-code CODE |
All test devices (x86, Cudy TR1200, Yuncore AX835) → build/images/<env>/ with SHA256SUMS and FLASHING.md |
~6 min |
scripts/build-jumo-image.sh --target T --profile P --goarch A ... |
One device, official ImageBuilder in Docker (x86_64; Rosetta on a Mac, native in CI) | ~2.5 min |
scripts/repack-vm-image.sh --enroll-code CODE |
arm64 VM image, repacks the official squashfs natively | ~4 s |
--control-plane defaults to the Mac on the LAN for dev; use
https://dev.api.jumorouter.com for routers away from the bench.
Local Docker note: if pulls hang, the macOS keychain credential helper is
waiting; pull with a config that has "credsStore": "".
Flashing¶
- First flash: see
FLASHING.mdnext to the images (Cudy needs its intermediate firmware; x86 is written to disk; check the Yuncore board name). - Reflash a router already on OpenWrt:
scripts/flash.sh <ip> <image>. It streams the image over SSH, lets the router's board check validate it, then flashes without keeping settings. Never force (-F).
Lab on a Mac¶
scripts/lab.sh start [vm...] boots five OpenWrt arm64 VMs (QEMU + HVF):
| VM | Role | SSH |
|---|---|---|
| inet | Fake internet (45.90.10.0/24, 45.90.20.0/24, 2001:db8::/32), NAT to the real one | 2225 |
| isp-home | ISP box: NAT44, IPv6 firewall, miniupnpd (UPnP IGD v2, NAT-PMP/PCP) | 2226 |
| home | Jumo home router behind isp-home | 2222 |
| travel | Jumo travel router on the "hotel" uplink | 2223 |
| laptop | On travel's LAN port | 2224 |
Configure with scripts/lab/inet.sh, isp-home.sh, isp-home-upnp.sh,
travel.sh (piped over scripts/vm-ssh.sh <port> 'sh -s'), then pair home
and travel in the admin. Results: WireGuard PoC.
No sudo is needed; deny the macOS firewall prompt for QEMU (localhost only).