# First we'll clone iPXE
$ git clone git://git.ipxe.org/ipxe.git
# Go into the src directory of the cloned git repo
$ cd ipxe/src
# Compile the UEFI iPXE executable
$ make bin-x86_64-efi/ipxe.efi
# First we'll wipe the USB drive (THIS WILL DESTROY ALL DATA)
$ sudo dd if=/dev/zero of=/dev/sdxY bs=512 count=1
# Then we'll partition the drive
$ sudo cfdisk /dev/sdxY
# cfdisk will ask you what type of partition table you want, select GPT
- Make a partition at least
512M
in size. - Switch the type from
Linux Filesystem
toEFI system
. - Write these changes to the USB drive and quit.
# First we'll format it FAT32
$ sudo mkfs.fat -F32 /dev/sdxY
# Now we'll make a directory to mount the USB drive in
$ mkdir /tmp/efidrive
# Now we can mount the USB drive
$ sudo mount /dev/sdxY /tmp/efidrive
# Assuming you're still in the ipxe/src directory
# Make the necessary efi/boot directory in the USB drive
$ sudo mkdir -p /tmp/efidrive/efi/boot
# copy the executable and rename it to bootx64.efi to conform to the UEFI standard
$ sudo cp bin-x86_64-efi/ipxe.efi /tmp/efidrive/efi/boot/bootx64.efi
# unmount the drive
$ sudo umount /tmp/efidrive
That's it! You should now have a UEFI-bootable USB drive with the UEFI ipxe binary!
Yes, I named the binary wrong, sorry. I was working on a 32bit application earlier that day and had that in my head. I updated my comment's code snippet to be
bootx64.efi
. And you're right, if it wasn't named correctly, you might have to rely on whether the UEFI system let you browse the filesystem to choose a file to boot from. But this trick has booted the iPXE uefi application automatically for me. I admit that I don't have the greatest exposure to various EFI systems, but since I picked up on this "trick", it's worked on every system I've tried it on.I don't have any relevant experience to help with sanboot. It's a little off topic here, but don't give up. I'm sure there's better resources out there for you to find.