diff options
author | Adrian Gibanel Lopez <adrian.gibanel@btactic.com> | 2016-01-18 03:07:48 +0000 |
---|---|---|
committer | Adrian Gibanel Lopez <adrian.gibanel@btactic.com> | 2016-07-31 15:08:11 +0200 |
commit | 9d1a983cc8fe12966d1a2c24a6ee0cfb419b3ce5 (patch) | |
tree | 1c11f9966417b1d915baf8b264fb497dd82d4666 | |
parent | 0624064d44ed811aec5c43fabfd7b928688ed8e1 (diff) | |
download | vyos-live-build-9d1a983cc8fe12966d1a2c24a6ee0cfb419b3ce5.tar.gz vyos-live-build-9d1a983cc8fe12966d1a2c24a6ee0cfb419b3ce5.zip |
Added new multi bootloader helper functions
* Added: functions/bootloaders.sh . This file adds bootloader functions that are heavily used in efi scenarios where a bootloader can act as a first or an extra bootloader.
Since the introduction of the new switch:
--bootloaders
you can setup it like this:
--bootloaders=syslinux,grub-efi
.
This means that syslinux is the first bootloader and grub-efi is the extra bootloader.
* Added new bootloader functions: Check_Non_First_Bootloader and Check_Non_Extra_Bootloader.
These functions let each one of the bootloaders abort the build because
they cannot perform a role either as a first bootloader or as an extra bootloader.
* Added bootloader functions: Check_First_Bootloader_Role, Check_Extra_Bootloader_Role and Check_Any_Bootloader_Role
These functions let bootloaders to force their default role in a single line.
At the same time many binary bootloaders were rewritten to make use of the new bootloader role functions explained above.
These roles were enforced:
binary_grub-legacy : First bootloader
binary_grub-pc : Either first or extra bootloader
binary_syslinux : Either first or extra bootloader
If a bootloader is tried to be used in a role that it's not meant to be used then the build fails because that might lead to a non-bootable system.
-rw-r--r-- | functions/bootloaders.sh | 128 | ||||
-rwxr-xr-x | functions/defaults.sh | 6 | ||||
-rwxr-xr-x | scripts/build/binary_grub-legacy | 17 | ||||
-rwxr-xr-x | scripts/build/binary_grub-pc | 19 | ||||
-rwxr-xr-x | scripts/build/binary_hdd | 8 | ||||
-rwxr-xr-x | scripts/build/binary_iso | 2 | ||||
-rwxr-xr-x | scripts/build/binary_syslinux | 19 |
7 files changed, 139 insertions, 60 deletions
diff --git a/functions/bootloaders.sh b/functions/bootloaders.sh new file mode 100644 index 000000000..1898232e5 --- /dev/null +++ b/functions/bootloaders.sh @@ -0,0 +1,128 @@ +#!/bin/sh + +## live-build(7) - System Build Scripts +## 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_First_Bootloader () +{ + EVAL_FIRST_BOOTLOADER="${1}" + + if [ "${LB_FIRST_BOOTLOADER}" = "${EVAL_FIRST_BOOTLOADER}" ] + then + return 0 + else + return 1 + fi + +} + +Is_Bootloader () +{ + EVAL_BOOTLOADER="${1}" + OLDIFS="$IFS" + IFS="," + for BOOTLOADER in ${LB_BOOTLOADERS} + do + if [ "${BOOTLOADER}" = "${EVAL_BOOTLOADER}" ] + then + IFS="$OLDIFS" + return 0 + fi + done + IFS="$OLDIFS" + return 1 +} + +Is_Extra_Bootloader () +{ + EVAL_EXTRA_BOOTLOADER="${1}" + + if Is_First_Bootloader "${EVAL_EXTRA_BOOTLOADER}" + then + return 1 + else + if Is_Bootloader "${EVAL_EXTRA_BOOTLOADER}" + then + return 0 + fi + fi + return 1 + +} + +Check_Non_First_Bootloader () +{ + NON_FIRST_BOOTLOADER="${1}" + + if Is_First_Bootloader "${NON_FIRST_BOOTLOADER}" + then + Echo_error "Bootloader: ${NON_FIRST_BOOTLOADER} not supported as a first bootloader." + exit 1 + else + return 0 + fi +} + + +Check_Non_Extra_Bootloader () +{ + NON_EXTRA_BOOTLOADER="${1}" + + if Is_Extra_Bootloader "${NON_EXTRA_BOOTLOADER}" + then + Echo_error "Bootloader: ${NON_EXTRA_BOOTLOADER} not supported as a extra bootloader." + exit 1 + else + return 0 + fi +} + +Check_First_Bootloader_Role () +{ + FIRST_BOOTLOADER_ROLE="${1}" + Check_Non_Extra_Bootloader "${FIRST_BOOTLOADER_ROLE}" + + if Is_First_Bootloader "${FIRST_BOOTLOADER_ROLE}" + then + return 0 + else + exit 0 + fi + +} + +Check_Extra_Bootloader_Role () +{ + EXTRA_BOOTLOADER_ROLE="${1}" + Check_Non_First_Bootloader "${EXTRA_BOOTLOADER_ROLE}" + + if Is_Extra_Bootloader "${EXTRA_BOOTLOADER_ROLE}" + then + return 0 + else + exit 0 + fi + +} + +Check_Any_Bootloader_Role () +{ + ANY_BOOTLOADER_ROLE="${1}" + + if Is_First_Bootloader "${ANY_BOOTLOADER_ROLE}" + then + return 0 + fi + + if Is_Extra_Bootloader "${ANY_BOOTLOADER_ROLE}" + then + return 0 + fi + + exit 0 + +}
\ No newline at end of file diff --git a/functions/defaults.sh b/functions/defaults.sh index 334984f7b..deeaf2dc6 100755 --- a/functions/defaults.sh +++ b/functions/defaults.sh @@ -537,7 +537,7 @@ Set_defaults () esac fi - LB_PRIMARY_BOOTLOADER=$(echo "${LB_BOOTLOADERS}" | awk -F, '{ print $1 }') + LB_FIRST_BOOTLOADER=$(echo "${LB_BOOTLOADERS}" | awk -F, '{ print $1 }') # Setting checksums case "${LB_MODE}" in @@ -847,7 +847,7 @@ Check_defaults () fi fi - if [ "${LB_PRIMARY_BOOTLOADER}" = "syslinux" ] + if [ "${LB_FIRST_BOOTLOADER}" = "syslinux" ] then # syslinux + fat or ntfs, or extlinux + ext[234] or btrfs case "${LB_BINARY_FILESYSTEM}" in @@ -861,7 +861,7 @@ Check_defaults () case "${LIVE_IMAGE_TYPE}" in hdd*) - case "${LB_PRIMARY_BOOTLOADER}" in + case "${LB_FIRST_BOOTLOADER}" in grub) Echo_error "You have selected a combination of bootloader and image type that is currently not supported by live-build. Please use either another bootloader or a different image type." exit 1 diff --git a/scripts/build/binary_grub-legacy b/scripts/build/binary_grub-legacy index f885c00cc..93d9b9e14 100755 --- a/scripts/build/binary_grub-legacy +++ b/scripts/build/binary_grub-legacy @@ -24,22 +24,7 @@ Arguments "${@}" Read_conffiles config/all config/common config/bootstrap config/chroot config/binary config/source Set_defaults -FOUND_MYSELF="" -IFS="," -for BOOTLOADER in ${LB_BOOTLOADERS} -do - - case ${BOOTLOADER} in - "grub-legacy" ) - FOUND_MYSELF="True" - break ;; - esac - -done - -if [ -z ${FOUND_MYSELF} ] ; then - exit 0 -fi +Check_First_Bootloader_Role "grub-legacy" Echo_message "Begin installing grub-legacy..." diff --git a/scripts/build/binary_grub-pc b/scripts/build/binary_grub-pc index 1eae93a2a..9252f7acf 100755 --- a/scripts/build/binary_grub-pc +++ b/scripts/build/binary_grub-pc @@ -24,24 +24,7 @@ Arguments "${@}" Read_conffiles config/all config/common config/bootstrap config/chroot config/binary config/source Set_defaults -FOUND_MYSELF="" -OLDIFS="$IFS" -IFS="," -for BOOTLOADER in ${LB_BOOTLOADERS} -do - - case ${BOOTLOADER} in - "grub-pc" ) - FOUND_MYSELF="True" - break ;; - esac - -done -IFS="$OLDIFS" - -if [ -z ${FOUND_MYSELF} ] ; then - exit 0 -fi +Check_Any_Bootloader_Role "grub-pc" Echo_message "Begin installing grub-pc..." diff --git a/scripts/build/binary_hdd b/scripts/build/binary_hdd index b45b2a900..400403c0a 100755 --- a/scripts/build/binary_hdd +++ b/scripts/build/binary_hdd @@ -67,7 +67,7 @@ do esac done -case ${LB_PRIMARY_BOOTLOADER} in +case ${LB_FIRST_BOOTLOADER} in syslinux) case ${LB_BINARY_FILESYSTEM} in fat*|ntfs) @@ -182,7 +182,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_PRIMARY_BOOTLOADER}" = "syslinux" ] + if [ "${LB_FIRST_BOOTLOADER}" = "syslinux" ] then dd if=chroot/usr/lib/$(echo ${_BOOTLOADER} | tr [a-z] [A-Z])/mbr.bin of=${FREELO} bs=440 count=1 fi @@ -202,7 +202,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_PRIMARY_BOOTLOADER}" = "syslinux" ] + if [ "${LB_FIRST_BOOTLOADER}" = "syslinux" ] then dd if=/usr/lib/$(echo ${_BOOTLOADER} | tr [a-z] [A-Z])/mbr.bin of=${FREELO} bs=440 count=1 fi @@ -268,7 +268,7 @@ cp -T ${CP_OPTIONS} binary/ chroot/binary.tmp FIXME() { -if [ "${LB_PRIMARY_BOOTLOADER}" = "grub" ] +if [ "${LB_FIRST_BOOTLOADER}" = "grub" ] then cat > chroot/grub.sh << EOF diff --git a/scripts/build/binary_iso b/scripts/build/binary_iso index 67dfc85a2..a390f61a4 100755 --- a/scripts/build/binary_iso +++ b/scripts/build/binary_iso @@ -149,7 +149,7 @@ esac # XORRISO_OPTIONS="${XORRISO_OPTIONS} -m ${XORRISO_EXCLUDE}" #fi -if [ "${LB_PRIMARY_BOOTLOADER}" = "grub-pc" ] +if [ "${LB_FIRST_BOOTLOADER}" = "grub-pc" ] then cat > binary.sh << EOF diff --git a/scripts/build/binary_syslinux b/scripts/build/binary_syslinux index 66c14a059..1a442d7a2 100755 --- a/scripts/build/binary_syslinux +++ b/scripts/build/binary_syslinux @@ -24,24 +24,7 @@ Arguments "${@}" Read_conffiles config/all config/common config/bootstrap config/chroot config/binary config/source Set_defaults -FOUND_MYSELF="" -OLDIFS="$IFS" -IFS="," -for BOOTLOADER in ${LB_BOOTLOADERS} -do - - case ${BOOTLOADER} in - "syslinux" ) - FOUND_MYSELF="True" - break ;; - esac - -done -IFS="$OLDIFS" - -if [ -z ${FOUND_MYSELF} ] ; then - exit 0 -fi +Check_Any_Bootloader_Role "syslinux" Echo_message "Begin installing syslinux..." |