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.
This commit is contained in:
Adrian Gibanel Lopez 2015-08-21 23:54:46 +02:00
parent d43874c405
commit d515ae5684
8 changed files with 105 additions and 45 deletions

View File

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

View File

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

View File

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

View File

@ -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
;;
echo "${LB_BOOTLOADERS}" | \
while IFS="," read -r BOOTLOADER
do
case "${BOOTLOADER}" in
grub)
Check_package chroot /usr/sbin/grub grub
;;
esac
done
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}
;;
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

View File

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

View File

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

View File

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

View File

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