blancco: live erase progress on the /imaging dashboard
Each Blancco PC now gets a tile on /imaging, keyed by BIOS serial with pctype "blancco", using the /imaging/status endpoint the WinPE clients already post to (stage_total 7): 1 Downloading Blancco, 2 Starting Blancco (blancco-init.sh, wget) 3 Waiting for licence / Licence OK (N left) 4 Erasing: step N - <step> [NN%] 5 Erasure finished / Report saved 6 Report sent to cloud 7 Done (succeeded), or Erasure FAILED (failed, sticks) playbook/blancco-progress.py follows the AlbusSeven journal inside the Blancco rootfs and maps its lines to those stages; patterns taken from a real 7.20 auto-mode run and replayed with --replay/--dry-run, plus a synthetic failed step. Init fetches it from the web root at boot and installs it as blancco-progress.service; the playbook deploys it there. The report copier adds a "Report copied to share" log line. Stage 1 resets a finished tile for the same serial. All posts are best effort.
This commit is contained in:
@@ -132,12 +132,24 @@ ip link set "$IFACE" up || ifconfig "$IFACE" up
|
||||
sleep 2
|
||||
|
||||
SERVER=172.16.9.1
|
||||
|
||||
# Coarse progress for the webapp's /imaging dashboard (same endpoint the
|
||||
# WinPE imaging clients use). Stage 1 also resets a finished tile for this
|
||||
# serial. Best effort: a webapp outage must never stop a wipe.
|
||||
post_status() {
|
||||
serial=$(cat /sys/class/dmi/id/product_serial 2>/dev/null | tr -d '"\\')
|
||||
[ -n "$serial" ] || return 0
|
||||
wget -q -T 5 -O /dev/null --header 'Content-Type: application/json' \
|
||||
--post-data "{\"serial\":\"$serial\",\"pctype\":\"blancco\",\"source\":\"blancco\",\"current_stage\":\"$2\",\"stage_index\":$1,\"stage_total\":7,\"status\":\"in_progress\",\"ip\":\"172.16.9.250\"}" \
|
||||
"http://$SERVER:9009/imaging/status" 2>/dev/null || true
|
||||
}
|
||||
ifconfig "$IFACE" 172.16.9.250 netmask 255.255.255.0 up
|
||||
sleep 1
|
||||
dbg echo " IP: 172.16.9.250 SERVER: $SERVER"
|
||||
dbg ip addr
|
||||
|
||||
echo " [3/5] Downloading Blancco (~850 MB)"
|
||||
post_status 1 "Downloading Blancco"
|
||||
wget -T 30 -O /tmp/airootfs.sfs http://$SERVER/blancco/arch/x86_64/airootfs.sfs 2>&1
|
||||
[ -s /tmp/airootfs.sfs ] || { echo "ERROR: download failed"; exec /bin/sh; }
|
||||
|
||||
@@ -299,6 +311,10 @@ while :; do
|
||||
if cp "$f" "/mnt/share/$name.part" && mv -f "/mnt/share/$name.part" "/mnt/share/$name"; then
|
||||
touch "$DONE/$id"
|
||||
echo "copied $id to $name"
|
||||
serial=$(tr -d '"\\' < /sys/class/dmi/id/product_serial 2>/dev/null)
|
||||
[ -n "$serial" ] && curl -s -m 5 -o /dev/null -H 'Content-Type: application/json' \
|
||||
-d "{\"serial\":\"$serial\",\"log_lines\":[\"Report copied to share: $name\"]}" \
|
||||
http://172.16.9.1:9009/imaging/status || true
|
||||
else
|
||||
rm -f "/mnt/share/$name.part"
|
||||
echo "copy of $id failed, will retry"
|
||||
@@ -324,6 +340,29 @@ XEOF
|
||||
ln -sf /etc/systemd/system/blancco-report-sync.service \
|
||||
/run/newroot/etc/systemd/system/multi-user.target.wants/blancco-report-sync.service
|
||||
|
||||
# Live erase progress for the /imaging dashboard: follows the AlbusSeven
|
||||
# journal and posts stages and drive percentages. Fetched at boot so the
|
||||
# server copy (playbook/blancco-progress.py) is the only one.
|
||||
if wget -q -T 10 -O /run/newroot/usr/local/sbin/blancco-progress "http://$SERVER/blancco/blancco-progress.py"; then
|
||||
chmod 755 /run/newroot/usr/local/sbin/blancco-progress
|
||||
cat > /run/newroot/etc/systemd/system/blancco-progress.service << 'XEOF'
|
||||
[Unit]
|
||||
Description=Report Blancco erase progress to the PXE webapp
|
||||
|
||||
[Service]
|
||||
ExecStart=/usr/bin/python3 /usr/local/sbin/blancco-progress
|
||||
Restart=on-failure
|
||||
RestartSec=10
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
XEOF
|
||||
ln -sf /etc/systemd/system/blancco-progress.service \
|
||||
/run/newroot/etc/systemd/system/multi-user.target.wants/blancco-progress.service
|
||||
else
|
||||
echo " (no blancco-progress.py on server: no live progress on the dashboard)"
|
||||
fi
|
||||
|
||||
# Debug boots only: Blancco's own debug mode (/etc/debug.environment makes
|
||||
# isDebugMode true, so 2_sshd starts sshd) plus an SSH key for root.
|
||||
# Root is locked and sshd is key-only, so without the key there is no way
|
||||
@@ -357,4 +396,5 @@ mount --bind /dev/null /run/newroot/sys/power/mem_sleep 2>/dev/null || true
|
||||
mount --bind /dev/null /run/newroot/sys/power/autosleep 2>/dev/null || true
|
||||
|
||||
echo " Starting Blancco..."
|
||||
post_status 2 "Starting Blancco"
|
||||
exec switch_root /run/newroot /sbin/init
|
||||
|
||||
Reference in New Issue
Block a user