diff options
author | Lyndon Brown <jnqnfe@gmail.com> | 2020-05-04 14:28:37 +0100 |
---|---|---|
committer | Lyndon Brown <jnqnfe@gmail.com> | 2020-05-04 21:40:13 +0100 |
commit | 3f840aeeba982a858a881271a3bb48bca5b50dd8 (patch) | |
tree | 028cabca052c064e2bb566dbdaee78a05422f505 /functions | |
parent | f3a818da9ab1998944c20b0847a733bbdacb61d8 (diff) | |
download | vyos-live-build-3f840aeeba982a858a881271a3bb48bca5b50dd8.tar.gz vyos-live-build-3f840aeeba982a858a881271a3bb48bca5b50dd8.zip |
fully validate BIOS/EFI bootloader combinations
thus far, config bootloader validation only did the basic check that each
bootloader specified was a known and supported bootloader, it did not check
combinations.
it now checks combinations, and strips out the previous "bootloader role"
stuff.
the no-bootloaders warning is duplicated, covering two slightly different
situations (empty string, and whitespace string). this is anticipated to
be just temporary, with this just being the first step in better handling
bootloader selections.
Gbp-Dch: Short
Diffstat (limited to 'functions')
-rwxr-xr-x | functions/bootloaders.sh | 80 | ||||
-rwxr-xr-x | functions/configuration.sh | 33 |
2 files changed, 28 insertions, 85 deletions
diff --git a/functions/bootloaders.sh b/functions/bootloaders.sh deleted file mode 100755 index a6883a67f..000000000 --- a/functions/bootloaders.sh +++ /dev/null @@ -1,80 +0,0 @@ -#!/bin/sh - -## live-build(7) - System Build Scripts -## Copyright (C) 2016-2020 The Debian Live team -## Copyright (C) 2016 Adrian Gibanel Lopez <adrian15sgd@gmail.com> -## -## This program comes with ABSOLUTELY NO WARRANTY; for details see COPYING. -## This is free software, and you are welcome to redistribute it -## under certain conditions; see COPYING for details. - -Is_Requested_Bootloader () -{ - local BOOTLOADER - for BOOTLOADER in ${LB_BOOTLOADERS}; do - if [ "${BOOTLOADER}" = "${1}" ]; then - return 0 - fi - done - return 1 -} - -Is_First_Bootloader () -{ - if [ "${LB_FIRST_BOOTLOADER}" != "${1}" ]; then - return 1 - fi - return 0 -} - -Is_Extra_Bootloader () -{ - if Is_First_Bootloader "${1}"; then - return 1 - fi - if ! Is_Requested_Bootloader "${1}"; then - return 1 - fi - return 0 -} - -Check_Non_First_Bootloader () -{ - if Is_First_Bootloader "${1}"; then - Echo_error "Bootloader: \`${1}\` is not supported as a first bootloader." - exit 1 - fi -} - -Check_Non_Extra_Bootloader () -{ - if Is_Extra_Bootloader "${1}"; then - Echo_error "Bootloader: \`${1}\` is not supported as a extra bootloader." - exit 1 - fi -} - -Check_First_Bootloader_Role () -{ - Check_Non_Extra_Bootloader "${1}" - - if ! Is_First_Bootloader "${1}"; then - exit 0 - fi -} - -Check_Extra_Bootloader_Role () -{ - Check_Non_First_Bootloader "${1}" - - if ! Is_Extra_Bootloader "${1}"; then - exit 0 - fi -} - -Check_Any_Bootloader_Role () -{ - if ! Is_Requested_Bootloader "${1}"; then - exit 0 - fi -} diff --git a/functions/configuration.sh b/functions/configuration.sh index 6b5cfdc63..85873bdcd 100755 --- a/functions/configuration.sh +++ b/functions/configuration.sh @@ -576,12 +576,35 @@ Validate_config_permitted_values () Echo_warning "You have specified no bootloaders; I predict that you will experience some problems!" else local BOOTLOADER - for BOOTLOADER in ${LB_BOOTLOADERS}; do - if ! In_list "${BOOTLOADER}" grub-legacy grub-pc grub-efi syslinux; then - Echo_error "The following is not a valid bootloader: '%s'" "${BOOTLOADER}" - exit 1 - fi + local BOOTLOADERS_BIOS=0 + local BOOTLOADERS_EFI=0 + for BOOTLOADER in $LB_BOOTLOADERS; do + # Note, multiple instances of the same bootloader should be rejected, + # to avoid issues (e.g. in `binary_iso` bootloader handling). + case "${BOOTLOADER}" in + grub-legacy|grub-pc|syslinux) + BOOTLOADERS_BIOS=$(( $BOOTLOADERS_BIOS + 1 )) + ;; + grub-efi) + BOOTLOADERS_EFI=$(( $BOOTLOADERS_EFI + 1 )) + ;; + *) + Echo_error "The following is not a valid bootloader: '%s'" "${BOOTLOADER}" + exit 1 + ;; + esac done + if [ $BOOTLOADERS_BIOS -ge 2 ]; then + Echo_error "Invalid bootloader selection. Multiple BIOS instances specified." + exit 1 + fi + if [ $BOOTLOADERS_EFI -ge 2 ]; then + Echo_error "Invalid bootloader selection. Multiple EFI instances specified." + exit 1 + fi + if [ $BOOTLOADERS_BIOS -eq 0 ] && [ $BOOTLOADERS_EFI -eq 0 ]; then + Echo_warning "You have specified no bootloaders; I predict that you will experience some problems!" + fi fi local CACHE_STAGE |