iPXE Station is a self-hosted PXE/iPXE boot server with a modern web interface. It handles the full workflow: downloading distro assets, building hierarchical boot menus, and configuring DHCP — all without touching config files manually.
- Scenario-based wizard — pick a distro/scenario, choose a downloaded version, and kernel/initrd/cmdline are auto-filled
- Boot Recipe Engine — automatically generates correct kernel parameters per distro and boot mode (NFS, HTTP ISO, netboot)
- Hierarchical menus — create submenus to organise entries
- Tree editor — inline move, delete, disable controls on hover
- Live preview — see the generated iPXE script in real time
- Ubuntu Server & Desktop LTS — dynamic version picker, downloads directly from releases.ubuntu.com
- SystemRescue, Kaspersky Rescue Disk, Debian — version pickers with direct ISO/netboot downloads
- Automatic ISO extraction — ISOs are extracted in-place for network boot
- Real-time progress bars — per-file progress (kernel, initrd, ISO) with GB counter
- Upload & catalog scan — upload any file, scan local assets
- Proxy DHCP server — built-in dnsmasq in proxy mode (BIOS + EFI), starts automatically on container restart
- Config generator — ready-to-paste configs for dnsmasq, ISC DHCP, MikroTik RouterOS, Windows Server
- Network validator — sends real DHCP probes (BIOS, UEFI, iPXE) and diagnoses the result with fix suggestions
- autoexec.ipxe editor — edit or apply templates directly from the UI
- Preseed profiles — create, activate, and serve Debian unattended install templates from the UI
- NFS boot — Ubuntu Server NFS cmdline with auto-detected export path
- Live boot event log
- Syslog stream
- Service status (TFTP, HTTP, dnsmasq)
- Docker and Docker Compose
- Disk space: 5–10 GB typical (20+ GB with Desktop ISOs)
- Ports: 9021 (HTTP/UI), 69 (TFTP), 67 (DHCP — only if using Proxy DHCP)
- Capability:
NET_ADMINfor DHCP validation and Proxy DHCP (already indocker-compose.yml)
- iPXE Station is currently designed for trusted LAN usage.
- Full authentication/authorization is not required for local development at this stage.
- Optional hardening (token mode, SSRF guard, upload/download limits) is planned as modular features and can be enabled later without changing the default dev workflow.
git clone https://github.com/loglux/ipxe-station.git
cd ipxe-station
docker-compose up -d --build- Assets tab → Quick Download
- Select Ubuntu Server/Desktop or SystemRescue version
- Click Download ISO — extraction happens automatically
- ISO contents appear in the catalog when done
- Builder tab → click + Add Entry
- Pick category → scenario (e.g. Ubuntu Live)
- Select downloaded version → boot mode auto-selected (NFS / HTTP ISO)
- Click Create — kernel, initrd and cmdline are filled automatically
- 💾 Save Menu
- DHCP tab → select your server type
- Copy the generated config to your DHCP server
- Or use Proxy DHCP — enable it directly in the UI (no router changes needed)
| Service | URL |
|---|---|
| Web UI | http://localhost:9021/ui |
| API docs | http://localhost:9021/docs |
| iPXE boot script | http://localhost:9021/ipxe/boot.ipxe |
| TFTP | tftp://localhost:69 |
| Scenario | Description |
|---|---|
| Ubuntu Server Live | Server ISO boot — NFS (recommended) or HTTP ISO |
| Ubuntu Desktop Live | Desktop ISO boot — NFS or HTTP ISO (≥ 8 GB RAM) |
| Ubuntu Preseed | Automated server install |
| Debian Netboot | Interactive network installer |
| Debian Preseed | Automated Debian Installer via preseed.cfg |
| Debian Live (Experimental) | Prototype live-boot path via ISO or squashfs fetch |
| Scenario | Description |
|---|---|
| SystemRescue | Recovery environment, HTTP boot |
| Kaspersky Rescue Disk | KRD 18 (netboot) and KRD 24 (ISO fetch) |
| Memtest86+ | Memory testing |
| Scenario | Description |
|---|---|
| Windows PE | WIMBoot preinstallation environment |
- Submenu — group related entries
- Separator — visual divider
- Reboot, iPXE Shell, Exit to BIOS, Chain to another bootloader, Custom entry
./data/srv/
├── tftp/ # TFTP boot files (port 69)
│ ├── undionly.kpxe # BIOS iPXE loader
│ ├── ipxe.efi # UEFI iPXE loader
│ └── autoexec.ipxe # Bootstrap — chains to HTTP menu
├── http/ # HTTP assets (/http/)
│ ├── ubuntu-22.04/ # Ubuntu 22.04 Server (extracted ISO)
│ ├── ubuntu-24.04-desktop/ # Ubuntu 24.04 Desktop (extracted ISO)
│ ├── rescue-12.03/ # SystemRescue
│ └── debian-12/ # Debian netboot files
├── ipxe/ # iPXE scripts (/ipxe/, no-cache)
│ └── boot.ipxe # Generated boot menu
└── dhcp/ # Generated DHCP configs
environment:
- PXE_SERVER_IP=192.168.1.100 # Your server's IP address
- HTTP_PORT=9021
- TFTP_PORT=69For NFS boot mode, configure the NFS export on your host:
sudo bash scripts/setup-nfs.shThen set the export path in Settings → NFS Boot Root.
For automated Debian installs, manage one or more preseed profiles in the Boot Files tab. The active profile is exposed at:
http://SERVER:9021/preseed.cfg
Named profiles are also available at:
http://SERVER:9021/preseed/PROFILE.cfg
Debian publishes official Live install images separately from installer media, and they are explicitly positioned as "live install" images with Calamares on 64-bit PC systems. iPXE Station now exposes Debian Live as an experimental scenario so the path can be prototyped, but it is still not treated as a validated production mode.
The current prototype follows Debian live-boot documentation:
boot=liveis requiredfetch=can use an HTTP URL tofilesystem.squashfsfetch=may also use a Live ISO in place of the squashfs image- IP-based URLs are preferred inside early boot environments
Manual validation checklist:
- Boot a BIOS client with Debian Live ISO fetch and confirm the menu reaches
live-boot. - Boot a UEFI client with the same ISO path and compare behavior.
- Repeat with squashfs fetch against
live/filesystem.squashfs. - Record RAM usage, download time, and whether network comes up automatically.
- Capture final working and failing cmdlines before promoting the mode beyond experimental.
Research basis:
- Debian download/install split: Download Debian
- Debian Live images: Live install images
- Debian preseed boot parameters: Installer appendix B.2
- Debian live-boot parameters: live-boot(7)
- iPXE preseed appnote: Debian preseed
Working principles for delivery and future extensibility are documented in
ROADMAP.md under Execution Principles.
┌──────────────────────────────────────────────┐
│ React Frontend (Vite + React 18) │
│ Menu Builder · Asset Manager · DHCP Helper │
│ Boot Files · Monitoring · Settings │
└──────────────────┬───────────────────────────┘
│ REST API
┌──────────────────┴───────────────────────────┐
│ FastAPI Backend │
│ iPXE generator · Boot Recipe Engine │
│ Asset downloader/extractor · DHCP helper │
│ Proxy DHCP (dnsmasq) · File serving │
└──────────────────┬───────────────────────────┘
│
┌──────────────────┴───────────────────────────┐
│ Storage (Docker volumes) │
│ /srv/tftp /srv/http /srv/ipxe /srv/dhcp │
└──────────────────────────────────────────────┘
python -m venv .venv
./.venv/bin/pip install -r requirements-dev.txt
./.venv/bin/pre-commit install
make format # black + isort
make backend-lint # ruff
make backend-test # pytest (95 tests)
make quality # all of the abovePXE boot not working
- Check TFTP files:
ls data/srv/tftp/ - Verify autoexec.ipxe chains to
/ipxe/boot.ipxe(not/tftp/boot.ipxe) - Test:
curl http://SERVER:9021/ipxe/boot.ipxe - Check firewall: ports 69/UDP and 9021/TCP must be open
DHCP validation fails
- Container needs
NET_ADMINcapability (already set indocker-compose.yml) - Validation is optional — config generation works without it
autoexec.ipxe gets corrupted
- Never write it via bash heredoc (
!gets escaped by bash history expansion) - Use the Boot Files tab in the UI, or
docker cpa pre-written file
Ubuntu boots to console instead of desktop
- Server ISO → always CLI (correct)
- For Desktop GUI: download Ubuntu Desktop ISO via Assets tab (separate from Server)
MIT — see LICENSE