diff --git a/functions/configuration.sh b/functions/configuration.sh index 85873bdcd..b74ea0e50 100755 --- a/functions/configuration.sh +++ b/functions/configuration.sh @@ -287,24 +287,33 @@ Prepare_config () ;; esac - if [ -z "${LB_BOOTLOADERS}" ] - then - case "${LB_ARCHITECTURE}" in - amd64|i386) - case "${LB_IMAGE_TYPE}" in - hdd|netboot) - LB_BOOTLOADERS="syslinux" - ;; - *) - LB_BOOTLOADERS="syslinux,grub-efi" - ;; - esac - ;; - esac + case "${LB_ARCHITECTURE}" in + amd64|i386) + LB_BOOTLOADER_BIOS="${LB_BOOTLOADER_BIOS:-syslinux}" + if ! In_list "${LB_IMAGE_TYPE}" hdd netboot; then + LB_BOOTLOADER_EFI="${LB_BOOTLOADER_EFI:-grub-efi}" + fi + ;; + esac + # Command line option combines BIOS and EFI selection in one. + # Also, need to support old config files that held `LB_BOOTLOADERS`. + # Note that this function does not perform validation, so none is done here. + if [ -n "${LB_BOOTLOADERS}" ]; then + LB_BOOTLOADERS="$(echo "${LB_BOOTLOADERS}" | tr "," " ")" + unset LB_BOOTLOADER_BIOS + unset LB_BOOTLOADER_EFI + local BOOTLOADER + for BOOTLOADER in $LB_BOOTLOADERS; do + case "${BOOTLOADER}" in + grub-legacy|grub-pc|syslinux) + LB_BOOTLOADER_BIOS="${BOOTLOADER}" + ;; + grub-efi) + LB_BOOTLOADER_EFI="${BOOTLOADER}" + ;; + esac + done fi - LB_BOOTLOADERS="$(echo "${LB_BOOTLOADERS}" | tr "," " ")" - - LB_FIRST_BOOTLOADER=$(echo "${LB_BOOTLOADERS}" | awk '{ print $1 }') LB_CHECKSUMS="${LB_CHECKSUMS:-sha256}" @@ -572,9 +581,18 @@ Validate_config_permitted_values () exit 1 fi - if [ -z "${LB_BOOTLOADERS}" ]; then + if [ -z "${LB_BOOTLOADER_BIOS}" ] && [ -z "${LB_BOOTLOADER_EFI}" ]; then Echo_warning "You have specified no bootloaders; I predict that you will experience some problems!" - else + fi + if [ -n "${LB_BOOTLOADER_BIOS}" ] && ! In_list "${LB_BOOTLOADER_BIOS}" grub-legacy grub-pc syslinux; then + Echo_error "You have specified an invalid BIOS bootloader." + exit 1 + fi + if [ -n "${LB_BOOTLOADER_EFI}" ] && ! In_list "${LB_BOOTLOADER_EFI}" grub-efi; then + Echo_error "You have specified an invalid EFI bootloader." + exit 1 + fi + if [ -n "${LB_BOOTLOADERS}" ]; then local BOOTLOADER local BOOTLOADERS_BIOS=0 local BOOTLOADERS_EFI=0 diff --git a/scripts/build/binary_grub-efi b/scripts/build/binary_grub-efi index 2fec81d63..2ee26f40d 100755 --- a/scripts/build/binary_grub-efi +++ b/scripts/build/binary_grub-efi @@ -21,7 +21,7 @@ USAGE="${PROGRAM} [--force]" # Processing arguments and configuration files Init_config_data "${@}" -if ! In_list "grub-efi" $LB_BOOTLOADERS; then +if [ "${LB_BOOTLOADER_EFI}" != "grub-efi" ]; then exit 0 fi diff --git a/scripts/build/binary_grub-legacy b/scripts/build/binary_grub-legacy index 6399b8e5f..4acbd2e50 100755 --- a/scripts/build/binary_grub-legacy +++ b/scripts/build/binary_grub-legacy @@ -21,7 +21,7 @@ USAGE="${PROGRAM} [--force]" # Processing arguments and configuration files Init_config_data "${@}" -if ! In_list "grub-legacy" $LB_BOOTLOADERS; then +if [ "${LB_BOOTLOADER_BIOS}" != "grub-legacy" ]; then exit 0 fi diff --git a/scripts/build/binary_grub-pc b/scripts/build/binary_grub-pc index ac6fd04a1..f639b1aa1 100755 --- a/scripts/build/binary_grub-pc +++ b/scripts/build/binary_grub-pc @@ -21,7 +21,7 @@ USAGE="${PROGRAM} [--force]" # Processing arguments and configuration files Init_config_data "${@}" -if ! In_list "grub-pc" $LB_BOOTLOADERS; then +if [ "${LB_BOOTLOADER_BIOS}" != "grub-pc" ]; then exit 0 fi diff --git a/scripts/build/binary_hdd b/scripts/build/binary_hdd index beaff873d..c6aeedb15 100755 --- a/scripts/build/binary_hdd +++ b/scripts/build/binary_hdd @@ -52,15 +52,11 @@ Check_package chroot /sbin/parted parted Check_package host /sbin/fdisk fdisk Check_package host /sbin/losetup mount -for BOOTLOADER in ${LB_BOOTLOADERS}; do - case "${BOOTLOADER}" in - grub-legacy) - Check_package chroot /usr/sbin/grub grub - ;; - esac -done +case "${LB_BOOTLOADER_BIOS}" in + grub-legacy) + Check_package chroot /usr/sbin/grub grub + ;; -case ${LB_FIRST_BOOTLOADER} in syslinux) case ${LB_BINARY_FILESYSTEM} in fat*|ntfs) @@ -189,8 +185,7 @@ case "${LB_BUILD_WITH_CHROOT}" in Chroot chroot "parted -s ${FREELO} set 1 boot on" || true Chroot chroot "parted -s ${FREELO} set 1 lba off" || true - if [ "${LB_FIRST_BOOTLOADER}" = "syslinux" ] - then + if [ "${LB_BOOTLOADER_BIOS}" = "syslinux" ]; then dd if=chroot/usr/lib/$(echo ${_BOOTLOADER} | tr [a-z] [A-Z])/mbr.bin of=${FREELO} bs=440 count=1 fi ;; @@ -209,8 +204,7 @@ case "${LB_BUILD_WITH_CHROOT}" in parted -s "${FREELO}" set 1 boot on || true parted -s "${FREELO}" set 1 lba off || true - if [ "${LB_FIRST_BOOTLOADER}" = "syslinux" ] - then + if [ "${LB_BOOTLOADER_BIOS}" = "syslinux" ]; then dd if=/usr/lib/$(echo ${_BOOTLOADER} | tr [a-z] [A-Z])/mbr.bin of=${FREELO} bs=440 count=1 fi ;; @@ -275,8 +269,7 @@ cp -T ${CP_OPTIONS} binary/ chroot/binary.tmp FIXME() { -if [ "${LB_FIRST_BOOTLOADER}" = "grub-legacy" ] -then +if [ "${LB_BOOTLOADER_BIOS}" = "grub-legacy" ]; then cat > chroot/grub.sh << EOF #!/bin/sh diff --git a/scripts/build/binary_syslinux b/scripts/build/binary_syslinux index 2374d5c55..d4f4bf272 100755 --- a/scripts/build/binary_syslinux +++ b/scripts/build/binary_syslinux @@ -21,7 +21,7 @@ USAGE="${PROGRAM} [--force]" # Processing arguments and configuration files Init_config_data "${@}" -if ! In_list "syslinux" $LB_BOOTLOADERS; then +if [ "${LB_BOOTLOADER_BIOS}" != "syslinux" ]; then exit 0 fi diff --git a/scripts/build/config b/scripts/build/config index f8fd5ff89..2bd929bc1 100755 --- a/scripts/build/config +++ b/scripts/build/config @@ -364,6 +364,7 @@ Local_arguments () ;; --bootloaders|--bootloader) + # This will be split up into BIOS and EFI selections by `Prepare_config()` LB_BOOTLOADERS="${2}" shift 2 ;; @@ -1182,8 +1183,11 @@ LB_BOOTAPPEND_INSTALL="${LB_BOOTAPPEND_INSTALL}" # Set boot parameters LB_BOOTAPPEND_LIVE_FAILSAFE="${LB_BOOTAPPEND_LIVE_FAILSAFE}" -# Set bootloaders -LB_BOOTLOADERS="${LB_BOOTLOADERS}" +# Set BIOS bootloader +LB_BOOTLOADER_BIOS="${LB_BOOTLOADER_BIOS}" + +# Set EFI bootloader +LB_BOOTLOADER_EFI="${LB_BOOTLOADER_EFI}" # Set checksums LB_CHECKSUMS="${LB_CHECKSUMS}" diff --git a/scripts/build/source_debian b/scripts/build/source_debian index 2eed78861..ade03add9 100755 --- a/scripts/build/source_debian +++ b/scripts/build/source_debian @@ -54,9 +54,12 @@ Chroot chroot "sh source-selection.sh" rm -f chroot/source-selection.sh mv chroot/source-selection.txt ./ -for BOOTLOADER in ${LB_BOOTLOADERS}; do - echo "${BOOTLOADER}" >> source-selection.txt -done +if [ -n "${LB_BOOTLOADER_BIOS}" ]; then + echo "${LB_BOOTLOADER_BIOS}" >> source-selection.txt +fi +if [ -n "${LB_BOOTLOADER_EFI}" ]; then + echo "${LB_BOOTLOADER_EFI}" >> source-selection.txt +fi echo "live-build" >> source-selection.txt