piPXE is a build of the iPXE network boot firmware for the Raspberry Pi.
- Bring TFTP/PXE server up – set variables according to your network. You can use .env file for convenience.
git clone https://github.com/valtzu/pixpe
cd pixpe/example
INTERFACE=eth0 SUBNET=192.168.1.0 NETMASK=255.255.255.0 docker-compose up
- Power on your Raspberry Pi 4 with Ethernet cable attached to the same network as your $INTERFACE above
- Wait a couple of minutes, it should load images directly from the images.maas.io (~500MB or so)
- You can now SSH to the machine (get the IP from dnsmasq output for example), username
unsafe, passwordunsafe
git clone https://github.com/valtzu/pixpe
cd pixpe
docker-compose up
- EEPROM loads
http://your-server/net_install/boot.imgand verifies it againsthttp://your-server/net_install/boot.sig start4.elfis launched (fromboot.img)- UEFI (
RPI_EFI.fd) is launched (fromboot.img), defined inconfig.txt:armstub=RPI_EFI.fd - iPXE (embedded inside
RPI_EFI.fdas EFI driver) is launched - iPXE looks up
autoexec.ipxefrom SD card or from TFTP server (which may be resolved using DHCP)
Embedding iPXE script inside boot.img makes it possible to iPXE boot from internet, without SD card or TFTP server, eliminating step number 5 above.
- Build
boot.imgwithdocker-compose run --rm build make EMBED=/opt/build/autoexec.ipxe(or wherever your ipxe script is) - Create 2048-bit RSA key pair in PEM format (Google is your friend)
- Create
boot.sigfromboot.imgwithrpi-eeprom-digest -i boot.img -o boot.sig -k your-private-key.pem - Copy
boot.imgto your HTTP server (you may need to also sign it withrpi-eeprom-digest) - Flash EEPROM with your public key,
BOOT_ORDER,HTTP_HOSTetc. – but note thatHTTP_PATHdoes not work and is alwaysnet_install(2022-04-02). See official docs on HTTP boot.
All of the above is made easy with valtzu/pipxe-http.
Every component is under an open source licence. See the individual subproject licensing terms for more details: