TFTP and HTTP server specifically designed to serve iPXE.
pixie comes embedded with the following ROMs provided by the iPXE project:
undionly.kpxe
- for legacy (BIOS) machinessnponly64.efi
- for 64-bit EFI machinessnponly32.efi
- for 32-bit EFI machinesipxe64.efi
- for 64-bit EFI machines (contains embedded networking stack)ipxe32.efi
- for 32-bit EFI machines (contains embedded networking stack)snponly-arm64.efi
- for 64-bit ARM machinessnponly-arm32.efi
- for 32-bit ARM machines
It comes with an embedded iPXE script, which is used to chainload into per-machine iPXE scripts or access an iPXE shell.
It has no dependencies, everything is in one binary.
- Run the
pixie
binary using default ports, specifying path to store iPXE scripts:
pixie -d /srv/ipxe
See
--help
for more options
- Define iPXE script for a machine with the MAC-address
00:11:22:33:44:55
:
cat >/srv/ipxe/00-11-22-33-44-55.ipxe <<EOF
#!ipxe
initrd http://dl.rockylinux.org/pub/rocky/8/BaseOS/x86_64/os/images/pxeboot/initrd.img
kernel http://dl.rockylinux.org/pub/rocky/8/BaseOS/x86_64/os/images/pxeboot/vmlinuz initrd=initrd.magic
boot
EOF
- Configure pixie as the next-server on the DHCP server:
Example for ISC dhcpd:
option client-architecture code 93 = unsiged integer 16;
if exists user-class and option user-class = "iPXE" {
filename "chain.ipxe";
} elsif option client-architecture = 00:00 {
filename "undionly.kpxe";
} else {
filename "snponly.efi";
}
next-server 192.168.0.100;
Example for dnsmasq:
dhcp-match=set:ipxe,175
dhcp-vendorclass=BIOS,PXEClient:Arch:00000
dhcp-boot=tag:!ipxe,tag:BIOS,undionly.kpxe,pixie,192.168.0.100
dhcp-boot=tag:!ipxe,tag:!BIOS,snponly.efi,pixie,192.168.0.100
dhcp-boot=tag:ipxe,chain.ipxe,pixie,192.168.0.100
In both these examples
pixie
runs on192.168.0.100
When a machine with the MAC-address of 00:11:22:33:44:55
now attempts to PXE boot, the following will happen:
- The machine queries DHCP (standard procedure from PXE)
- The DHCP server will instruct the machine to download a new ROM from pixie (
next-server
) using TFTP- if the machine is running BIOS it will ask for
undionly.kpxe
- if the machine is running EFI it will ask for
snponly.efi
- if the machine is running BIOS it will ask for
- The machine downloads and runs the iPXE ROM from pixie
- The machine queries DHCP again (this time from iPXE)
- The DHCP server will instruct the machine to download the
chain.ipxe
file from pixie using TFTP - The machine downloads and runs the
chain.ipxe
script- the screenshot above shows this stage
- Unless manually intervened, the machine chainloads into its iPXE script from pixie using HTTP
- The machine boots the operating system