.\" $OpenBSD: diskless.8,v 1.72 2022/06/26 12:34:41 deraadt Exp $ .\" $NetBSD: diskless.8,v 1.7.4.1 1996/05/30 18:58:10 cgd Exp $ .\" .\" .\" Copyright (c) 1994 Gordon W. Ross, Theo de Raadt .\" All rights reserved. .\" .\" Redistribution and use in source and binary forms, with or without .\" modification, are permitted provided that the following conditions .\" are met: .\" 1. Redistributions of source code must retain the above copyright .\" notice, this list of conditions and the following disclaimer. .\" 2. Redistributions in binary form must reproduce the above copyright .\" notice, this list of conditions and the following disclaimer in the .\" documentation and/or other materials provided with the distribution. .\" 3. The name of the author may not be used to endorse or promote products .\" derived from this software without specific prior written permission. .\" .\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR .\" IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES .\" OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. .\" IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, .\" INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT .\" NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, .\" DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY .\" THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT .\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF .\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. .\" .Dd $Mdocdate: June 26 2022 $ .Dt DISKLESS 8 .Os .Sh NAME .Nm diskless .Nd booting a system over the network .Sh DESCRIPTION The ability to boot a machine over the network is useful for .Em diskless or .Em dataless machines, or as a temporary measure while repairing or re-installing filesystems on a local disk. This file provides a general description of the interactions between a client and its server when a client is booting over the network. The general description is followed by specific instructions for configuring a server for diskless clients. .Pp When booting a system over the network, there are three phases of interaction between client and server: .Pp .Bl -enum -compact .It The PROM (or stage-1 bootstrap) loads a boot program. .It The boot program loads a kernel. .It The kernel does NFS mounts for root and swap. .El .Pp Each of these phases are described in further detail below. .Pp In .Em phase 1 , the PROM loads a boot program. PROM designs vary widely, so this phase is inherently machine-specific. Sun and Motorola machines use RARP to determine the client's IP address and then use TFTP to download a boot program from whoever sent the RARP reply. HP 300-series machines use the HP Remote Maintenance Protocol to download a boot program. Other machines may load a network boot program either from diskette or using a special PROM on the network card. .Pp In .Em phase 2 , the boot program loads a kernel. Operation in this phase depends on the design of the boot program. The procedure used by the boot program is as follows: .Pp .Bl -enum -compact .It The boot program gets the client IP address using RARP. .It The boot program gets the client name and server IP address by broadcasting an RPC/BOOTPARAMS/WHOAMI request with the client IP address. .It The boot program gets the server path for this client's root using an RPC/BOOTPARAMS/GETFILE request with the client name. .It The boot program gets the root file handle by calling .Xr mountd 8 with the server path for the client root. .It The boot program gets the kernel file handle by calling NFS lookup on the root file handle. .It The boot program loads the kernel using NFS read calls on the kernel file handle. .It The boot program transfers control to the kernel entry point. .El .Pp In .Em phase 3 , the kernel does NFS mounts for root and swap. The kernel repeats much of the work done by the boot program because there is no standard way for the boot program to pass the information it gathered on to the kernel. The procedure used by the kernel is as follows: .Pp .Bl -enum -compact .It The kernel finds a boot server using the same procedure as described in steps 1 and 2 of phase 2, above. .It The kernel gets the NFS file handle for root using the same procedure as described in steps 3, 4, and 5 of phase 2, above. .It The kernel calls the NFS getattr function to get the last-modified time of the root directory, and uses it to check the system clock. .It If the kernel is configured for swap on NFS, it uses the same mechanism as for root, but uses the NFS getattr function to determine the size of the swap area. .El .Pp The .Pa INSTALL. Ns Aq Ar arch notes that come with each distribution also give details on the specifics of net/diskless booting for each architecture. .Pp The procedures for AMD64 and i386 clients vary somewhat to the stages detailed above. See .Xr pxeboot 8 for more detailed information. .Sh EXAMPLES Before a client can boot over the network, its server must be configured correctly. This example will demonstrate how to configure a server and client. .Pp Assuming the client's hostname is to be "myclient": .Bl -enum .It Add an entry to .Pa /etc/ethers corresponding to the client's Ethernet address: .Bd -literal -offset indent 8:0:20:7:c5:c7 myclient .Ed .Pp This will be used by .Xr rarpd 8 . .It Assign an IP address for myclient in .Pa /etc/hosts : .Bd -literal -offset indent 192.197.96.12 myclient .Ed .It If booting an alpha, amd64, hppa, i386, or sparc64 client, ensure that .Xr tftpd 8 is configured to run in the directory .Pa /tftpboot . .Pp If booting an HP 300 or older HPPA machine, ensure that .Pa /etc/rbootd.conf is configured properly to transfer the boot program to the client. An entry might look like this: .Bd -literal -offset indent 08:00:09:01:23:E6 SYS_UBOOT # myclient .Ed .Pp See the .Xr rbootd 8 manual page for more information. .It If booting a newer alpha, amd64, hppa, i386, or sparc64 client, install a copy of the appropriate diskless boot loader in the .Pa /tftpboot directory. .Pp If booting a Motorola or Sun client, make a link such that the boot program is accessible as a file named after the client's IP address in hex. For example: .Bd -literal -offset indent # cd /tftpboot # ln -s boot.net C0C5600C .Ed .Pp The following example converts an IP address to hex: .Bd -literal -offset indent $ echo 192.197.96.12 | awk -F . \e '{ printf "%02X%02X%02X%02X\en", $1, $2, $3, $4 }' .Ed .Pp Sun Sparc machines also require a .Dq . Ns Aq Ar arch suffix. So the filename in the example above for a Sun4 machine would be .Dq C0C5600C.SUN4 . The name used is really architecture dependent: it simply has to match what the booting client's PROM wishes it to be. If the client's PROM fails to fetch the expected file, .Xr tcpdump 8 can be used to discover which filename the client is trying to read. .Pp Architectures using DHCP (newer alpha, amd64, hppa, or i386) should ensure that .Xr dhcpd 8 is configured on the server to serve BOOTP protocol requests. An example entry in .Xr dhcpd.conf 5 : .Bd -literal -offset indent subnet 10.0.0.0 netmask 255.0.0.0 { host myclient { filename "netboot"; option root-path "/export/myclient/root"; hardware ethernet 00:02:56:00:73:31; fixed-address 10.42.42.42; } } .Ed .Pp Note that procedures for AMD64 and i386 clients vary somewhat. See .Xr pxeboot 8 for more detailed information. .Pp Architectures using the HP remote boot server (HP 300 or older HPPA) should ensure that the general purpose boot program is installed in the directory .Pa /usr/mdec/rbootd . .Pp Architectures using MOP (older Alpha) should follow the instructions in .Xr mopd 8 for setting up a TFTP boot. .It Add myclient to the bootparams database .Pa /etc/bootparams : .Bd -literal -offset indent myclient root=server:/export/myclient/root \e swap=server:/export/myclient/swap .Ed .Pp Note that some bootparam servers are somewhat sensitive. Some require fully qualified hostnames or partially qualified hostnames (which can be solved by having both fully and partially qualified entries). Other servers are case sensitive. .It Build the swap file for myclient: .Bd -literal -offset indent # mkdir -p /export/myclient/root/swap # cd /export/myclient # dd if=/dev/zero of=swap bs=1m count=120 .Ed .Pp This creates a 120 Megabyte swap file and an empty /swap directory. A smaller swap file may be created if the boot is for maintenance (i.e. temporary) purposes only. .It Populate myclient's root filesystem on the server. How this is done depends on the client architecture and the version of the .Ox distribution. It can be as simple as copying and modifying the server's root filesystem, or perhaps the files can be taken from the standard binary distribution. .It Export the required filesystems in .Pa /etc/exports : .Bd -literal -offset indent /usr -ro myclient /export/myclient -maproot=root -alldirs myclient .Ed .Pp If the server and client are of the same architecture, then the client can share the server's .Pa /usr filesystem (as is done above). If not, a properly fleshed out .Pa /usr partition will have to be built for the client in some other place. .It Copy and customize at least the following files in .Pa /export/myclient/root : .Bd -literal -offset indent # cd /export/myclient/root/etc # cp /etc/fstab fstab # cp /etc/hosts hosts # echo myclient > myname # echo inet 192.197.96.12 > hostname.le0 .Ed .Pp Note that "le0" above should be replaced with the name of the network interface that the client will use for booting. .It Correct at least the critical mount points in the client's .Xr fstab 5 (which will be .Pa /export/myclient/root/etc/fstab ) : .Bd -literal -offset indent myserver:/export/myclient/root / nfs rw 0 0 myserver:/export/myclient/swap none swap sw,nfsmntpt=/swap myserver:/export/myclient/root/usr /usr nfs rw,nodev 0 0 .Ed .Pp The above example works even if .Pa /usr is not on a separate partition. It allows them to be mounted with NFSv3, if the server allows it, and to specify per-partition mount options, such as .Cm nodev . .Pp If the .Pa /usr partition is to be shared between machines, as in the example .Pa /etc/exports above, a more suitable entry might be: .Bd -literal -offset indent myserver:/usr /usr nfs ro 0 0 .Ed .It Make sure the correct processes are enabled on the server. See .Xr rc.conf 8 for details of how to start these processes at boot. .Pp For all clients: .Xr mountd 8 , .Xr nfsd 8 , .Xr portmap 8 , .Xr rarpd 8 , and .Xr rpc.bootparamd 8 . .Pp For alpha, amd64, hppa, i386, and sparc64 clients: .Xr tftpd 8 .Pp For HP 300 and older HPPA clients: .Xr rbootd 8 .Pp For newer alpha, amd64, hppa, and i386 clients: .Xr dhcpd 8 .Pp For older alpha clients: .Xr mopd 8 .It Net boot the client. .El .Sh FILES .Bl -tag -width "/usr/mdec/rbootdXX" -compact .It Pa /etc/bootparams Client root and swap pathnames. .It Pa /etc/dhcpd.conf DHCP daemon configuration file. .It Pa /etc/ethers Ethernet addresses of known clients. .It Pa /etc/exports Exported NFS mount points. .It Pa /etc/fstab Static information about the filesystems. .It Pa /etc/hostname.$if Interface-specific configuration file. .It Pa /etc/hosts Host name database. .It Pa /etc/myname Default hostname. .It Pa /etc/mygate Default gateway. .It Pa /etc/rbootd.conf Configuration file for HP Remote Boot Daemon. .It Pa /tftpboot Location of boot programs loaded by the Sun PROM. .It Pa /usr/mdec/rbootd Location of boot programs loaded by the HP Boot ROM. .El .Sh SEE ALSO .Xr bootparams 5 , .Xr dhcpd.conf 5 , .Xr ethers 5 , .Xr exports 5 , .Xr fstab 5 , .Xr hostname.if 5 , .Xr hosts 5 , .Xr mygate 5 , .Xr myname 5 , .Xr dhcpd 8 , .Xr mopd 8 , .Xr mountd 8 , .Xr nfsd 8 , .Xr portmap 8 , .Xr pxeboot 8 , .Xr rarpd 8 , .Xr rbootd 8 , .Xr rpc.bootparamd 8 , .Xr tcpdump 8 , .Xr tftpd 8