Files
reterminal-dm4/emmc-provisioning/dashboard
nearxos 90296498f5 Add DHCP leases management to dashboard and UI
Implement a new API endpoint to retrieve current DHCP leases from dnsmasq, enhancing the dashboard's functionality for monitoring network devices. Update the home.html template to display DHCP lease information in a structured table format, including IP, MAC, hostname, and expiry details. Introduce buttons for enabling and disabling DHCP network boot, improving user interaction. Enhance JavaScript to fetch and display lease data dynamically, ensuring users have real-time visibility of network activity.
2026-02-20 17:30:23 +02:00
..

CM4 Provisioning Dashboard

Flask web UI for CM4 eMMC provisioning: public home (deploy only) and admin (login required) for images, cloud-init, portal files, and users.

Public home (/)

  • No login. Anyone can:
    • See current status (idle / connecting / flashing / backup / done / error).
    • Deploy or Backup when a device is connected (USB boot or network).
    • See which image is set as golden (used for Deploy).
    • View recent log and “How to connect” steps.

Layout: compact two columns (status + deploy on the left; golden info, log, and connect on the right).

Admin (/admin)

Login required. First user: open /login, enter any username and a password (min 6 characters) to create the first admin account.

Admin can:

  • Backup images (in backups/): upload, rename, delete, shrink/compress, set as golden, download.
  • Cloud-init images (in cloudinit-images/): list, set as golden, rename, delete, download.
  • Build cloud-init image: download latest Raspberry Pi OS (arm64), inject cloud-init, edit user-data/meta-data/network-config, use templates. Output goes to cloud-init images; optionally set as golden after build.
  • Portal files (in portal-files/): upload files that are served at /files/<name> so cloud-init can wget or curl them on first boot (e.g. curl -fsSL "http://SERVER/files/bootstrap.sh" -o /tmp/bootstrap.sh).
  • Golden image: any backup or cloud-init image can be set as golden (no single “golden file”; choose from either list).
  • Admin users: add users, change password.
  • Activity logs: view recent admin actions.

Backup images and cloud-init images live in separate folders (backups/ and cloudinit-images/).

Run locally (development)

cd dashboard
pip install -r requirements.txt   # Flask, werkzeug
python3 app.py
# Open http://localhost:5000 (home), http://localhost:5000/admin (login first)

Run in LXC (Proxmox)

Deploy with scripts/deploy-to-proxmox.sh; it installs the dashboard and pushes home.html, login.html, admin.html. Optional: create /opt/cm4-provisioning/dashboard.env with CM4_DASHBOARD_SECRET_KEY=<random> so session logins persist across restarts (deploy script can create this automatically).

Environment (optional)

  • CM4_PROVISIONING_DIR base path (default: /var/lib/cm4-provisioning).
  • CM4_BACKUPS_DIR backups directory (default: …/backups).
  • CM4_CLOUDINIT_IMAGES_DIR cloud-init built images (default: …/cloudinit-images).
  • CM4_PORTAL_FILES_DIR files served at /files/ (default: …/portal-files).
  • CM4_GOLDEN_IMAGE path to golden image (symlink to chosen backup or cloud-init image).
  • CM4_DASHBOARD_SECRET_KEY secret for session cookies (set in production).
  • CM4_DASHBOARD_DB SQLite path for admin users and logs (default: …/dashboard.db).
  • CM4_STATUS_FILE, CM4_LOG_FILE, etc. as before for status and build.