| #!/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} |