#!/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" <