← gobootd
BOOTD(8) System Manager's Manual BOOTD(8)

bootd — boot server for old and unusual machines

bootd [run] [-c config]

bootd check [-c config] [-q]

bootd explain [-c config] client [service [file]]

bootd version

bootd network-boots old and unusual machines over many boot protocols, all set up from one configuration file, bootd.hcl(5). Each client is described once, with its addresses, the protocols it may use and the files it may load, and every protocol answers from that one description. Every request that is refused is logged with the reason.

The protocols are:

Reverse ARP, for Sun, DEC, HP and other clients that learn their IP address from their Ethernet address.
HP Remote Maintenance Protocol, for the boot ROMs of the HP 9000/300 and /400.
Sun Network Disk, for the Sun-2 boot PROM. Read only.
TFTP, read only, with the blksize, tsize and timeout options.
Sun bootparam, with a built-in portmapper that answers broadcast CALLIT requests.
NFS version 2 and MOUNT version 1 over UDP, read only.
NIS (YP), read only, without map transfers.

bootd works on Ethernet frames and runs its own IP stack, with its own Ethernet and IP address on each network. It answers ARP itself and knows the Ethernet address of every configured host, so it reaches clients that do not answer ARP before their operating system runs. It needs no privileges and does not use the host's addresses or ports.

A network carries frames over UDP, one Ethernet frame per datagram (the format of the HECnet bridge, which simh and QEMU speak), optionally wrapped in static L2TPv3. bootbridge(8) connects a real network interface to it; emulators can send to bootd directly. A network can also capture on an interface with libpcap, which needs privileges.

The commands are:

Run the boot server. This is the default when no command is given. It runs in the foreground and logs to standard error unless the configuration says otherwise.
Validate the configuration, reporting errors and warnings with file and line, then list every host with its addresses (and where they came from), services and files.
client [service [file]]
Show how a request from client, a host name, Ethernet address or IP address, would be handled, following it through the same lookups the protocols use: which host it matches, and that host's addresses, services and files. With service, also whether the service is enabled and allowed for the host, and which file it would serve; with file, which file a request for that name would get.
Print the version.

The options are:

config
The configuration file. The default is /etc/bootd.hcl.
With check, only print problems.

Reload the configuration's hosts, classes and files, and the NIS map sources. Changes to networks, services and logging take effect on restart.
, SIGTERM
Exit.

/etc/bootd.hcl
The default configuration file.
/etc/ethers
Ethernet addresses of hosts that do not give one, see ethers(5).
/var/lib/bootd
The root for boot files in the Debian and Ubuntu packages.
/usr/local/etc/bootd.hcl
The configuration file of the macOS package and of Homebrew on Intel Macs.

bootd exits 0 on success and 2 for invalid usage. It exits 1 if the configuration has errors or the server fails, and explain exits 1 if the request would be refused.

Check a configuration and list what it serves:

$ bootd check -c bootd.hcl

Show how a TFTP request for a SPARCstation's boot program would be handled:

$ bootd explain kali tftp C0A80105.SUN4C

Connect the Ethernet interface en0 to a bootd on the same machine, then run bootd:

# bootbridge -i en0 -listen 127.0.0.1:4711 -peer 127.0.0.1:4712
$ bootd -c bootd.hcl

with this network in the configuration:

network "lab" {
  address = "192.168.1.250/24"
  udp     = "127.0.0.1:4712"
  peers   = ["127.0.0.1:4711"]
}

Attach simh or QEMU to the same bootd:

sim> attach xq udp:4713:127.0.0.1:4712
qemu-system-sparc ... -netdev dgram,id=n0,local.type=inet,\
    local.host=127.0.0.1,local.port=4713,remote.type=inet,\
    remote.host=127.0.0.1,remote.port=4712

bootd.hcl(5), ethers(5), bootbridge(8)

https://github.com/rpajarola/gobootd

A Reverse Address Resolution Protocol, RFC 903. The TFTP Protocol (Revision 2), RFC 1350. NFS: Network File System Protocol Specification, RFC 1094. Layer Two Tunneling Protocol - Version 3 (L2TPv3), RFC 3931.

bootd is a Go reimplementation of an earlier bootd. It is not a drop-in replacement.

Rico Pajarola <rp@servium.ch>

NFS, ND and TFTP are read only: writable exports and disks are not written to. NIS cannot transfer maps to slave servers, and does not make netgroup.byuser and netgroup.byhost.

October 14, 2026 Ubuntu