Skip to content

Repository files navigation

🌐 RPDevs OpenWrt Attended Sysupgrade (ASU) Server

Docker Build & Publish Container Image

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.


✨ Features

  • 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 local profiles.json files before falling back to upstream downloads.openwrt.org.
  • 🌐 Dual Ingress Networking: Works with both internal LAN reverse proxies (Nginx Proxy Manager) and external WAN endpoints (Cloudflare Tunnel).
  • 🚀 Modern OpenWrt v26 apk Compatibility: Native support for OpenWrt 24.10 / v26 Alpine Package Keeper (apk) format and legacy opkg.

🌐 Production Ingress Topology

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

🐳 Docker Deployment (ipvlan13)

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: true

📲 Router Setup Instructions (OpenWrt v26 apk)

Run the following commands on your router via SSH (or configure in LuCI under System $\rightarrow$ Attended Sysupgrade):

# 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
auc

📜 License

Distributed under the GNU General Public License v3.0 (GPL-3.0). See LICENSE for details.

About

No description, website, or topics provided.

Resources

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages