https://github.com/p3lim/pixie
PXE server with embedded TFTP, HTTP and iPXE ROMs
https://github.com/p3lim/pixie
ipxe netboot pxe tftp-server
Last synced: about 1 year ago
JSON representation
PXE server with embedded TFTP, HTTP and iPXE ROMs
- Host: GitHub
- URL: https://github.com/p3lim/pixie
- Owner: p3lim
- License: gpl-3.0
- Created: 2021-10-08T22:46:31.000Z (over 4 years ago)
- Default Branch: master
- Last Pushed: 2025-04-12T06:14:06.000Z (about 1 year ago)
- Last Synced: 2025-04-12T07:23:53.171Z (about 1 year ago)
- Topics: ipxe, netboot, pxe, tftp-server
- Language: Go
- Homepage:
- Size: 130 KB
- Stars: 39
- Watchers: 4
- Forks: 5
- Open Issues: 2
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE.txt
Awesome Lists containing this project
README
# pixie
TFTP and HTTP server specifically designed to serve [iPXE](https://ipxe.org).
pixie comes embedded with the following ROMs provided by the iPXE project:
- `undionly.kpxe` - for legacy (BIOS) machines
- `snponly64.efi` - for 64-bit EFI machines
- `snponly32.efi` - for 32-bit EFI machines
- `ipxe64.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 machines
- `snponly-arm32.efi` - for 32-bit ARM machines
It comes with an embedded [iPXE script](https://ipxe.org/scripting), which is used to chainload into per-machine iPXE scripts or access an iPXE shell.

It has no dependencies, everything is in one binary.
## Usage
1. Run the `pixie` binary using default ports, specifying path to store iPXE scripts:
```
pixie -d /srv/ipxe
```
> See `--help` for more options
2. 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 < In both these examples `pixie` runs on `192.168.0.100`
### Walkthrough
When a machine with the MAC-address of `00:11:22:33:44:55` now attempts to PXE boot, the following will happen:
1. The machine queries DHCP (standard procedure from PXE)
2. 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`
3. The machine downloads and runs the iPXE ROM from pixie
4. The machine queries DHCP again (this time from iPXE)
5. The DHCP server will instruct the machine to download the `chain.ipxe` file from pixie using TFTP
6. The machine downloads and runs the `chain.ipxe` script
- the screenshot above shows this stage
7. Unless manually intervened, the machine chainloads into its iPXE script from pixie using HTTP
8. The machine boots the operating system