> ## Documentation Index
> Fetch the complete documentation index at: https://rackdog.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# iPXE

> Customize server provisioning with iPXE chainloading.

Rackdog supports iPXE chainloading so you can control how a server boots. Instead of using a stock OS install, point Rackdog at your own iPXE script and take over the boot and provisioning process.

To use it, select the **Custom iPXE** OS option when [ordering a server](/quickstart) and provide your iPXE URL.

## How it works

When you provide an iPXE URL, Rackdog wraps it in a chainloading script that runs at boot:

```ipxe theme={null}
#!ipxe
dhcp || echo "dhcp failed (continuing)"

echo Booting user chain: <your-url>
chain --autofree <your-url> || goto chain_failed

:chain_failed
echo Chain failed. Dropping to shell...
shell
```

Your URL is substituted into this template at provision time.

## What you provide

Supply a publicly reachable URL that returns a valid iPXE script, for example:

```
https://example.com/boot.ipxe
```

Some flows also accept an inline script body in place of a URL.

## Example script

A minimal script that boots a Linux kernel:

```ipxe theme={null}
#!ipxe
kernel https://boot.example.com/vmlinuz initrd=initrd.img
initrd https://boot.example.com/initrd.img
boot
```

## When to use it

Reach for iPXE when you need a custom OS image, a preconfigured environment, integration with your own provisioning system, ephemeral or stateless workloads, or just direct control over the boot process. For standard images and faster setup, stick with normal provisioning.

## Requirements

* The iPXE URL must be reachable from the Rackdog network.
* The script must be valid iPXE syntax.
* Every asset referenced by the script (kernel, initrd, and so on) must be reachable from the server at boot.

## What happens on failure

If chainloading fails, the server prints the error and drops into the iPXE shell. From there you can debug interactively:

```ipxe theme={null}
ifstat                              # check network state
dhcp                                # retry DHCP
chain https://example.com/boot.ipxe # try a chain by hand
```

## Good habits

* Host your scripts on infrastructure you trust to be available when servers boot.
* Keep scripts short and deterministic so boots are predictable.
* Version or log your boot scripts so you can trace what a server ran.
* Validate a script locally before pointing production servers at it.
