diff --git a/product-source/hololake-platform/guanghu-os/scripts/set-jd-native-default.sh b/product-source/hololake-platform/guanghu-os/scripts/set-jd-native-default.sh new file mode 100755 index 0000000..f4eda9c --- /dev/null +++ b/product-source/hololake-platform/guanghu-os/scripts/set-jd-native-default.sh @@ -0,0 +1,89 @@ +#!/usr/bin/env bash +set -euo pipefail + +[[ $# -eq 3 ]] || { + echo "usage: set-jd-native-default.sh " >&2 + exit 64 +} +[[ ${EUID} -eq 0 ]] || exit 77 + +world_root=$(readlink -f "$1") +recovery_root=$(readlink -f "$2") +expected_candidate_sha=$3 +[[ ${expected_candidate_sha} =~ ^[0-9a-f]{64}$ ]] + +grep -q '^node_id: JD-FD-PRIMARY$' "${world_root}/CURRENT.hldp" +grep -q '^status: PASS_100$' "${recovery_root}/RETURN-RECEIPT.hldp" +/guanghu/bin/ghctl authorize "${world_root}" \ + overwrite_system_disk_and_exit_linux >/dev/null +grep -q "menuentry 'Guanghu OS JD native one-time resident'.*'guanghu-jd-native-once'" \ + /boot/grub/grub.cfg +grep -q "menuentry 'Ubuntu'.*'gnulinux-simple-9e4550a0-452b-4f28-b5a5-d5364aa450f6'" \ + /boot/grub/grub.cfg +grep -q "load_env --file '(hd0)139+2' guanghu_recovery" \ + /boot/grub/grub.cfg + +installed_sha=$(dd if=/dev/vda bs=512 skip=105 count=29 status=none | + sha256sum | awk '{print $1}') +[[ ${installed_sha} == "${expected_candidate_sha}" ]] + +cp /etc/default/grub "${recovery_root}/default-grub.before-native-default" +cp /boot/grub/grub.cfg "${recovery_root}/grub.cfg.before-native-default" +cp /boot/grub/grubenv "${recovery_root}/grubenv.before-native-default" +cat /proc/sys/kernel/random/boot_id \ + >"${recovery_root}/linux-boot-id.before-native-default" + +new_default=$(mktemp) +trap 'rm -f "${new_default}"' EXIT +awk ' + BEGIN { changed = 0 } + /^GRUB_DEFAULT=/ { + print "GRUB_DEFAULT=guanghu-jd-native-once" + changed = 1 + next + } + { print } + END { + if (!changed) { + print "GRUB_DEFAULT=guanghu-jd-native-once" + } + } +' /etc/default/grub >"${new_default}" +install -m 0644 "${new_default}" /etc/default/grub +update-grub >/dev/null + +grep -q '^GRUB_DEFAULT=guanghu-jd-native-once$' /etc/default/grub +grep -q 'set default="guanghu-jd-native-once"' /boot/grub/grub.cfg +grep -q "load_env --file '(hd0)139+2' guanghu_recovery" \ + /boot/grub/grub.cfg +grub-editenv /boot/grub/grubenv unset initrdfail prev_entry next_entry +! grub-editenv /boot/grub/grubenv list | + grep -Eq '^(initrdfail|prev_entry|next_entry)=.+$' + +observed_at=$(date --iso-8601=seconds) +cat >"${recovery_root}/NATIVE-DEFAULT-RECEIPT.hldp" < " >&2 + exit 64 +} +[[ ${EUID} -eq 0 ]] || exit 77 + +world_root=$(readlink -f "$1") +recovery_root=$(readlink -f "$2") +grep -q '^node_id: JD-FD-PRIMARY$' "${world_root}/CURRENT.hldp" +grep -q '^status: CONFIGURED_NOT_REBOOTED$' \ + "${recovery_root}/NATIVE-DEFAULT-RECEIPT.hldp" +/guanghu/bin/ghctl authorize "${world_root}" \ + run_tests_and_health_checks >/dev/null + +before_boot_id=$(<"${recovery_root}/linux-boot-id.before-native-default") +after_boot_id=$("${recovery_root}/NATIVE-DEFAULT-RETURN-RECEIPT.hldp" <