Public | Automated Build

Last pushed: 7 months ago
Short Description
iPXE server bootstrapped with preseeded Ubuntu/memtest/...
Full Description


Repository to bootstrap a PXE server easily. Get in a few steps a working setup to boot over network.

It's flexible and programmed modularly. It's easy to use it with existing setups.


  • dhcp proxy support
    • You can install this in addition to your existing DHCP Server without conflict.
  • iPXE for native clients
  • iPXE via chainloading for older clients
    • This supports downloading the kernel images via HTTP (way faster than TFTP)
  • Fully customizable
  • installable via docker

Software used

  • dnsmasq (tftp, dhcp proxy)
  • nfs-kernel-server (NFS Server)
  • nginx
  • iPXE and syslinux packages


For easy installation, execute

# install dnsmasq or something else

as root. This might seem spooky, but it only does:

  • install the system images into the current git-repo
  • adding /etc/dnsmasq.d/pixieboot
  • adding /etc/exports.d/pixieboot
  • restart of dnsmasq and nfs-kernel-server


PARAMETER can be of:

system-install   Install and configure
config-write     Write (or update) PXE configuration file
integrate        Configure system-services to use pixieboot for PXE-boot

If PARAMETER is omitted, will do everything (integration, install the systems, write config)

Folder structure

<dt>integrations</dt><dd>scripts to integrate services to use pixieboot</dd>
<dt>recipes</dt><dd>the actual scripts, installing the systems</dd>
<dt>systems</dt><dd>filesystem-roots of all bootable systems</dd>

Modular system

The system is kept fully modular. You can easily add new bootable
systems or use another TFTP/DHCP server combination.

Adding another system

For adding a new system, you have to create a new so-called recipe.
The recipe is a script, containing information for downloading,
installing and configuring a new system-chroot.

This recipe should be stored inside the recipes folder and respond
to the parameters install or config.

Executed with the config-parameter it should print on STDOUT
its configuration to put into PXELINUX config.

Executed with the install-parameter it should install its system
into folder of given environment-variable $BASE_SYSTEMS/$DISTRO_NAME.
Your recipe should not execute anything if the system seems to be
installed already. If it's not installed properly, a manual remove by
the user should be neccessary.

I could write 1000s of words here. But it might now be the best for you,
to look at the recipes-folder and look, what these scripts do there.
Most of the work, for adding new recipes, is just copy and paste.

Using different TFTP or DHCP Servers

  1. Create a new integration file:
    1. Add an executable file to integrations/
    2. The file should integrate pixieboot into the software configuration.
    3. Subsequent calls of this file should not emit bad configuration files.
    4. Available environment-variables are listed in
  2. Change in the value of INTEGRATIONS_ENABLED to include your
    new integration.
  3. Execute ./ integrate.


You have to use the docker host-network, as DHCP is not usable via port-forwarding.

Also define the env-variable NFSHOST to match your local IP-Address. Additionally,
you must not run a service on port 80, 67 or 53 on your host system.

docker run \
  -h pixieboot \
  --name pixieboot \
  --net=host \
  --detach \
Docker Pull Command
Source Repository