#!/bin/sh
#
# Generate an EFI bootable disk image

set -e

function help() {
	echo "Usage: ${0} [OPTIONS] <ipxe.efi>"
	echo
	echo "where OPTIONS are:"
	echo " -h       Show this help"
	echo " -b       Specify boot file name (e.g. bootx64.efi)"
	echo " -o FILE  Save disk image to file"
}

BOOT=bootx64.efi

while getopts "hb:o:" opt; do
	case ${opt} in
		h)
			help
			exit 0
			;;
		b)
			BOOT="${OPTARG}"
			;;
		o)
			OUT="${OPTARG}"
			;;
	esac
done

shift $((OPTIND - 1))
IN=$1

if [ -z "${IN}" ]; then
	echo "${0}: no input file given" >&2
	help
	exit 1
fi

if [ -z "${OUT}" ]; then
	echo "${0}: no output file given" >&2
	help
	exit 1
fi

# Create sparse output file
rm -f ${OUT}
truncate -s 1440K ${OUT}

# Format disk
mformat -i ${OUT} -f 1440 ::

# Create directory structure
mmd -i ${OUT} ::efi
mmd -i ${OUT} ::efi/boot

# Copy bootable image
mcopy -i ${OUT} ${IN} ::efi/boot/${BOOT}
