[build] Allow for building EFI ISOs without syslinux

The isohybrid tool (that creates a partition table to describe the ESP
embedded within the ISO image) relies upon the existence of the
x86-only isolinux.bin file.  This file may not be available on non-x86
build hosts.

We already allow for the possibility that isohybrid may not be present
on the build host, in which case we fall back to creating a non-hybrid
ISO image.  Make a similar allowance for the possibility that the
isolinux.bin file may not be present: require its existence only if we
are attempting to build a BIOS-bootable image, or if we will be
attempting to use isohybrid to create a hybrid ISO image.

Reported-by: Xiaotian Wu <wuxiaotian@loongson.cn>
Signed-off-by: Michael Brown <mcb30@ipxe.org>
pull/992/head
Michael Brown 2023-07-10 13:45:47 +01:00
parent c30b71ee9c
commit dd68e283f8
1 changed files with 19 additions and 9 deletions

View File

@ -229,17 +229,27 @@ done
# Configure ISO image, if applicable # Configure ISO image, if applicable
# #
# Note that the BIOS boot files are required even for an EFI-only ISO, # Note that the BIOS boot files are required even for an EFI-only
# since isohybrid will refuse to work without them. # hybrid ISO, since isohybrid will refuse to work without them.
# #
if [ -n "${ISOIMG}" ] ; then if [ -n "${ISOIMG}" ] ; then
ISOARGS="-J -R -l" ISOARGS="-J -R -l"
copy_syslinux_file "isolinux.bin" "${ISODIR}" if isohybrid --version >/dev/null 2>&1 ; then
copy_syslinux_file "ldlinux.c32" "${ISODIR}" 2>/dev/null || true ISOHYBRID=isohybrid
ISOARGS="${ISOARGS} -no-emul-boot -eltorito-boot isolinux.bin" else
ISOARGS="${ISOARGS} -boot-load-size 4 -boot-info-table" ISOHYBRID=
fi
if [ -n "${LKRN}" -o -n "${ISOHYBRID}" ] ; then
copy_syslinux_file "isolinux.bin" "${ISODIR}"
copy_syslinux_file "ldlinux.c32" "${ISODIR}" 2>/dev/null || true
ISOARGS="${ISOARGS} -no-emul-boot -eltorito-boot isolinux.bin"
ISOARGS="${ISOARGS} -boot-load-size 4 -boot-info-table"
if [ -n "${EFI}" ] ; then
ISOARGS="${ISOARGS} -eltorito-alt-boot"
fi
fi
if [ -n "${EFI}" ] ; then if [ -n "${EFI}" ] ; then
ISOARGS="${ISOARGS} -eltorito-alt-boot -no-emul-boot -e esp.img" ISOARGS="${ISOARGS} -no-emul-boot -e esp.img"
else else
FATIMG= FATIMG=
fi fi
@ -309,7 +319,7 @@ if [ -n "${ISOIMG}" ] ; then
-appid "iPXE - Open Source Network Boot Firmware" \ -appid "iPXE - Open Source Network Boot Firmware" \
-publisher "ipxe.org" -sysid "iPXE" -o "${ISOIMG}" \ -publisher "ipxe.org" -sysid "iPXE" -o "${ISOIMG}" \
${ISOARGS} "${ISODIR}" ${ISOARGS} "${ISODIR}"
if isohybrid --version >/dev/null 2>&1 ; then if [ -n "${ISOHYBRID}" ] ; then
ISOHYBRIDARGS= ISOHYBRIDARGS=
if [ -n "${EFI}" ] ; then if [ -n "${EFI}" ] ; then
ISOHYBRIDARGS="${ISOHYBRIDARGS} --uefi" ISOHYBRIDARGS="${ISOHYBRIDARGS} --uefi"
@ -317,7 +327,7 @@ if [ -n "${ISOIMG}" ] ; then
if [ -n "${SOURCE_DATE_EPOCH:-}" ] ; then if [ -n "${SOURCE_DATE_EPOCH:-}" ] ; then
ISOHYBRIDARGS="${ISOHYBRIDARGS} --id ${SOURCE_DATE_EPOCH}" ISOHYBRIDARGS="${ISOHYBRIDARGS} --id ${SOURCE_DATE_EPOCH}"
fi fi
isohybrid ${ISOHYBRIDARGS} "${ISOIMG}" "${ISOHYBRID}" ${ISOHYBRIDARGS} "${ISOIMG}"
fi fi
fi fi