" fi set kernel=kernel.efi if [ "$kernel_status" = "try" ]; then # a new kernel got installed set kernel_status="trying" save_env kernel_status # run fallback (menu entry #1) if we cannot start the kernel set fallback=1 # use try-kernel.efi set kernel=try-kernel.efi elif [ "$kernel_status" = "trying" ]; then # nothing cleared the "trying snap" so the boot failed # we clear the mode and boot normally set kernel_status="" save_env kernel_status elif [ -n "$kernel_status" ]; then # ERROR invalid kernel_status state, reset to empty echo "invalid kernel_status!!!" echo "resetting to empty" set kernel_status="" save_env kernel_status fi menuentry "Run Ubuntu Core" { # use $prefix because the symlink manipulation at runtime for kernel snap # upgrades, etc. should only need the /boot/grub/ directory, not the # /EFI/ubuntu/ directory chainloader $prefix/$kernel snapd_recovery_mode=run $cmdline_args } menuentry "Fallback on failed update" { # kernel_status has already been set to "trying", rebooting now # will fail the pending kernel update. Note that we cannot simply # chainload the fallback kernel as TPM measurements need to be # cleaned-up to be able to unseal the key. echo "Cannot start new kernel - booting previous one" reboot } # Snapd-Boot-Config-Edition: 2 set default=0 set timeout=3 set timeout_style=hidden if [ -e /EFI/ubuntu/grubenv ]; then load_env --file /EFI/ubuntu/grubenv snapd_recovery_mode snapd_recovery_system fi # standard cmdline params set snapd_static_cmdline_args='panic=-1' # if no default boot mode set, pick one if [ -z "$snapd_recovery_mode" ]; then set snapd_recovery_mode=install fi if [ "$snapd_recovery_mode" = "run" ]; then default="run" elif [ -n "$snapd_recovery_system" ]; then default=$snapd_recovery_mode-$snapd_recovery_system fi search --no-floppy --set=boot_fs --label ubuntu-boot if [ "$grub_cpu" = "x86_64" ]; then set snapd_static_cmdline_args='console=ttyS0 console=tty1 panic=-1' grub_binary="grubx64.efi" elif [ "$grub_cpu" = "arm64" ]; then grub_binary="grubaa64.efi" else echo "$grub_cpu" "is not supported" grub_binary="none" fi if [ -n "$boot_fs" ]; then menuentry "Continue to run mode" --hotkey=n --id=run { set root=($boot_fs) chainloader ($boot_fs)/EFI/boot/"$grub_binary" } fi # globbing in grub does not sort for label in /systems/*; do # match the system labels generated by snapd, which are usually just # numbers. eg. 20210706, but can be hyphen separated numbers and letters if ! regexp --set 1:label "/([a-z0-9](-?[a-z0-9])*)\$" "$label"; then continue fi # yes, you need to backslash that less-than if [ -z "$best" -o "$label" \< "$best" ]; then set best="$label" fi # if grubenv did not pick mode-system, use best one if [ -z "$snapd_recovery_system" ]; then default=$snapd_recovery_mode-$best fi set snapd_recovery_kernel= load_env --file /systems/$label/grubenv snapd_recovery_kernel snapd_extra_cmdline_args snapd_full_cmdline_args set cmdline_args="$snapd_static_cmdline_args $snapd_extra_cmdline_args" if [ -n "$snapd_full_cmdline_args" ]; then set cmdline_args="$snapd_full_cmdline_args" fi # We could "source /systems/$snapd_recovery_system/grub.cfg" here as well menuentry "Recover using $label" --hotkey=r --id=recover-$label $snapd_recovery_kernel recover $label { loopback loop $2 chainloader (loop)/kernel.efi snapd_recovery_mode=$3 snapd_recovery_system=$4 $cmdline_args } menuentry "Install using $label" --hotkey=i --id=install-$label $snapd_recovery_kernel install $label { loopback loop $2 chainloader (loop)/kernel.efi snapd_recovery_mode=$3 snapd_recovery_system=$4 $cmdline_args } menuentry "Factory reset using $label" --hotkey=i --id=factory-reset-$label $snapd_recovery_kernel factory-reset $label { loopback loop $2 chainloader (loop)/kernel.efi snapd_recovery_mode=$3 snapd_recovery_system=$4 $cmdline_args } done menuentry 'UEFI Firmware Settings' --hotkey=f 'uefi-firmware' { fwsetup }