next up previous
Next: Network configuration Up: Setting up a Linux Previous: Hardware

Theory

When switching on a computer without a harddrive, it must load its user applications over the network. To do that, it must load the operating system. The operating system could be made small enough to fit on a ROM which could be plugged into a network card. This would, however, be a rather inflexible approach, as one would have to burn a new ROM to change the OS.

Thus, the OS is also loaded over the network. To do that, the client must first setup basic networking functionality. The program to do that could be stored on a CD-ROM, a floppy drive, a ROM chip of some description on the NIC, in the system BIOS or in an even more exotic storage form.

The details of a specific clients network setup (IP, hostname, nameservers etc pp) could be hardcoded into the storage device. This would be inflexible again. Thus, this configuration is also loaded over the network.

How can the client use the network to obtain configuration information if the network is not configured yet? There is a little piece of information hardcoded into every ethernet card. It is the MAC address, which is unique for each card. Some cards may allow you to change the MAC address; don't.

Even without having an IP address, the client can broadcast a request for configuration information over the network. This request won't be routed in the normal way, so you should place the configuration server on the same subnet as the client. Using the client's MAC, the server can then identify the client in its databases and provide the necessary information.

The system should now be able to load the kernel, go through its startup scripts, mount filesystems and be ready to go!

Except, it's still got to swap somewhere. And that's when the trouble starts.

Say you have a file on an NFS mount configured as swapspace. Let's pretend we are the kernel:

Uh.. No RAM left.

Ah, no problem, got some swap.

OK, swapcode, send page X into the swapfile!

swapcode (to itself): Let's build a packet so we can send page X to the server..

swapcode: hey kernel, I need some RAM to build a packet!

Kernel: Uh.. No RAM left.

Ah, no problem, got some swap

OK, swapcode, send page X into the swapfile!

swapcode (to itself): Let's build a packet so we can send page X to the server..

swapcode: hey kernel, I need some RAM to build a packet!

Kernel: Uh.. No RAM left.

Ah, no problem, got some swap

OK, swapcode, send page X into the swapfile!

Let's just assume the box is really slow and the user hits the reset button at this point.

There are workarounds to this problem.


next up previous
Next: Network configuration Up: Setting up a Linux Previous: Hardware
2001-12-02