# reTerminal DM4 eMMC provisioning

Automatically **deploy** or **backup** the CM4 eMMC when the reTerminal is connected in **USB boot mode** or when it **boots over the network**. Uses **cloud-init** for first-boot configuration.

---

## Project layout

```
emmc-provisioning/
├── README.md                 ← You are here
├── docs/                     Documentation
│   ├── EMMC-PROVISIONING-GUIDE.md   Full setup and usage
│   ├── NETWORK-BOOT-LXC.md          Network boot (PXE/dnsmasq) and LXC
│   ├── PROXMOX-LXC-DEPLOYMENT.md    Proxmox LXC + host setup
│   └── PORTAL_STYLING_GUIDE.md      Dashboard UI styling reference
├── host/                     Scripts that run on the provisioning host (Proxmox host)
│   ├── flash-emmc-on-connect.sh     rpiboot + wait for Backup/Deploy choice, then dd
│   ├── cm4-flash-trigger.sh         Called by udev; starts the flash job
│   ├── build-cloudinit-image.sh     Build golden image with cloud-init
│   └── run-shrink-on-host.sh        PiShrink (optional)
├── scripts/                  Deployment and one-off scripts
│   ├── deploy-to-proxmox.sh         Deploy to Proxmox host + LXC
│   ├── sync-portal-files-to-lxc.sh  Sync cloud-init/first-boot assets to file server (LXC)
│   ├── setup-network-boot-on-lxc.sh Configure PXE/dnsmasq for network boot
│   ├── install-usbboot-on-host.sh   Build and install rpiboot on the host
│   └── ... (other deploy/monitor scripts)
├── dashboard/                Flask web UI (runs in LXC or standalone)
│   ├── app.py
│   └── README.md
├── cloud-init/               First-boot and file-server assets
│   ├── first-boot.sh               Main first-boot script (run by cloud-init)
│   ├── first-boot.md               Documentation for first-boot.sh
│   ├── start-chromium.sh            Chromium kiosk launcher (→ file server)
│   ├── user-data-remote-gnss.example  Example cloud-init user-data (curl first-boot.sh)
│   ├── config-files/               LightDM, Maliit, one-shots (.desktop + scripts)
│   │   ├── chromium-kiosk.desktop
│   │   ├── set-rotation-once.desktop
│   │   └── ...
│   ├── files-from-guard/            Plymouth, splash assets; README of required files
│   └── fix-reterminal-display.sh    One-time fix script (splash, rotation, wallpaper)
├── lxc/                      LXC config snippets (dnsmasq, nftables)
└── network-client/           For network-booted devices
    ├── provisioning-client.sh      Register + poll, then Deploy or Backup
    └── README.md
```

---

## Quick start

1. **Read** [docs/EMMC-PROVISIONING-GUIDE.md](docs/EMMC-PROVISIONING-GUIDE.md) for setup and usage.
2. **Proxmox:** Use [scripts/deploy-to-proxmox.sh](scripts/deploy-to-proxmox.sh) to deploy to a Proxmox host; see [docs/PROXMOX-LXC-DEPLOYMENT.md](docs/PROXMOX-LXC-DEPLOYMENT.md).
3. **Manual host:** Copy scripts from `host/` to the host and install the udev rule (see the guide).
4. Put **golden.img** in `/var/lib/cm4-provisioning/` (or your configured path). When a device is detected (USB or network), the **dashboard** asks **Backup** or **Deploy**.
