summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAdrian Gibanel Lopez <adrian.gibanel@btactic.com>2015-08-21 23:54:46 +0200
committerAdrian Gibanel Lopez <adrian.gibanel@btactic.com>2015-08-29 23:56:41 +0200
commitd515ae56842f9420ff4c629eac18904f7beef2e8 (patch)
tree54303ab985d71ee280562b7ed75413c56a63ee93
parentd43874c405ca468fc72158da6280c6b11755a3e6 (diff)
downloadvyos-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-xfunctions/defaults.sh11
-rwxr-xr-xscripts/build/binary_grub-legacy18
-rwxr-xr-xscripts/build/binary_grub-pc20
-rwxr-xr-xscripts/build/binary_hdd54
-rwxr-xr-xscripts/build/binary_iso6
-rwxr-xr-xscripts/build/binary_syslinux20
-rwxr-xr-xscripts/build/config14
-rwxr-xr-xscripts/build/source_debian9
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