---
name: "pxeboot"
section: "8"
platform: "freebsd"
package: "base"
version: "16.0-CURRENT-20261027-61c70dc16a79"
release: "FreeBSD 16.0-CURRENT (2026-10-27)"
platforms: ["freebsd", "openbsd"]
url: "https://new.carta.tech/pxeboot"
---

# pxeboot(8)

Preboot Execution Environment (PXE) bootloader

## NAME

**pxeboot** – Preboot Execution Environment (PXE) bootloader

## DESCRIPTION

The **pxeboot** bootloader is a modified version of the system third-stage bootstrap [loader(8)](/loader/8.md) configured to run under Intel's Preboot Execution Environment (PXE) system. PXE is a form of smart boot ROM, built into Intel EtherExpress Pro/100 and 3Com 3c905c Ethernet cards, and Ethernet-equipped Intel motherboards. PXE supports DHCP configuration and provides low-level NIC access services.

The DHCP client will set a DHCP user class named *FreeBSD* to allow flexible configuration of the DHCP server.

The **pxeboot** bootloader retrieves the kernel, modules, and other files either via NFS over UDP or by TFTP, selectable through compile-time options. In combination with a memory file system image or NFS-mounted root file system, **pxeboot** allows for easy, EEPROM-burner free construction of diskless machines.

The **pxeboot** binary is loaded just like any other boot file, by specifying it in the DHCP server's configuration file. Below is a sample configuration for the ISC DHCP v3 server:

```
option domain-name "example.com";
option routers 10.0.0.1;
option subnet-mask 255.255.255.0;
option broadcast-address 10.0.0.255;
option domain-name-servers 10.0.0.1;
server-name "DHCPserver";
server-identifier 10.0.0.1;
next-server 10.0.0.1;
default-lease-time 120;
max-lease-time 120;
subnet 10.0.0.0 netmask 255.255.255.0 {
       filename "pxeboot";
       range 10.0.0.10 10.0.0.254;
       if exists user-class and option user-class = "FreeBSD" {
            option root-path "tftp://10.0.0.1/FreeBSD";
       }
}
```

*next-server* is the IP address of the next server in the bootstrap process, i.e. your TFTP server or NFS server. **pxeboot** recognizes *option* *root-path* directives as the server and path to NFS mount for file requests, respectively, or the server to make TFTP requests to. Note that **pxeboot** expects to fetch */boot/loader.rc* from the specified server before loading any other files.

Valid *option* *root-path* syntax is the following

- /path

  path to the root filesystem on the NFS server

- ip://path

  path to the root filesystem on the NFS server *ip*

- nfs://path

  path to the root filesystem on the NFS server

- nfs://ip/path

  path to the root filesystem on the NFS server *ip*

- tftp://path

  path to the root filesystem on the TFTP server

- tftp://ip/path

  path to the root filesystem on the TFTP server *ip*

**pxeboot** defaults to a conservative 1024 byte NFS data packet size. This may be changed by setting the *nfs.read\_size* variable in */boot/loader.conf*. Valid values range from 1024 to 16384 bytes.

In all other respects, **pxeboot** acts just like [loader(8)](/loader/8.md).

**pxeboot** requires NFS over UDP. Many recent distributions of Linux only serve NFS over TCP. Enable UDP in some distributions by uncommenting ‘udp=y’ in */etc/nfs.conf*.

For further information on Intel's PXE specifications and Wired for Management (WfM) systems, see http://www.pix.net/software/pxeboot/archive/pxespec.pdf.

## SEE ALSO

[loader(8)](/loader/8.md)

## HISTORY

The **pxeboot** bootloader first appeared in FreeBSD 4.1.

## AUTHORS

The **pxeboot** bootloader was written by John Baldwin ⟨*jhb@FreeBSD.org*⟩ and Paul Saab ⟨*ps@FreeBSD.org*⟩. This manual page was written by Doug White ⟨*dwhite@FreeBSD.org*⟩.
