Files
Calix/firmware-pusher

GenieACS Firmware Pusher

Standalone HTML app for pushing firmware upgrades to GenieSpire satellites via GenieACS NBI API.

Access

URL: https://calix.yoda.ddnsgeek.com Auth: HTTP Basic Auth — admin + GenieACS admin password

Setup

# On VPS (root@161.97.153.158)
cd /opt/firmware-pusher && docker compose up -d

Architecture

User browser (HTTPS)
    ↓
Traefik (calix.yoda.ddnsgeek.com → firmware-pusher container)
    ↓
nginx:alpine (auth + static files)
    ↓
firmware-pusher/index.html (the UI)

UI → NBI API: https://nbi.yoda.ddnsgeek.com/devices
     (NBI also protected by same HTTP Basic Auth)

Files

File Purpose
index.html The UI — single file, no build
nginx.conf nginx config with auth
.htpasswd HTTP Basic Auth password hash
docker-compose.yml Container definition + Traefik labels

How It Works

  1. Device list — fetches from GET /devices (NBI API)
  2. Firmware files — fetches from GET /files (NBI API)
  3. Push — POSTs to POST /devices/{id}/tasks with:
    {
      "name": "download",
      "fileType": "1 Firmware Upgrade Image",
      "fileName": "FullRel_EXOS_SIGNED_E5_R25.2.0.0.img",
      "productClass": "GigaSpire"
    }
    

Changing Password

# Generate new htpasswd
docker run --rm httpd:alpine htpasswd -nb admin NEW_PASSWORD

# Update the .htpasswd file, then:
docker exec firmware-pusher nginx -s reload

Firmware Versions Available

Version File
R23.3.0.5 FullRel_EXOS_SIGNED_E5_R23.3.0.5.img
R24.1.0.2 FullRel_EXOS_SIGNED_E5_R24.1.0.2.img
R24.4.0.0 FullRel_EXOS_SIGNED_E5_R24.4.0.0.img
R25.2.0.0 FullRel_EXOS_SIGNED_E5_R25.2.0.0.img

Troubleshooting

  • blank page / 404: Check docker logs firmware-pusher
  • auth not working: Verify .htpasswd exists inside container: docker exec firmware-pusher cat /etc/nginx/.htpasswd
  • push fails: Check GenieACS fault queue at https://genieacs.yoda.ddnsgeek.com