diff options
author | Adrian Gibanel Lopez <adrian.gibanel@btactic.com> | 2015-08-21 23:54:46 +0200 |
---|---|---|
committer | Adrian Gibanel Lopez <adrian.gibanel@btactic.com> | 2015-08-29 23:56:41 +0200 |
commit | d515ae56842f9420ff4c629eac18904f7beef2e8 (patch) | |
tree | 54303ab985d71ee280562b7ed75413c56a63ee93 | |
parent | d43874c405ca468fc72158da6280c6b11755a3e6 (diff) | |
download | vyos-live-build-d515ae56842f9420ff4c629eac18904f7beef2e8.tar.gz vyos-live-build-d515ae56842f9420ff4c629eac18904f7beef2e8.zip |
Multi bootloader support
Note: OLDIFS use makes IFS to be reset to "" instead to it being unset.
Either we need to detect if old IFS was unset to unset it
or we need a proper way of setting it as a local variable.
Even more IFS it's not currently used in
Check_package (which it's called from: binary_hdd).
we should have a clean way of resetting/unsetting IFS when calling Check_package.
The other approach it's to explicitly define IFS with its default value in the
places inside live-build code where we implicitly suppose that it's going to have
its default value.
-rwxr-xr-x | functions/defaults.sh | 11 | ||||
-rwxr-xr-x | scripts/build/binary_grub-legacy | 18 | ||||
-rwxr-xr-x | scripts/build/binary_grub-pc | 20 | ||||
-rwxr-xr-x | scripts/build/binary_hdd | 54 | ||||
-rwxr-xr-x | scripts/build/binary_iso | 6 | ||||
-rwxr-xr-x | scripts/build/binary_syslinux | 20 | ||||
-rwxr-xr-x | scripts/build/config | 14 | ||||
-rwxr-xr-x | scripts/build/source_debian | 9 |
8 files changed, 106 insertions, 46 deletions
diff --git a/functions/defaults.sh b/functions/defaults.sh index eba52ae28..a0cb96899 100755 --- a/functions/defaults.sh +++ b/functions/defaults.sh @@ -536,11 +536,11 @@ Set_defaults () esac # Setting bootloader - if [ -z "${LB_BOOTLOADER}" ] + if [ -z "${LB_BOOTLOADERS}" ] then case "${LB_ARCHITECTURES}" in amd64|i386) - LB_BOOTLOADER="syslinux" + LB_BOOTLOADERS="syslinux" ;; esac fi @@ -853,7 +853,10 @@ Check_defaults () fi fi - if [ "${LB_BOOTLOADER}" = "syslinux" ] + + LB_PRIMARY_BOOTLOADER=$(echo "${LB_BOOTLOADERS}" | awk -F, '{ print $1 }') + + if [ "${LB_PRIMARY_BOOTLOADER}" = "syslinux" ] then # syslinux + fat or ntfs, or extlinux + ext[234] or btrfs case "${LB_BINARY_FILESYSTEM}" in @@ -867,7 +870,7 @@ Check_defaults () case "${LIVE_IMAGE_TYPE}" in hdd*) - case "${LB_BOOTLOADER}" in + case "${LB_PRIMARY_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 8a2093b1c..f885c00cc 100755 --- a/scripts/build/binary_grub-legacy +++ b/scripts/build/binary_grub-legacy @@ -24,9 +24,21 @@ Arguments "${@}" Read_conffiles config/all config/common config/bootstrap config/chroot config/binary config/source Set_defaults -if [ "${LB_BOOTLOADER}" != "grub-legacy" ] -then - exit 0 +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 Echo_message "Begin installing grub-legacy..." diff --git a/scripts/build/binary_grub-pc b/scripts/build/binary_grub-pc index de2683c79..1eae93a2a 100755 --- a/scripts/build/binary_grub-pc +++ b/scripts/build/binary_grub-pc @@ -24,9 +24,23 @@ Arguments "${@}" Read_conffiles config/all config/common config/bootstrap config/chroot config/binary config/source Set_defaults -if [ "${LB_BOOTLOADER}" != "grub-pc" ] -then - exit 0 +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 Echo_message "Begin installing grub-pc..." diff --git a/scripts/build/binary_hdd b/scripts/build/binary_hdd index 6758c5678..c958aff9a 100755 --- a/scripts/build/binary_hdd +++ b/scripts/build/binary_hdd @@ -57,26 +57,34 @@ esac Check_package chroot /usr/share/doc/mtools mtools Check_package chroot /sbin/parted parted -case "${LB_BOOTLOADER}" in - grub) - Check_package chroot /usr/sbin/grub grub - ;; - - syslinux) - case ${LB_BINARY_FILESYSTEM} in - fat*|ntfs) - _BOOTLOADER=syslinux - ;; - ext[234]|btrfs) - _BOOTLOADER=extlinux - ;; - *) - Echo_error "syslinux/extlinux doesn't support ${LB_BINARY_FILESYSTEM}" - exit 1 - ;; - esac - Check_package chroot /usr/bin/${_BOOTLOADER} ${_BOOTLOADER} - ;; +echo "${LB_BOOTLOADERS}" | \ +while IFS="," read -r BOOTLOADER +do + case "${BOOTLOADER}" in + grub) + Check_package chroot /usr/sbin/grub grub + ;; + esac +done + +LB_PRIMARY_BOOTLOADER=$(echo "${LB_BOOTLOADERS}" | awk -F, '{ print $1 }') + +case ${LB_PRIMARY_BOOTLOADER} in + syslinux) + case ${LB_BINARY_FILESYSTEM} in + fat*|ntfs) + _BOOTLOADER=syslinux + ;; + ext[234]|btrfs) + _BOOTLOADER=extlinux + ;; + *) + Echo_error "syslinux/extlinux doesn't support ${LB_BINARY_FILESYSTEM}" + exit 1 + ;; + esac + Check_package chroot /usr/bin/${_BOOTLOADER} ${_BOOTLOADER} + ;; esac # Restoring cache @@ -168,7 +176,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_BOOTLOADER}" = "syslinux" ] + if [ "${LB_PRIMARY_BOOTLOADER}" = "syslinux" ] then dd if=chroot/usr/lib/SYSLINUX/mbr.bin of=${FREELO} bs=440 count=1 fi @@ -180,7 +188,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_BOOTLOADER}" = "syslinux" ] + if [ "${LB_PRIMARY_BOOTLOADER}" = "syslinux" ] then dd if=/usr/lib/SYSLINUX/mbr.bin of=${FREELO} bs=440 count=1 fi @@ -246,7 +254,7 @@ cp -T ${CP_OPTIONS} binary/ chroot/binary.tmp FIXME() { -if [ "${LB_BOOTLOADER}" = "grub" ] +if [ "${LB_PRIMARY_BOOTLOADER}" = "grub" ] then cat > chroot/grub.sh << EOF diff --git a/scripts/build/binary_iso b/scripts/build/binary_iso index e81a13af1..d8b1553e4 100755 --- a/scripts/build/binary_iso +++ b/scripts/build/binary_iso @@ -107,8 +107,10 @@ then XORRISO_OPTIONS="${XORRISO_OPTIONS} -V \"${LB_ISO_VOLUME}\"" fi +LB_PRIMARY_BOOTLOADER=$(echo "${LB_BOOTLOADERS}" | awk -F, '{ print $1 }') + # Handle xorriso architecture specific options -case "${LB_BOOTLOADER}" in +case "${LB_PRIMARY_BOOTLOADER}" in grub) XORRISO_OPTIONS="${XORRISO_OPTIONS} -no-emul-boot -boot-load-size 4 -boot-info-table" XORRISO_OPTIONS="${XORRISO_OPTIONS} -b boot/grub/stage2_eltorito" @@ -149,7 +151,7 @@ esac # XORRISO_OPTIONS="${XORRISO_OPTIONS} -m ${XORRISO_EXCLUDE}" #fi -if [ "${LB_BOOTLOADER}" = "grub-pc" ] +if [ "${LB_PRIMARY_BOOTLOADER}" = "grub-pc" ] then cat > binary.sh << EOF diff --git a/scripts/build/binary_syslinux b/scripts/build/binary_syslinux index 41d7feccb..024b56358 100755 --- a/scripts/build/binary_syslinux +++ b/scripts/build/binary_syslinux @@ -24,9 +24,23 @@ Arguments "${@}" Read_conffiles config/all config/common config/bootstrap config/chroot config/binary config/source Set_defaults -if [ "${LB_BOOTLOADER}" != "syslinux" ] -then - exit 0 +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 Echo_message "Begin installing syslinux..." diff --git a/scripts/build/config b/scripts/build/config index 66bf64fdd..fbe986588 100755 --- a/scripts/build/config +++ b/scripts/build/config @@ -32,7 +32,7 @@ USAGE="${PROGRAM} [--apt apt|aptitude]\n\ \t [--bootappend-install PARAMETER|\"PARAMETERS\"]\n\ \t [--bootappend-live PARAMETER|\"PARAMETERS\"]\n\ \t [--bootappend-live-failsafe PARAMETER|\"PARAMETERS\"]\n\ -\t [--bootloader grub-legacy|grub-pc|syslinux]\n\ +\t [--bootloaders grub-legacy|grub-pc|syslinux]\n\ \t [--cache true|false]\n\ \t [--cache-indices true|false]\n\ \t [--cache-packages true|false]\n\ @@ -137,7 +137,7 @@ Local_arguments () archive-areas:,parent-archive-areas:,chroot-filesystem:, gzip-options:,image-name:,interactive:,keyring-packages:,linux-flavours:,linux-packages:, security:,updates:,backports:,binary-filesystem:,binary-images:, - apt-indices:,bootappend-install:,bootappend-live:,bootappend-live-failsafe:,bootloader:,checksums:,compression:,config:,zsync:,build-with-chroot:, + apt-indices:,bootappend-install:,bootappend-live:,bootappend-live-failsafe:,bootloaders:,checksums:,compression:,config:,zsync:,build-with-chroot:, debian-installer:,debian-installer-distribution:,debian-installer-preseedfile:,debian-installer-gui:, grub-splash:,isohybrid-options:,hdd-label:,hdd-size:,iso-application:,iso-preparer:,iso-publisher:, iso-volume:,jffs2-eraseblock:,memtest:,net-root-filesystem:,net-root-mountoptions:, @@ -491,8 +491,8 @@ Local_arguments () shift 2 ;; - --bootloader) - LB_BOOTLOADER="${2}" + --bootloaders) + LB_BOOTLOADERS="${2}" shift 2 ;; @@ -1149,9 +1149,9 @@ LB_BOOTAPPEND_INSTALL="${LB_BOOTAPPEND_INSTALL}" # (Default: empty) LB_BOOTAPPEND_LIVE_FAILSAFE="${LB_BOOTAPPEND_LIVE_FAILSAFE}" -# \$LB_BOOTLOADER: set bootloader -# (Default: ${LB_BOOTLOADER}) -LB_BOOTLOADER="${LB_BOOTLOADER}" +# \$LB_BOOTLOADERS: set bootloaders +# (Default: ${LB_BOOTLOADERS}) +LB_BOOTLOADERS="${LB_BOOTLOADERS}" # \$LB_CHECKSUMS: set checksums # (Default: ${LB_CHECKSUMS}) diff --git a/scripts/build/source_debian b/scripts/build/source_debian index 9b3b63483..321ed1b4a 100755 --- a/scripts/build/source_debian +++ b/scripts/build/source_debian @@ -52,8 +52,15 @@ fi # Download sources Chroot chroot "dpkg --get-selections" | awk '{ print $1 }' > source-selection.txt +echo "${LB_BOOTLOADERS}" | \ +while IFS="," read -r BOOTLOADER +do + cat >> source-selection.txt << EOF + ${BOOTLOADER} +EOF +done + cat >> source-selection.txt << EOF -${LB_BOOTLOADER} live-build EOF |