X-Git-Url: https://iankelling.org/git/?a=blobdiff_plain;f=fai%2Fconfig%2Ffiles%2Froot%2Ffai-check%2FVOL_BULLSEYE_BOOTSTRAP;h=a2502387eddd999baeb483bff6fa252aee78e53e;hb=ceeb4e46d3bb326d01fcc7ed98d94ab0b580eda3;hp=6717987e003a25502fc752c9eed6daadd2780d44;hpb=bfd6bbd3a188aac6871f8b5e1116a0979682d52b;p=automated-distro-installer diff --git a/fai/config/files/root/fai-check/VOL_BULLSEYE_BOOTSTRAP b/fai/config/files/root/fai-check/VOL_BULLSEYE_BOOTSTRAP index 6717987..a250238 100755 --- a/fai/config/files/root/fai-check/VOL_BULLSEYE_BOOTSTRAP +++ b/fai/config/files/root/fai-check/VOL_BULLSEYE_BOOTSTRAP @@ -3,11 +3,11 @@ set -eE -o pipefail trap 'echo "$0:$LINENO:error: \"$BASH_COMMAND\" returned $?" >&2' ERR - +#set -x usage() { cat < deadline )); then echo "fai-check: hit $NETWORK_TIMOUT_SECS s tftp server timeout" return 0 fi sleep 1 done - m pxe-kexec -n --ignore-whitelist -l fai-generated faiserver ||: + m pxe-kexec -n --ignore-whitelist -l fai-generated $faiserver ||: } +force=false case $1 in + -h|--help) + usage + ;; -f|--force) - try-kexec - exit + force=true + shift ;; esac +faiserver=${1:-faiserver.b8.nz} + + +if $force; then + try-kexec + exit +fi + +if ! dmidecode -t system | grep -F "Version: ThinkPad X200" &>/dev/null; then + echo "not x200, exiting" + exit 0 +fi first=true for dev in $(btrfs fi show / | sed -rn 's#^\s*devid\s.*\s([^0-9 ]+)\S+$#\1#p' \ |sort); do - + echo dev=$dev + found=false # Decide which is my grub_ext partition. see partition.DEFAULT file - # for details - if [[ $(blockdev --getsize64 ${dev}4) == 8388608 ]]; then - # Old partition scheme - grub_extn=${dev}4 - elif [[ $(blockdev --getsize64 ${dev}5) == 8388608 ]]; then - # Old partition scheme - grub_extn=${dev}5 - else - grub_extn=${dev}7 + # for details. currently it is 4 + for (( i=4; i<=7; i++ )); do + if [[ $(blockdev --getsize64 ${dev}$i) == 8388608 ]]; then + grub_extn=${dev}$i + found=true + echo grub_extn=$grub_extn + break + fi + done + if ! $found; then + echo "$0: error: failed to find grub_ext partition." + exit 1 fi - mount $grub_extn /mnt + m mount $grub_extn /mnt if $first; then if [[ -e /mnt/grubenv ]]; then - set -x + m grub-editenv /mnt/grubenv list source <(grub-editenv /mnt/grubenv list) - set +x fi first=false # we could just as well check if last_boot != /debianbullseye_bootstrap # the intent with this one is just a little clearer. if [[ $did_fai_check == true ]]; then - grub-editenv /mnt/grubenv set did_fai_check=os_true + m grub-editenv /mnt/grubenv set did_fai_check=os_true # our service does not wait for network-online.target, # because it will wait for too long when we don't have a network # connection. So, we wait for 10 seconds. @@ -87,13 +106,17 @@ for dev in $(btrfs fi show / | sed -rn 's#^\s*devid\s.*\s([^0-9 ]+)\S+$#\1#p' \ # if looks at them, which may not be the same as us. # If the disk dies, we just lose the default boot option, # we will have to do manual steps to replace it anyways. - rm -f /mnt/gruvenv + m rm -f /mnt/gruvenv fi - umount /mnt + m umount /mnt done # the check for last_boot is not needed afaik, just sanity check. -if [[ $did_fai_check == true && $last_boot != /debianbullseye_bootstrap ]]; then - # no need to reboot if we actually want to boot into this os. - reboot -fi +case $did_fai_check in + true|os_true) + if [[ $last_boot != /debianbullseye_bootstrap ]]; then + # no need to reboot if we actually want to boot into this os. + echo "last_boot not debianbullseye_bootstrap, rebooting" + reboot + fi +esac