Files
reterminal-dm4/emmc-provisioning/network-boot-initramfs/provisioning-client.sh
nearxos 7e1bf8a4c2 Add DHCP network boot management to API and UI
Enhance the dashboard API with new endpoints for managing DHCP network boot options, allowing devices to enable or disable network boot via POST requests. Update the device action handling to include a 'reboot' action, specifically for network devices. Modify the home.html template to display the current state of network boot and provide a button for disabling it. Update provisioning scripts to disable network boot after deployment or backup completion, ensuring devices boot from eMMC on the next startup. Improve user feedback and error handling throughout the changes.
2026-02-20 17:05:38 +02:00

67 lines
2.1 KiB
Bash

#!/bin/sh
# POSIX sh version for initramfs. Registers with dashboard and runs Deploy or Backup.
# PROVISIONING_SERVER must be set (e.g. http://10.20.50.1:5000).
BASE_URL="${PROVISIONING_SERVER:-http://10.20.50.1:5000}"
BASE_URL="${BASE_URL%/}"
EMMC_DEV="${EMMC_DEV:-/dev/mmcblk0}"
get_mac() {
cat /sys/class/net/eth0/address 2>/dev/null || \
cat /sys/class/net/enp0s1f0/address 2>/dev/null || \
echo "unknown"
}
get_ip() {
hostname -I 2>/dev/null | awk '{print $1}' || echo ""
}
MAC=$(get_mac)
IP=$(get_ip)
echo "Registering with $BASE_URL (MAC=$MAC IP=$IP)..."
curl -s -X POST -H "Content-Type: application/json" \
-d "{\"mac\":\"$MAC\",\"ip\":\"$IP\"}" "$BASE_URL/api/register-device" || true
echo "Polling for action (Backup or Deploy)..."
while true; do
resp=$(curl -s "$BASE_URL/api/device-action-poll?mac=$MAC" 2>/dev/null || echo '{"action":"wait"}')
action=$(echo "$resp" | grep -o '"action":"[^"]*"' | cut -d'"' -f4)
url=$(echo "$resp" | grep -o '"url":"[^"]*"' | cut -d'"' -f4)
upload_url=$(echo "$resp" | grep -o '"upload_url":"[^"]*"' | cut -d'"' -f4)
if [ "$action" = "deploy" ] && [ -n "$url" ]; then
echo "Deploy: downloading image and writing to $EMMC_DEV..."
if [ ! -b "$EMMC_DEV" ]; then
echo "Error: $EMMC_DEV not found"
sleep 10
continue
fi
curl -sL "$url" | dd of="$EMMC_DEV" bs=4M status=progress conv=fsync
echo "Deploy done. Disabling network boot on server so device boots from eMMC next time."
curl -s -X POST "$BASE_URL/api/action-done?mac=$MAC" || true
exit 0
fi
if [ "$action" = "backup" ] && [ -n "$upload_url" ]; then
echo "Backup: reading $EMMC_DEV and uploading..."
if [ ! -b "$EMMC_DEV" ]; then
echo "Error: $EMMC_DEV not found"
sleep 10
continue
fi
dd if="$EMMC_DEV" bs=4M status=progress 2>/dev/null | curl -s -X POST -T - "$upload_url"
echo "Backup done. Disabling network boot on server."
curl -s -X POST "$BASE_URL/api/action-done?mac=$MAC" || true
exit 0
fi
if [ "$action" = "reboot" ]; then
echo "Boot normally: rebooting..."
reboot -f 2>/dev/null || exec reboot 2>/dev/null || true
exit 0
fi
sleep 5
done