hololake-system-architecture/product-source/hololake-platform/guanghu-os/scripts/test-native-recovery-beacon-contract.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

61 lines
2.3 KiB
Shell
Executable file

#!/usr/bin/env bash
set -euo pipefail
source_root=$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)
test_root=$(mktemp -d)
trap 'rm -rf "${test_root}"' EXIT
"${source_root}/scripts/render-native-recovery-beacon.sh" "${test_root}"
active=${test_root}/guanghu-recovery-active.env
clear=${test_root}/guanghu-recovery-clear.env
grub=${test_root}/08_guanghu_native_recovery
[[ $(stat -c %s "${active}" 2>/dev/null || stat -f %z "${active}") -eq 1024 ]]
[[ $(stat -c %s "${clear}" 2>/dev/null || stat -f %z "${clear}") -eq 1024 ]]
grep -aFxq 'guanghu_recovery=ubuntu' "${active}"
if grep -aFq 'guanghu_recovery=ubuntu' "${clear}"; then
echo "clear recovery beacon contains the active marker" >&2
exit 1
fi
grep -Fq "load_env --file '(hd0)68+2' guanghu_recovery" "${grub}"
grep -Fq 'if [ "${guanghu_recovery}" = "ubuntu" ]; then' "${grub}"
grep -Fq 'set default="gnulinux-simple-9842d3d6-a839-4127-bda7-f19137effe71"' \
"${grub}"
if grep -Fq "save_env --file '(hd0)68+2' guanghu_recovery" "${grub}"; then
echo "GRUB must not write the raw GHNRP blocklist" >&2
exit 1
fi
python3 - "${active}" "${clear}" <<'PY'
import pathlib
import sys
header = (
b"# GRUB Environment Block\n"
b"# WARNING: Do not edit this file by tools other than grub-editenv!!!\n"
)
active = pathlib.Path(sys.argv[1]).read_bytes()
clear = pathlib.Path(sys.argv[2]).read_bytes()
assert active.startswith(header + b"guanghu_recovery=ubuntu\n")
assert clear.startswith(header)
assert active.rstrip(b"#").endswith(b"guanghu_recovery=ubuntu\n")
assert clear[len(header):] == b"#" * (1024 - len(header))
PY
disk=${test_root}/recovery-layout.img
truncate -s $((70 * 512)) "${disk}"
dd if="${active}" of="${disk}" bs=512 seek=68 count=2 conv=notrunc status=none
cmp "${active}" <(dd if="${disk}" bs=512 skip=68 count=2 status=none)
"${source_root}/scripts/clear-native-recovery-beacon.sh" "${disk}" "${clear}"
cmp "${clear}" <(dd if="${disk}" bs=512 skip=68 count=2 status=none)
grep -q '^%define GHOS_NATIVE_RECOVERY_BEACON_LBA 68$' \
"${source_root}/native/x86_64-bios/ghal-virtio.asm"
grep -q '^%define NATIVE_RECOVERY_BEACON_LBA GHOS_NATIVE_RECOVERY_BEACON_LBA$' \
"${source_root}/native/x86_64-bios/ghal-virtio.asm"
grep -q 'db "guanghu_recovery=ubuntu", 10' \
"${source_root}/native/x86_64-bios/ghal-virtio.asm"
echo "GUANGHU_NATIVE_RECOVERY_BEACON_CONTRACT_OK"