# 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/` 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) ```bash 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=` 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.