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
This commit is contained in:
Lyndon Brown 2020-05-04 14:28:37 +01:00
parent f3a818da9a
commit 3f840aeeba
6 changed files with 43 additions and 92 deletions

View File

@ -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
}

View File

@ -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

View File

@ -21,11 +21,13 @@ USAGE="${PROGRAM} [--force]"
# Processing arguments and configuration files
Init_config_data "${@}"
if In_list "${LB_IMAGE_TYPE}" hdd netboot; then
if ! In_list "grub-efi" $LB_BOOTLOADERS; then
exit 0
fi
Check_Any_Bootloader_Role "grub-efi"
if In_list "${LB_IMAGE_TYPE}" hdd netboot; then
exit 0
fi
Echo_message "Begin preparing Grub based EFI support..."

View File

@ -21,11 +21,13 @@ USAGE="${PROGRAM} [--force]"
# Processing arguments and configuration files
Init_config_data "${@}"
if In_list "${LB_IMAGE_TYPE}" hdd netboot; then
if ! In_list "grub-legacy" $LB_BOOTLOADERS; then
exit 0
fi
Check_First_Bootloader_Role "grub-legacy"
if In_list "${LB_IMAGE_TYPE}" hdd netboot; then
exit 0
fi
Echo_message "Begin installing grub-legacy..."

View File

@ -21,11 +21,13 @@ USAGE="${PROGRAM} [--force]"
# Processing arguments and configuration files
Init_config_data "${@}"
if In_list "${LB_IMAGE_TYPE}" hdd netboot; then
if ! In_list "grub-pc" $LB_BOOTLOADERS; then
exit 0
fi
Check_Any_Bootloader_Role "grub-pc"
if In_list "${LB_IMAGE_TYPE}" hdd netboot; then
exit 0
fi
Echo_message "Begin installing grub-pc..."

View File

@ -21,7 +21,9 @@ USAGE="${PROGRAM} [--force]"
# Processing arguments and configuration files
Init_config_data "${@}"
Check_Any_Bootloader_Role "syslinux"
if ! In_list "syslinux" $LB_BOOTLOADERS; then
exit 0
fi
Echo_message "Begin installing syslinux..."