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.img
and verifies it againsthttp://your-server/net_install/boot.sig
start4.elf
is launched (fromboot.img
)- UEFI (
RPI_EFI.fd
) is launched (fromboot.img
), defined inconfig.txt
:armstub=RPI_EFI.fd
- iPXE (embedded inside
RPI_EFI.fd
as EFI driver) is launched - iPXE looks up
autoexec.ipxe
from 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.img
withdocker-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.sig
fromboot.img
withrpi-eeprom-digest -i boot.img -o boot.sig -k your-private-key.pem
- Copy
boot.img
to your HTTP server (you may need to also sign it withrpi-eeprom-digest
) - Flash EEPROM with your public key,
BOOT_ORDER
,HTTP_HOST
etc. – but note thatHTTP_PATH
does 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: