Why a diskless workstation? In today’s day and age, this is a good question. My take on it is that I have a multiuser operating system (Linux) running on a large machine (Dual Xeon 5160 with 12 GB RAM) that could be used from several locations in the house by deploying X-Terminals. Rather than spending money on X-Terminals, why not use an old laptop or desktop machine to access the servers gui, applications and resources? That is my reasoning, and I also add some local application support for things not suitable for the X protocol over the network, such as Video, so while the machine is diskless, it isn’t just a dumb display device.
Preparing the Server
Lets get started with preparing the server side of the diskless environment. For our purposes we will be using a traditional NFS based environment for running the diskless workstation. This process should work on Ubuntu Lucid or Karmic Server or Desktop Installations.
Several things need to be installed on the server:
- tftp server
- dhcp server
- nfs server
- pxelinux.0 and startup files
Install the tftp sever, dhcp server and nfs server with the following command:
sudo apt-get install atftpd && sudo apt-get install dhcp3-server && sudo apt-get install nfs-kernel-server
You will also need to download the pxelinux.0 file. You can get that file here:
http://www.linuxpoweruser.com/files/
For our example, we will need to create a directory to house our diskless file systems, and pxelinux startup files. We will use /srv/netboot. Create this directory on your server with the following command:
sudo mkdir /srv/netboot
In this directory, lets create the following subdirectories:
sudo mkdir /srv/netboot/diskless1
“diskless1” is where the root filesystem of our diskless machine will live.
sudo mkdir /srv/netboot/startup_files
“startup_files” is where kernel images, pxe and initrd images will reside for booting diskless workstations – this is similar to the /boot directory on a linux system. The workstation will access these files via tftp.
Lets share the needed directories via NFS. To do this, we need to edit the exports file on the server and add the following line:
/srv/netboot/diskless1 *(rw,sync,no_root_squash,no_subtree_check)
Then, tell the nfs server to refresh its export list with exportfs command:
sudo exportfs -avr
Next we will configure the tftp server, atftpd. The configuration file for atftpd is /etc/default/atftpd. We will customize ours to look like this:
#USE_INETD=true
#OPTIONS="--tftpd-timeout 300 --retry-timeout 5 --mcast-port 1758 --mcast-addr 239.239.239.0-255 --mcast-ttl 1 --maxthread 100 --verbose=5 /var/lib/tftpboot"
USE_INETD=false
OPTIONS="--daemon --port 69 --tftpd-timeout 300 --retry-timeout 5 --mcast-port 1758 --mcast-addr 239.239.239.0-255 --mcast-ttl 1 --maxthread 100 --verbose=5 /srv/netboot/startup_files"
The first two lines of the file are the default entries – we are going to comment them out and add the second two lines as shown above. After editing the file, restart the tftpd service with the command:
/etc/init.d/atftp restart
Next, we need to configure the DHCP server. Some custom options are required for the DHCP server to tell the diskless workstation how to retrieve its boot files. In our example, we will use a 192.168.0.0/24 network, so the DHCP server configuration will look something like this (this also assumes that this is the only DHCP server for the 192.168.0.0/24 network having more than one is bad news unless configured properly) assuming your DNS servers are 192.168.0.14 and 192.168.0.13 and your default router (route to the internet) is 192.168.0.1:
# The ddns-updates-style parameter controls whether or not the server will
# attempt to do a DNS update when a lease is confirmed. We default to the
# behavior of the version 2 packages ('none', since DHCP v2 didn't
# have support for DDNS.)
ddns-update-style none;
# option definitions common to all supported networks...
option domain-name "rtwsecurenet.com";
option domain-name-servers 192.168.0.14,192.168.0.13;
option ntp-servers 192.168.0.14;
default-lease-time 172800;
max-lease-time 259200;
# If this DHCP server is the official DHCP server for the local
# network, the authoritative directive should be uncommented.
authoritative;
# This is a very basic subnet declaration.
subnet 192.168.0.0 netmask 255.255.255.0 {
range 192.168.0.127 192.168.0.254;
option routers 192.168.0.1;
}
host diskless1 {
hardware ethernet 00:04:76:3F:A6:36;
fixed-address 192.168.0.127;
next-server 192.168.0.14;
option root-path "/srv/netboot/diskless1";
filename "/pxelinux.0";
}
In the example above I created a reservation for the diskless workstation. DHCP reservations are based on mac addresses. The hardware ethernet parameter above should be editted to reflect the diskless workstation’s ethernet card mac address. The fixed-address specifies the IP address that will be assigned to the diskless workstation. The last 3 parameters, called DHCP options, give booting information to the diskless workstation. These should be updated to reflect the appropriate server IP (next-server) and path (option root-path). Substitute your server’s IP address and path for your installation. The DHCP server that ships with Ubuntu linux is the only one that I am aware of that supports per reservation DHCP options such as these. Be sure to also change the DNS server settings the in the dhcp.conf file to the servers for your site/network.
The last part of preparing the server is the configuration of pxelinux and the diskless boot files.
Configuring PXE
The first thing we need to do is take the pxelinux.0 file you downloaded above and copy it to the /srv/netboot/startup_files directory we created above. Then, in the /srv/netboot/startup_files directory, make the following directory (as root or using sudo):
mkdir pxelinux.cfg
The pxelinux.cfg directory will contain the pxelinux boot configuration file for each diskless workstation. We will configure these files after we build our diskless workstation image.
This should about wrap it up for the server configuration piece of the diskless workstation setup. The next part will cover the building of a diskless workstation image from a standard ubuntu-desktop installation.
Stay tuned!
Hi! Thanks for this nice guide! I really hope that you next guide comes sune 🙂
Hey, this command has a typo: “The first two lines of the file are the default entries – we are going to comment them out and add the second two lines as shown above. After editing the file, restart the tftpd service with the command:
/etc/init.d/atftp restart
it should /etc/init.d/atftpd restart
Thanks for finding the typo…
Hi, thank you for the guide, we have accepted a donation of 30+ pentium 3 dekstops, 450mhz processor and 128 RAM, no hdd. I’m planning to setup a server using a desktop and have diskless clients. I hope I can do it, i will be starting now.
Good luck – Hope it worked out well for you.
Rett
thanks for a nice guide ! :)))
It seems tftp file is tftpd-hpa now.