#!/bin/sh ## live-build(7) - System Build Scripts ## Copyright (C) 2016-2020 The Debian Live team ## Copyright (C) 2006-2015 Daniel Baumann ## ## 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 # 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" ] && [ "${LB_BOOTLOADER_BIOS}" = "syslinux" ] then XORRISO_OPTIONS="${XORRISO_OPTIONS} -isohybrid-mbr /usr/lib/ISOLINUX/isohdpfx.bin -partition_offset 16" 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 # Saving cache Save_package_cache binary # Removing depends Remove_packages # Creating stage file Create_stagefile