The first two solutions require you to burn a ROM for your NIC. While this achieves a high level of open-source-ness, it can be quite a hassle and is probably only cost-effective for volume production. It also seems to be quite slow with some nics. I used the 3com approach. I won't recommend it, however. If you'd force me to recommend something, I'd recommend you quit thinking about diskless Linux clients.
There is a standard way to obtain the network configuration from the server. Actually, there are three. But RARP is not an option, and DHCP is a little over the top. I will focus on bootp, the boot protocol, which is supported by all three options above (I hope. 3com/LanWorks MBA supports it).
On the server side, you will need to edit the file ``/etc/bootptab''. The manpage is actually excellent (``man 5 bootptab''). A very simple configurations could look like:
<client-hostname>:\ ha=<client NIC hardware ethernet address>:\ ip=<the client's IP address>:\ bf=<Name of the file holding the client's kernel>:\ sm=<Subnet mask>:\ rp=<NFS export the client should mount on />:\ sa=<server's ip address>:\ hn
The ``hn'' option just tells the server to provide the client's hostname.
If the entry becomes longer than 1024 byte, you need to move some of it to a default configuration entry. You may wish to move much of the configuration information to a default entry, which can be included in individual client's configurations using the
You should specify a root path. Defaults for that can vary. Your kernel commandline options can cause unexpected problems, too, if you don't.
You can do much more. Read the manpage.
You still have to start the server. You can run bootpd in standalonge mode or from inetd. It should autodetect what you did. If it doesn't, -i on the commandline tells it to use inetd mode, -s means standalone mode. Read the manpage for bootpd too. It's short and useful. It suggests this inetd.conf entry:
bootps dgram udp wait root /usr/sbin/bootpd bootpd bootptabYou should replace bootptab with the file you use (or leave it out if it is /etc/bootptab), and you could add a timeout using
If you wish to route bootp requests, use bootpgw, which comes with bootpd. It will forward all requests to the server you specify as command line argument. The other arguments are the same as for bootpd.
Check your setup using the bootptest program.
You need to setup the client to use bootp. When using the MBA, simply hit ``Ctrl-Alt-B'' when it tells you to and choose ``TCP/IP'' as the first, ``BOOTP'' as the second option.
If you insist on using DHCP, it's not very hard to configure once you understand how to configure bootp. Look at the examples distributed with the debian dhcp package.