live-build/scripts/build/binary_iso

227 lines
5.8 KiB
Bash
Executable File

#!/bin/sh
## live-build(7) - System Build Scripts
## Copyright (C) 2016-2020 The Debian Live team
## Copyright (C) 2006-2015 Daniel Baumann <mail@daniel-baumann.ch>
##
## 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.
set -e
# Including common functions
[ -e "${LIVE_BUILD}/scripts/build.sh" ] && . "${LIVE_BUILD}/scripts/build.sh" || . /usr/lib/live/build.sh
# Setting static variables
DESCRIPTION="Build iso binary image"
USAGE="${PROGRAM} [--force]"
# Processing arguments and configuration files
Init_config_data "${@}"
case "${LB_IMAGE_TYPE}" in
iso)
IMAGE="${LB_IMAGE_NAME}-${LB_ARCHITECTURE}.iso"
;;
iso-hybrid)
IMAGE="${LB_IMAGE_NAME}-${LB_ARCHITECTURE}.hybrid.iso"
;;
*)
exit 0
;;
esac
Echo_message "Begin building binary iso image..."
# Requiring stage file
Require_stagefiles config bootstrap
# Checking stage file
Check_stagefile
# Acquire lock file
Acquire_lockfile
# Checking depends
Check_package chroot /usr/bin/xorriso xorriso
Check_package chroot /usr/lib/ISOLINUX/isohdpfx.bin isolinux
if [ "${LB_BOOTLOADER_BIOS}" = "grub-pc" ]
then
Check_package chroot /usr/lib/grub/i386-pc/boot_hybrid.img grub-pc-bin
fi
# Restoring cache
Restore_package_cache binary
# Installing depends
Install_packages
# Remove old iso image
if [ -f ${IMAGE} ]
then
rm -f ${IMAGE}
fi
# Handle xorriso generic options
XORRISO_OPTIONS="-R -r -J -joliet-long -l -cache-inodes -iso-level 3"
# Handle xorriso live-build specific options
if [ "${LB_IMAGE_TYPE}" = "iso-hybrid" ] && [ -n "${LB_BOOTLOADER_BIOS}" ];
then
if [ "${LB_BOOTLOADER_BIOS}" = "syslinux" ]
then
XORRISO_OPTIONS="${XORRISO_OPTIONS} -isohybrid-mbr /usr/lib/ISOLINUX/isohdpfx.bin -partition_offset 16"
elif [ "${LB_BOOTLOADER_BIOS}" = "grub-pc" ]
then
XORRISO_OPTIONS="${XORRISO_OPTIONS} --grub2-boot-info --grub2-mbr /usr/lib/grub/i386-pc/boot_hybrid.img"
XORRISO_OPTIONS="${XORRISO_OPTIONS} -efi-boot-part --efi-boot-image"
else
Echo_error "iso-hybrid images not supported with ${LB_BOOTLOADER_BIOS} as BIOS bootloader"
exit 1
fi
fi
if [ "${_QUIET}" = "true" ]
then
XORRISO_OPTIONS="${XORRISO_OPTIONS} -quiet"
fi
if [ "${_VERBOSE}" = "true" ]
then
XORRISO_OPTIONS="${XORRISO_OPTIONS} -v"
fi
if [ -n "${LB_ISO_APPLICATION}" ] && [ "${LB_ISO_APPLICATION}" != "none" ]
then
XORRISO_OPTIONS="${XORRISO_OPTIONS} -A \"${LB_ISO_APPLICATION}\""
fi
if [ -n "${LB_ISO_PREPARER}" ] && [ "${LB_ISO_PREPARER}" != "none" ]
then
LB_ISO_PREPARER="$(echo "${LB_ISO_PREPARER}" | sed "s|@LB_VERSION@|${VERSION}|")"
XORRISO_OPTIONS="${XORRISO_OPTIONS} -p \"${LB_ISO_PREPARER}\""
fi
if [ -n "${LB_ISO_PUBLISHER}" ] && [ "${LB_ISO_PUBLISHER}" != "none" ]
then
XORRISO_OPTIONS="${XORRISO_OPTIONS} -publisher \"${LB_ISO_PUBLISHER}\""
fi
if [ -n "${LB_ISO_VOLUME}" ] && [ "${LB_ISO_VOLUME}" != "none" ]
then
LB_ISO_VOLUME="$(echo "${LB_ISO_VOLUME}" | sed "s|@ISOVOLUME_TS@|$(date $DATE_UTC_OPTION -d@${SOURCE_DATE_EPOCH} +%Y%m%d-%H:%M)|")"
XORRISO_OPTIONS="${XORRISO_OPTIONS} -V \"${LB_ISO_VOLUME}\""
fi
# Set an explicit modification date
XORRISO_OPTIONS="${XORRISO_OPTIONS} --modification-date=$(date --utc -d@${SOURCE_DATE_EPOCH} +%Y%m%d%H%M%S00)"
# Enable BIOS bootloader selection
case "${LB_BOOTLOADER_BIOS}" in
grub-legacy)
XORRISO_OPTIONS="${XORRISO_OPTIONS} -no-emul-boot -boot-load-size 4 -boot-info-table"
XORRISO_OPTIONS="${XORRISO_OPTIONS} -b boot/grub/stage2_eltorito"
XORRISO_EXCLUDE="boot/grub/stage2_eltorito"
;;
grub-pc)
XORRISO_OPTIONS="${XORRISO_OPTIONS} -no-emul-boot -boot-load-size 4 -boot-info-table"
XORRISO_OPTIONS="${XORRISO_OPTIONS} -b boot/grub/grub_eltorito"
XORRISO_EXCLUDE="boot/grub/grub_eltorito"
;;
syslinux)
XORRISO_OPTIONS="${XORRISO_OPTIONS} -b isolinux/isolinux.bin -c isolinux/boot.cat"
XORRISO_OPTIONS="${XORRISO_OPTIONS} -no-emul-boot -boot-load-size 4 -boot-info-table"
XORRISO_EXCLUDE="isolinux/isolinux.bin"
;;
"")
;;
*)
Echo_error "Unhandled BIOS bootloader selection"
exit 1
;;
esac
# If both BIOS and EFI bootloaders are in play, we need to tell mkisosfs to add
# an additional eltorito entry.
if [ -n "${LB_BOOTLOADER_BIOS}" ] && [ -n "${LB_BOOTLOADER_EFI}" ]; then
XORRISO_OPTIONS="${XORRISO_OPTIONS} -eltorito-alt-boot"
fi
# Enable EFI bootloader selection
case "${LB_BOOTLOADER_EFI}" in
grub-efi)
if [ -e binary/boot/grub/efi.img ]; then
XORRISO_OPTIONS="${XORRISO_OPTIONS} -e boot/grub/efi.img -no-emul-boot"
XORRISO_OPTIONS="${XORRISO_OPTIONS} -isohybrid-gpt-basdat -isohybrid-apm-hfsplus"
else
Echo_message "No EFI boot code to include in the ISO"
fi
;;
"")
;;
*)
Echo_error "Unhandled EFI bootloader selection"
exit 1
;;
esac
#if [ "${LB_DEBIAN_INSTALLER}" != "live" ]
#then
# XORRISO_OPTIONS="${XORRISO_OPTIONS} -m ${XORRISO_EXCLUDE}"
#fi
cat > binary.sh << EOF
#!/bin/sh
xorriso -as mkisofs ${XORRISO_OPTIONS} -o ${IMAGE} binary
EOF
# retain the xorriso command used to create the image in the image itself
mkdir -p binary/.disk
cat <<-EOF >binary/.disk/mkisofs
xorriso -as mkisofs ${XORRISO_OPTIONS} -o ${IMAGE} binary
EOF
# Set the timestamp
find binary/.disk -newermt "$(date -d@${SOURCE_DATE_EPOCH} '+%Y-%m-%d %H:%M:%S')" -printf "%y %p\n" -exec touch '{}' -d@${SOURCE_DATE_EPOCH} ';' >> binary.modified_timestamps
case "${LB_BUILD_WITH_CHROOT}" in
true)
# Moving image
mv binary.sh chroot
mv binary chroot
Chroot chroot "sh binary.sh"
# Move image
mv chroot/binary chroot/${IMAGE} ./
rm -f chroot/binary.sh
;;
false)
sh binary.sh
rm -f binary.sh
;;
esac
# Set the timestamp of the image
touch -d@${SOURCE_DATE_EPOCH} ${IMAGE}
echo "f ${IMAGE}" >> binary.modified_timestamps
# Saving cache
Save_package_cache binary
# Removing depends
Remove_packages
# Creating stage file
Create_stagefile