An enhanced, production-grade OpenWrt Attended Sysupgrade (ASU) build server supporting fast 1-click in-place firmware upgrades, local custom package repository staging (.apk / .ipk), custom SNAPSHOT revision resolution, and FastAPI / RQ worker architecture.
- ⚡ 5-Second In-Place Upgrades: On-demand sysupgrade image compilation via OpenWrt ImageBuilder.
- 📦 Local Staged Store Integration: Serve local custom firmware builds, custom package feeds (e.g.
pesa1234), and kernel modules directly from/public/store/. - 🔍 Custom Target Revision Resolution: Resolves custom revision strings (e.g.,
r35920-d23120ca5e) from localprofiles.jsonfiles before falling back to upstreamdownloads.openwrt.org. - 🌐 Dual Ingress Networking: Works with both internal LAN reverse proxies (Nginx Proxy Manager) and external WAN endpoints (Cloudflare Tunnel).
- 🚀 Modern OpenWrt v26
apkCompatibility: Native support for OpenWrt 24.10 / v26 Alpine Package Keeper (apk) format and legacyopkg.
| Endpoint | Ingress Controller | Target IP & Port | Purpose |
|---|---|---|---|
https://sysupgrade.local.iamrp.dev/ |
Nginx Proxy Manager (LAN) | http://10.13.0.195:8000 |
In-home router sysupgrades |
https://sysupgrade.iamrp.dev/ |
Cloudflare Tunnel (WAN) | http://10.13.0.195:8000 |
Remote / WAN router sysupgrades |
asu-server.docker.local |
Internal DNS A-Record | 10.13.0.195:8000 |
Direct local network access |
Deploy the production stack on llmadmin01 under /mnt/largedata/compose/openwrtasu/:
services:
server:
image: "ghcr.io/rpdevs-builds/openwrt-asu:latest"
container_name: openwrt-asu-server
restart: unless-stopped
command: uv run uvicorn --host 0.0.0.0 --port 8000 asu.main:app
environment:
- REDIS_URL=redis://10.13.0.197:6379/0
volumes:
- ./config/asu.toml:/app/asu.toml:ro
- ./data/store:/public/store:ro
- ./logs:/app/logs:rw
ports:
- "8000:8000"
networks:
ipvlan13:
ipv4_address: 10.13.0.195
depends_on:
- redis
worker:
image: "ghcr.io/rpdevs-builds/openwrt-asu:latest"
container_name: openwrt-asu-worker
restart: unless-stopped
command: uv run rqworker --logging_level INFO
environment:
- REDIS_URL=redis://10.13.0.197:6379/0
volumes:
- ./config/asu.toml:/app/asu.toml:ro
- ./data:/public:rw
- ./logs:/app/logs:rw
- /var/run/docker.sock:/var/run/docker.sock:rw
networks:
ipvlan13:
ipv4_address: 10.13.0.196
depends_on:
- redis
redis:
image: "redis:alpine"
container_name: openwrt-asu-redis
restart: unless-stopped
volumes:
- ./data/redis:/data:rw
networks:
ipvlan13:
ipv4_address: 10.13.0.197
networks:
ipvlan13:
external: trueRun the following commands on your router via SSH (or configure in LuCI under System
# 1. Update package index and install Attended Sysupgrade client & CLI tool
apk update
apk add luci-app-attendedsysupgrade auc
# 2. Configure ASU Server URL
uci set attendedsysupgrade.server.url='https://sysupgrade.local.iamrp.dev/api/v2'
uci commit attendedsysupgrade
# 3. Check for 1-click in-place sysupgrades
aucDistributed under the GNU General Public License v3.0 (GPL-3.0). See LICENSE for details.