227 lines
5.8 KiB
Bash
Executable File
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
|