-# pad the output ISO to multiples of 256 KiB for partition table support
- siz=$($getfilesize "$ISOFILE")
- cyls=$(echo "$siz / 512 / 32 / 16 + 1" | bc) # C=$cyls H=16 S=32
- ofs=$(echo "$cyls * 16 * 32 * 512 - 1" | bc) # padding offset (size - 1)
- dd if=/dev/zero bs=1 count=1 seek=$ofs of="$ISOFILE" 2>/dev/null
-
-# create a manifold-boot image with a partition table, if possible
- if mksh -c true 2>/dev/null && \
- test -e /usr/share/grml-live/scripts/bootgrub.mksh; then
- echo "Creating a manifold-boot ISO image"
- echo 1 63 | \
- mksh /usr/share/grml-live/scripts/bootgrub.mksh -A -M 1 -p 0x83 -g $cyls:16:32 | \
- cat - boot/grub/core.img | \
- dd conv=notrunc of="$ISOFILE" conv=notrunc 2>/dev/null
- else
- echo "Cannot find mksh or bootgrub.mksh, not generating manifold-boot ISO image"
+ case "$MKISOFS" in
+ xorriso*)
+ echo "Using xorriso for ISO generation."
+ if ! dpkg --compare-versions $(dpkg-query -W -f='${Version}\n' xorriso 2>/dev/null) gt-nl 1.1.6-1 ; then
+ echo "Disabling (U)EFI boot support since xorriso version is not recent enough."
+ else
+ echo "xorriso with -eltorito-alt-boot support present"
+ UEFI_ENABLE=true
+
+ if ! [ -r "${WRKDIR}/cddir/boot/efi.img" ] ; then
+ echo "Warning: File /boot/efi.img not found, not extending boot arguments for (U)EFI boot."
+ UEFI_ENABLE=false
+ else
+ echo "/boot/efi.img found, extending boot arguments for (U)EFI boot."
+ if ! [ -r /usr/lib/ISOLINUX/isohdpfx.bin ] ; then
+ echo "Error: /usr/lib/ISOLINUX/isohdpfx.bin not available, required for xorriso/isohybrid though." >&2
+ echo "Hint: make sure isolinux is installed." >&2
+ exit 1
+ else
+ BOOT_ARGS+=" -boot-info-table -eltorito-alt-boot -e boot/efi.img -no-emul-boot"
+ BOOT_ARGS+=" -isohybrid-mbr /usr/lib/ISOLINUX/isohdpfx.bin -eltorito-alt-boot -e boot/efi.img -no-emul-boot -isohybrid-gpt-basdat -no-pad"
+ fi
+ fi
+ fi
+ ;;
+ *)
+ echo "Using $MKISOFS for ISO generation (lacking UEFI option), disabling (U)EFI boot support."
+ ;;
+ esac
+# }}}
+
+# adjust ISO for small output if necessary {{{
+ if [ -n "$URI" ] ; then
+ bootloader_files=$(find . -name "*.cfg" -type f)
+ bootloader_files+=" "
+ bootloader_files+=$(find . -name "*.lst" -type f)
+ output_dir=$(dirname "$ISOFILE")
+ for squashfs in $(find . -name *.squashfs) ; do
+ media_path="$(dirname "$squashfs")"
+ filename="$(basename "$squashfs")"
+ target="$output_dir/$filename"
+ if [ -f "$target" ] && [ ! -n "$FORCE" ] ; then
+ echo >&2 "Warning: $target already exists, and -force not specified, not overwriting"
+ else
+ mv $squashfs $target
+ OUTPUT_FILES+=("$target")
+ fi
+ sed -i -e "s#^\(^.*$media_path.*\)\($URI\)\(.*$\)#\1$URI/$filename\3#g" $bootloader_files
+
+ done
+ fi
+# }}}
+
+# copy specified directory to cd {{{
+ if [ -n "$DIR" ] ; then
+ echo >&2 "Copying ${DIR} to generated ISO"
+ for param in GRML_NAME VERSION RELEASENAME DATE SHORT_NAME \
+ VERSION BOOTID RELEASE_INFO ; do
+ EXCLUDE_PARAM="$EXCLUDE_PARAM --exclude **%${param}%**"
+ done
+ rsync -a ${DIR}/ $EXCLUDE_PARAM .