#!/bin/sh ## live-build(7) - System Build Scripts ## 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 "${LIVE_IMAGE_TYPE}" in iso) IMAGE="${LIVE_IMAGE_NAME}-${LB_ARCHITECTURES}.iso" ;; iso-hybrid) IMAGE="${LIVE_IMAGE_NAME}-${LB_ARCHITECTURES}.hybrid.iso" ;; *) exit 0 ;; esac Echo_message "Begin building binary iso image..." # Requiring stage file Require_stagefile .build/config .build/bootstrap # Checking stage file Check_stagefile .build/binary_iso # Checking lock file Check_lockfile .lock # Creating lock file Create_lockfile .lock # 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_package # 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 [ "${LIVE_IMAGE_TYPE}" = "iso-hybrid" ] 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 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 XORRISO_OPTIONS="${XORRISO_OPTIONS} -V \"${LB_ISO_VOLUME}\"" fi # Set an explicit modification date XORRISO_OPTIONS="${XORRISO_OPTIONS} --modification-date=$(date --utc --date="@${SOURCE_DATE_EPOCH:-$(date +%s)}" +%Y%m%d%H%m%S00)" OLDIFS="$IFS" IFS="," BOOTLOADER_NUMBER=0 for BOOTLOADER in ${LB_BOOTLOADERS} do BOOTLOADER_NUMBER=$(expr ${BOOTLOADER_NUMBER} + 1) # Handle xorriso architecture specific options # If the bootloader number is greater or equal than 2 it means # we are not the first bootloader and thus we need to tell # mkisosfs to add an additional eltorito entry if [ ${BOOTLOADER_NUMBER} -ge 2 ] then XORRISO_OPTIONS="${XORRISO_OPTIONS} -eltorito-alt-boot " fi case "${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" 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 -J" XORRISO_EXCLUDE="boot/grub/grub_eltorito" ;; syslinux) case "${LB_MODE}" in progress-linux) XORRISO_OPTIONS="${XORRISO_OPTIONS} -b boot/boot.bin -c boot/boot.cat" XORRISO_EXCLUDE="boot/boot.bin" ;; *) XORRISO_OPTIONS="${XORRISO_OPTIONS} -b isolinux/isolinux.bin -c isolinux/boot.cat" XORRISO_EXCLUDE="isolinux/isolinux.bin" ;; esac XORRISO_OPTIONS="${XORRISO_OPTIONS} -no-emul-boot -boot-load-size 4 -boot-info-table" ;; 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_warning "Bootloader on your architecture not yet supported by live-build." Echo_warning "This will produce a most likely not bootable image (Continuing in 5 seconds)." sleep 5 ;; esac done IFS="$OLDIFS" #if [ "${LB_DEBIAN_INSTALLER}" != "live" ] #then # XORRISO_OPTIONS="${XORRISO_OPTIONS} -m ${XORRISO_EXCLUDE}" #fi if [ "${LB_FIRST_BOOTLOADER}" = "grub-pc" ] then cat > binary.sh << EOF #!/bin/sh input_dir=/usr/lib/grub/i386-pc # build core.img core_img=\$(mktemp) grub-mkimage -d \${input_dir} -o \${core_img} -O i386-pc biosdisk iso9660 # build grub_eltorito image cat \${input_dir}/cdboot.img \${core_img} > binary/boot/grub/grub_eltorito rm -f \${core_img} for file in \${input_dir}/*.mod \${input_dir}/efiemu??.o \ \${input_dir}/command.lst \${input_dir}/moddep.lst \${input_dir}/fs.lst \ \${input_dir}/handler.lst \${input_dir}/parttool.lst do if test -f "\$file" then cp -f "\$file" binary/boot/grub/i386-pc fi done EOF else echo "#!/bin/sh" > binary.sh fi cat >> binary.sh << EOF mkdir -p binary/.disk xorriso -as mkisofs ${XORRISO_OPTIONS} -o ${IMAGE} binary EOF # retain the xorriso command used to create the image in the image itself cat <<-EOF >binary/.disk/mkisofs xorriso -as mkisofs ${XORRISO_OPTIONS} -o ${IMAGE} binary EOF 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_package # Creating stage file Create_stagefile .build/binary_iso