hololake-system-architecture/product-source/hololake-platform/guanghu-os/scripts/clear-native-recovery-beacon.sh
冰朔 b7c8642057 feat(native): add JD resident recovery gate
Parameterize the raw recovery beacon, add one-time JD resident preparation and return verification, and provide an external ICMP peer for HLDP login, code, branch, and recovery commands.
2026-08-03 21:22:53 +08:00

42 lines
1.2 KiB
Shell
Executable file

#!/usr/bin/env bash
set -euo pipefail
[[ $# -ge 2 && $# -le 3 ]] || {
echo "usage: clear-native-recovery-beacon.sh <disk> <clear-template> [beacon-lba]" >&2
exit 64
}
disk=$1
clear_template=$2
beacon_lba=${3:-68}
[[ ${beacon_lba} =~ ^[0-9]+$ ]]
[[ -f ${clear_template} ]]
[[ $(stat -c %s "${clear_template}" 2>/dev/null || stat -f %z "${clear_template}") -eq 1024 ]]
if [[ -b ${disk} ]]; then
[[ ${EUID} -eq 0 ]]
[[ $(readlink -f "${disk}") == /dev/vda ]]
elif [[ ! -f ${disk} ]]; then
echo "recovery beacon target is neither /dev/vda nor a test disk" >&2
exit 65
fi
readback=$(mktemp)
trap 'rm -f "${readback}"' EXIT
dd if="${disk}" of="${readback}" bs=512 skip="${beacon_lba}" count=2 status=none
if cmp -s "${readback}" "${clear_template}"; then
echo "GUANGHU_NATIVE_RECOVERY_BEACON_ALREADY_CLEAR"
exit 0
fi
if ! grep -aFq 'guanghu_recovery=ubuntu' "${readback}"; then
echo "unknown data occupies the recovery beacon sectors" >&2
exit 65
fi
dd if="${clear_template}" of="${disk}" bs=512 seek="${beacon_lba}" count=2 \
conv=notrunc,fsync status=none
dd if="${disk}" of="${readback}" bs=512 skip="${beacon_lba}" count=2 status=none
cmp "${readback}" "${clear_template}"
echo "GUANGHU_NATIVE_RECOVERY_BEACON_CLEARED"