3. Configuration

3.1 Setting up netboot

 After downloading netboot, do all the normal untar steps and start READING!!!!
 I untar my source files as root in /usr/src and end up with a directory
where X.X.X is the version.

In the source directory type....
$ ./configure
$ make clean
$ make
$ make install

Of course reading the instructions all the way through helps a bit. The instructions with this
package are very verbose and in my humble opinion very clear. It seems that Gero Kuhlmann
spent some time documenting the installation procedure and without it I would have spent a
lot of time in limbo wondering what to do.

A directory for your diskless workstation to boot from must now be created. The default
directory used by tftp is called /tftpboot.
Underneath /tftpboot I created another directory called Xterm1/ which is where the
root file system for my diskless workstation will mount.

fig3.1 attempts to give an overview of this setup.


3.2 Compiling a kernel

The diskless work station requires a kernel to operate the system. To do this you must first
create a kernel that satisfies the diskless workstations hardware setup. Make a zImage of the
kernel and move the zImage file to the netboot directory netboot/mknbi-linux or the boot image
directory and type...

$ mknbi-linux -d rom -i rom -k zImage -o bootImage

This creates a file called bootImage which is a kernel that can be downloaded over a network.
Place this network ready kernel in the boot image location and if you wish, rename the kernel to
represent the name of the diskless station. eg. mv bootImage station1.bootImage .
This way you can have many different boot images in the one location for different workstations.

 3.3 Configuring the main server

This part can be a bit tricky. First you must work out what it is that your workstation is trying to
do and install all the required files and directories into the nfs root directory. I found it easier to
just load everything into the nfs directory for the trial setup and then later work out if it was
possible to remove directories from the nfs directory and directly mount other existing
directories on the server (read only) that contained the same files.  This requires that both the
server and the diskless workstation have the same hardware ie. both i586 motherboards.
This gets the workstation going in a stand alone directory.

One trap that I fell for, when setting up the nfs root directory, is that I tried to use soft links to
my servers root directory. When the network accesses the nfs root directory, a soft link can not
access data above its root directory.  Hard links do work, however it would mean that your
servers disk would have to be one large partition on one hard disk to link all the files required.
Not a good option if you have more than one partition/drive. So copying files is the only way to go.
I used Midnight commander to speed up the process a bit but I'm sure others can use cp and
other utilities with skills I have not developed yet .

The server also needs to know the hardware address of the network card that is trying to call
for the network kernel. If you don't know this address don't panic. When the diskless
workstation first sends its requests across the network the hardware address is displayed on
its console. This is handy if you haven't got the original diagnostic disks that came with the
network card.
This hardware address and other useful information need to be placed in /etc/bootptab
My bootptab has the following entry


The basic rundown of this is that my boot image is located at /tftpboot and is called
Xterm1.bootImage. I'm using ethenet and the hardware address of the diskless workstations
network card is 00001c802764 And once the kernel has booted mount the directory
/tftpboot/Xterm1 as the root directory. Of course once the root directory has been mounted then
init takes over and does whatever you have set up in your rc.d files.

needs to have tftp and bootps enabled. This should only be enabled if bootp is being used.
This tells the system what program to use when a bootp request is recieved.
I have two entries.
tftp    dgram   udp     wait    root    /usr/sbin/tcpd  in.tftpd
bootps  dgram   udp     wait    root    /usr/sbin/tcpd  bootpd

These entries use tcp wrappers and in some cases can cause problems.
If you do not wish to use tcp wrappers then you can have the following entries
tftp    dgram   udp     wait    root    /usr/sbin/in.tftpd   in.tftpd 
bootps  dgram   udp     wait    root    /usr/sbin/bootpd  bootpd

But do check your manuals first. It may be different on your system.

Because bootp and tftp are being used, do make sure that they are included in your
services file.
The following entries should be in the services file.
bootps          67/udp                          # bootp server
bootpc          68/udp                          # bootp client
tftp                69/udp

needs to have as a host that it can communicate with.
My entry is    Xterm1

and  /etc/exports
needs to allow the nfs directory to be mounted by the diskless workstation.
My entry is
/ftpboot/Xterm1   (rw,no_root_squash)

This allows the diskless workstation to read and write to the nfs disk with full root user priveliges
(man exports(5)).

O.K. that's the server. At this point in time the server should be waiting for requests to send
kernel images over the network.

3.3 Creating a boot rom or floppy

The diskless workstation cannot just have a network card plugged into it and then be expected
to boot a complete system. What is needed is code for the network card to initialize the request
for the kernel image to be sent over the network.

So another program is required. This program can be considered as a bootstrap program for the
workstation. To make this bootstrap program cd /usr/src/netboot-X.X.X/netboot/ and type....

$ make bootrom

An interactive program is launched asking for details about the network card that you wish to use,
the memory address that the card is assigned to and the interrupt that the card will use. When the
program finishes you should now have two files named image.flo and image.rom. These two files
effectively hold the same code except that image.flo can be placed onto a floppy disk and used as
a boot floppy.
To make the floppy type ...

$ dd if=image.flo of=/dev/fd0

insert the disk into the workstation (PC) and power it up.
In theory the machine boots up and you get straight to work on other projects :-)

Back in the real world.
If the server is not set up correctly then the workstation poll's the network for a reply. This is
your chance to write down the network cards hardware address. If the server is set up correctly
then the workstation will start loading a kernel and boot the system. If this is the case then it is
safe to take the image.rom file and burn it onto an eprom. The eprom can then be inserted onto
the network card and the workstation then does not require a floppy drive.
(A true diskless workstation.)
Using a floppy to boot from has its advantages in that desktops running other operating systems can be turned into a linux box just by rebooting with the boot floppy in its drive. All this without touching the built in hard drive.