LinuxCommandLibrary

pixiecore

Network boot operating systems

TLDR

Start a PXE boot server which provides a netboot.xyz boot image

$ pixiecore [quick] xyz --dhcp-no-bind
copy

Start a new PXE boot server which provides an Ubuntu boot image
$ pixiecore [quick] ubuntu --dhcp-no-bind
copy

List all available boot images for quick mode
$ pixiecore quick --help
copy

SYNOPSIS

pixiecore [OPTIONS]

PARAMETERS

-dhcp-addr address
    Specifies the network address and port for the DHCP server to listen on. Typically :67 for all interfaces, or a specific IP like 192.168.1.1:67.

-http-addr address
    Sets the network address and port for the integrated HTTP server. Common values are :80 or :8080.

-firmware path
    Designates a directory containing essential firmware files (e.g., pxelinux.0, ipxe.efi) that pixiecore will serve to clients based on their architecture and boot type.

-kernel path
    The absolute or relative path to the Linux kernel image (e.g., vmlinuz) that clients will download and boot.

-initrd path
    The absolute or relative path to the initial ramdisk image (e.g., initrd.img) required by the specified kernel.

-cmdline string
    Appends additional arguments to the kernel command line during the boot process (e.g., console=ttyS0, ip=dhcp, root=/dev/sda1).

-ipxe-script path
    Provides a path to a custom iPXE script to be served instead of the default boot sequence, offering advanced boot customization.

-extra-file path
    Adds an additional file to be served over HTTP. This option can be specified multiple times to serve various supporting files.

-debug
    Enables verbose debugging output, which is useful for diagnosing issues during setup and operation.

DESCRIPTION

pixiecore is a streamlined network boot server designed to simplify bare-metal provisioning. Unlike traditional PXE setups that often require multiple services like DHCP, TFTP, and HTTP to be configured separately, pixiecore integrates these functionalities into a single, cohesive application. Written in Go, it aims for ease of deployment and management. It supports a wide range of boot firmware, including traditional BIOS PXE, UEFI, and iPXE, making it highly versatile for modern data centers and home labs.

It can serve various boot artifacts such as Linux kernels, initial ramdisks (initrds), and custom iPXE scripts, facilitating automated operating system installations or ephemeral boot environments. By providing a unified solution, pixiecore reduces the complexity and potential for misconfiguration often associated with network booting, making it an excellent tool for continuous integration/deployment pipelines for hardware.

CAVEATS

Running pixiecore requires sufficient privileges (typically root or capabilities to bind privileged ports) to operate its DHCP and TFTP services (ports 67 and 69, respectively). If configured to serve HTTP on port 80, it also requires privileges for that port.

As it includes a DHCP server, pixiecore should be the only DHCP server active on its broadcast domain, or carefully configured to avoid conflicts, as multiple DHCP servers can lead to network instability. Appropriate firewall rules must be in place to allow inbound UDP traffic on ports 67 (DHCP) and 69 (TFTP), and TCP/UDP traffic on port 80 (HTTP) if used.

ARCHITECTURE AND OPERATION

pixiecore functions as an all-in-one network boot solution. When a client initiates a PXE boot, pixiecore's integrated DHCP server responds with the necessary boot information. It then serves the initial bootloader (e.g., pxelinux.0, ipxe.efi) via TFTP, and subsequent, larger files like kernels and initrds via HTTP for improved performance. This streamlined architecture avoids the complexities of configuring and troubleshooting separate DHCP, TFTP, and HTTP daemons, providing a more robust and manageable PXE environment. It intelligently handles different client architectures (BIOS/UEFI) and boot types to ensure compatibility.

COMMON USAGE PATTERNS

pixiecore is frequently employed in automated server provisioning workflows, allowing organizations to rapidly deploy and configure bare-metal hardware. It's ideal for scenarios involving continuous integration/deployment (CI/CD) pipelines for physical servers, where machines need to be booted into an installer, a testing environment, or a minimal OS for initial setup. Its ability to serve custom iPXE scripts enables dynamic and highly flexible boot configurations, supporting diverse hardware and software requirements within a single PXE server instance.

HISTORY

pixiecore was developed by Dan Anderson with the primary goal of simplifying the notoriously complex PXE booting process. It emerged from a need for a modern, single-binary solution that could integrate multiple network services (DHCP, TFTP, HTTP) typically required for network booting. Written in Go, it leverages the language's strengths in concurrency and cross-platform compilation, making it well-suited for automated bare-metal provisioning in cloud-native and datacenter environments. Its development focused on providing an opinionated, easy-to-use tool for efficient infrastructure management, contrasting with the often fragmented and cumbersome traditional PXE setups.

SEE ALSO

dnsmasq(8): A lightweight DHCP, DNS, and TFTP server often used for network booting., tftpd-hpa(8): A common standalone TFTP server for serving boot files., dhcpd(8): The ISC DHCP server, a robust and full-featured DHCP solution., ipxe: An open-source network boot firmware that expands on traditional PXE capabilities., pxelinux: A component of the SYSLINUX project, widely used for PXE booting Linux systems.

Copied to clipboard