61 lines
895 B
Bash
Executable File
61 lines
895 B
Bash
Executable File
#!/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}
|