Files
reterminal-dm4/emmc-provisioning
nearxos 2a6355033e Remove obsolete files related to provisioning and custom scripts</message>
<message>Delete the start.elf file and several log files from the emmc-provisioning scripts, which are no longer needed for the deployment process. Additionally, remove the plymouth-custom.script file from the cloud-init duplicates archive, streamlining the project and reducing clutter in the repository.
2026-03-04 19:43:21 +02:00
..

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.

Revisions are tracked project-wide; see repo root README.md and scripts/bump-revision.sh.


Project layout

emmc-provisioning/
├── README.md                 ← You are here
├── docs/                     Documentation
│   ├── DEPLOY-NEW-PROXMOX.md         Step-by-step: deploy to a new Proxmox instance
│   ├── EMMC-PROVISIONING-GUIDE.md   Full setup and usage
│   ├── NETWORK-BOOT-LXC.md          Network boot (PXE/dnsmasq) and LXC
│   ├── DEVICE-DNS-DHCP-RESOLVCONF.md Device DNS from DHCP, resolv.conf, cloud-init
│   ├── DNSMASQ-DNS-FILESERVER.md    dnsmasq DNS and file.server on LXC
│   ├── PROXMOX-LXC-DEPLOYMENT.md    Proxmox LXC + host setup (reference)
│   └── 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)
│   ├── deploy-dashboard-to-lxc.sh   Deploy dashboard to LXC
│   └── ... (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 (two-phase provisioning)
│   ├── first-boot.conf             Active config (not committed with secrets)
│   ├── first-boot.conf.example     Reference config
│   ├── user-data-remote-gnss.example  Example cloud-init user-data
│   └── fileserver/                  Assets served by the portal file server
│       ├── README.md                Layout reference
│       ├── steps/                   Step scripts (0113) sourced by first-boot.sh
│       ├── chromium-kiosk-no-select/  Chromium extension (disable text selection)
│       ├── start-chromium.sh        Chromium kiosk launcher
│       ├── five-tap-close-chromium.py  5-tap overlay (Wayland layer-shell)
│       └── ...                      Desktop files, config, theme, splash
├── 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 for setup and usage.
  2. Deploy to a new Proxmox: Follow docs/DEPLOY-NEW-PROXMOX.md for clear step-by-step instructions.
  3. Proxmox reference: scripts/deploy-to-proxmox.sh and docs/PROXMOX-LXC-DEPLOYMENT.md for options, layout, and troubleshooting.
  4. Manual host: Copy scripts from host/ to the host and install the udev rule (see the guide).
  5. 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.