#!/bin/sh # shebang is for editor file mode detection only function save_vars { if [ -s $envfile ]; then for var in $@; do save_env --file $envfile $var done fi } function save_chosen { save_vars did_fai_check last_boot } # fai_check is so we can act like a pxe boot, but just for fai, and by # using /stretch_bootstrap to do it. We toggle on and off the grub var # did_fai_check so we can do the check every other boot. Then # /debian_bootstrap checks for that var on boot and if we want to do a # fai check, it does it, then reboots. But fai-check also sets # did_fai_check to a 3rd state os_true which means we did the fai check, # and we don't want to do it again. This is useful for systems without # libreboot, although it's not used yet. # We don't set this to fai check so we can't get into # an infinite reboot cycle. We depend on the os to # create the initial grubenv file. set default=/debianstretch_bootstrap # could use 0 here. set timeout=1 for part in (ahci*4) (ata*4); do envfile=$part/grubenv if [ -s $envfile ]; then load_env --file $envfile if [ x$did_fai_check == xfalse -a x$last_boot != x$default ]; then set default=fai-check elif [ ! -z $last_boot ]; then set default=$last_boot fi break fi done did_fai_check=false bs_dir=/debianstretch_bootstrap menuentry $bs_dir --id=$bs_dir { # note, we might be able to use $chosen and avoid setting this here, # and set it inside save_chosen. but I haven't tested it, # it's just one less line of repitition. last_boot=$1 save_chosen configfile $bs_dir/boot/grub/grub.cfg } for dir in /boot_*; do if [ $dir == '/boot_*' ]; then break fi menuentry $dir --id=$dir { last_boot=$1 save_chosen configfile $1/grub/grub.cfg } done menuentry fai-check --id=fai-check { did_fai_check=true save_vars did_fai_check configfile $bs_dir/boot/grub/grub.cfg }