<message>Update the bootstrap script to ensure hostname resolution by adding entries to /etc/hosts, preventing "sudo: unable to resolve host" errors. Modify user-data.bootstrap to include the same hostname resolution logic. Revise dashboard templates to reflect the new project name "GNSS Guard Provisioning" and improve user interface elements related to USB boot operations, including clearer instructions and status messages. These changes enhance the overall user experience and streamline the provisioning process.
Host-side provisioning scripts
These files run on the provisioning host (e.g. the Proxmox host where the reTerminal is connected via USB).
| File | Purpose |
|---|---|
| flash-emmc-on-connect.sh | Runs rpiboot, detects eMMC, waits for dashboard choice (Backup/Deploy), then runs dd. Install to /opt/cm4-provisioning/. |
| cm4-flash-trigger.sh | Started by udev when USB device 2b8e is added. Launches the flash script via systemd-run. Install to /usr/local/bin/. |
| 90-cm4-boot-mode.rules | udev rule: on USB add (vendor 2b8e), run the trigger. Install to /etc/udev/rules.d/. |
See ../docs/EMMC-PROVISIONING-GUIDE.md for full setup. The deploy script copies these into place on the Proxmox host and LXC.
Stuck “finalizing: Compressing image (xz)…” on the host
If the dashboard still shows that message, run on the host (e.g. ssh root@10.20.30.152):
# 1) See current status and whether build/xz is still running
PROV="${CM4_PROVISIONING_DIR:-/var/lib/cm4-provisioning}"
cat "$PROV/build_cloudinit_status.json"
ps aux | grep -E 'build-cloudinit|xz.*\.img' | grep -v grep
# 2a) If a build is still running and you want to cancel it
touch "$PROV/build_cloudinit_cancel"
# Script checks every 2s; after it exits, status will show "cancelled"
# 2b) If no build process is running but status is stuck, reset to idle
echo '{"phase":"idle","message":"","output_name":null,"error":null,"updated":'$(date +%s)'}' > "$PROV/build_cloudinit_status.json"
The status lives in build_cloudinit_status.json (host: $PROV_DIR/; dashboard: CM4_BUILD_STATUS_FILE or BASE_DIR/). You can refresh the dashboard or click Dismiss to clear the message (Dismiss force-clears even when stuck).