Contributed by Martin Renters <martin@FreeBSD.org>.
netboot.com/netboot.rom allow you to boot your FreeBSD machine over the network and run FreeBSD without having a disk on your client. Under 2.0 it is now possible to have local swap. Swapping over NFS is also still supported.
Supported Ethernet cards include: Western Digital/SMC 8003, 8013, 8216 and compatibles; NE1000/NE2000 and compatibles (requires recompile)
Find a machine that will be your server. This machine will require enough disk space to hold the FreeBSD 2.0 binaries and have bootp, tftp and NFS services available. Tested machines:
HP9000/8xx running HP-UX 9.04 or later (pre 9.04 doesn't work)
Sun/Solaris 2.3. (you may need to get bootp)
Set up a bootp server to provide the client with IP, gateway, netmask.
diskless:\ :ht=ether:\ :ha=0000c01f848a:\ :sm=255.255.255.0:\ :hn:\ :ds=220.127.116.11:\ :ip=18.104.22.168:\ :gw=22.214.171.124:\ :vm=rfc1048:
Set up a TFTP server (on same machine as bootp server) to provide booting information to client. The name of this file is cfg.X.X.X.X (or /tftpboot/cfg.X.X.X.X, it will try both) where X.X.X.X is the IP address of the client. The contents of this file can be any valid netboot commands. Under 2.0, netboot has the following commands:
|help||print help list|
|ip X.X.X.X||print/set client's IP address|
|server X.X.X.X||print/set bootp/tftp server address|
|netmask X.X.X.X||print/set netmask|
|hostname name||print/set hostname|
|kernel name||print/set kernel name|
|rootfs ip:/fs||print/set root filesystem|
|swapfs ip:/fs||print/set swap filesystem|
|swapsize size||set diskless swapsize in Kbytes|
|diskboot||boot from disk|
|autoboot||continue boot process|
|trans on|off||turn transceiver on|off|
|flags bcdhsv||set boot flags|
A typical completely diskless cfg file might contain:
rootfs 126.96.36.199:/rootfs/myclient swapfs 188.8.131.52:/swapfs swapsize 20000 hostname myclient.mydomain
A cfg file for a machine with local swap might contain:
rootfs 184.108.40.206:/rootfs/myclient hostname myclient.mydomain
Ensure that your NFS server has exported the root (and swap if applicable) filesystems to your client, and that the client has root access to these filesystems A typical /etc/exports file on FreeBSD might look like:
/rootfs/myclient -maproot=0:0 myclient.mydomain /swapfs -maproot=0:0 myclient.mydomain
And on HP-UX:
/rootfs/myclient -root=myclient.mydomain /swapfs -root=myclient.mydomain
If you are swapping over NFS (completely diskless configuration) create a swap file for your client using dd. If your swapfs command has the arguments /swapfs and the size 20000 as in the example above, the swapfile for myclient will be called /swapfs/swap.X.X.X.X where X.X.X.X is the client's IP addr, eg:
# dd if=/dev/zero of=/swapfs/swap.220.127.116.11 bs=1k count=20000
Also, the client's swap space might contain sensitive information once swapping starts, so make sure to restrict read and write access to this file to prevent unauthorized access:
# chmod 0600 /swapfs/swap.18.104.22.168
Unpack the root filesystem in the directory the client will use for its root filesystem (/rootfs/myclient in the example above).
On HP-UX systems: The server should be running HP-UX 9.04 or later for HP9000/800 series machines. Prior versions do not allow the creation of device files over NFS.
When extracting /dev in /rootfs/myclient, beware that some systems (HPUX) will not create device files that FreeBSD is happy with. You may have to go to single user mode on the first bootup (press control-c during the bootup phase), cd /dev and do a sh ./MAKEDEV all from the client to fix this.
Run netboot.com on the client or make an EPROM from the netboot.rom file
At present there isn't an officially sanctioned way of doing this, although I have been using a shared /usr filesystem and individual / filesystems for each client. If anyone has any suggestions on how to do this cleanly, please let me and/or the FreeBSD core team <freebsd-core@FreeBSD.org> know.
Netboot can be compiled to support NE1000/2000 cards by changing the configuration in /sys/i386/boot/netboot/Makefile. See the comments at the top of this file.