Netbooting Debian Squeeze
This page is about netbooting Debian squeeze. That is, using PXE to boot a diskless system with / (root) on a fileserver mounted via NFS, a method known as NFSRoot.
The easiest way to do this IMO is to actually install Debian Squeeze to a machine, make the necessary modifications to turn it into a diskless client and then copy the filesystem from that machine to a directory in the NFS share. Note, this page assumes root privileges.
First things first. Install Debian Squeeze to a machine (or virtual machine ) of your choosing.
Prerequisites
On the server, you will need these packages
apt-get install dhcp3-server
apt-get install tftp-hpa
apt-get install syslinux
apt-get install nfs-kernel-server
On the client, you will need these packages
apt-get install initramfs-tools
Configure DHCP server
NOTE: Most networks already have a DHCP server configured, and having more than one of them on the network at a time can cause problems for other computers on the network. Make sure you disable any other DHCP servers if you are starting a new one, instead of changing the configuration for the existing server.
Now, configure the DHCP server. I prefer vim,
vim /etc/dhcp3/dhcpd.conf
You need to add a next-server and filename options, and the resulting file should look something like this.
default-lease-time 600;
max-lease-time 7200;
option domain-name "xephon";
option domain-name-servers 192.168.1.1, 192.0.0.1, 194.2.0.50;
option routers 192.168.1.1;
subnet 192.168.1.0 netmask 255.255.255.0 {
range 192.168.1.50 192.168.1.99;
next-server 192.168.1.1;
filename "/tftpboot/pxelinux.0";
}
The next-server option tells the client which IP to ask for the file named in filename.
You can see the Set up DHCP section of the this page for an example of setting up a static client section.
Set up NFS
First, we will create the directory that will contain our nfs shares, and then a directory for the root of the client who we will name zim.
mkdir /nfs
mkdir /nfs/zim
Don’t forget to export them,
vim /etc/exports
and add this line
/nfs/zim 192.168.1.0/255.255.255.0(rw,async,no_root_squash,no_subtree_check)
This will allow anyone in the network of 192.168.1.0/24 to mount this share. If this is not what you want, you can restrict it to a single IP such as 192.168.1.101/32, or simply * to allow anyone access. Then, reload the file with,
exportfs -rv
Configure the client
Let’s start with /etc/fstab. Edit it so that your current root and swap are commented out, and add the necessary lines, both of which are shown in this example.
###/dev/hda1 / ext3 noatime,errors=remount-ro 0 1
###/dev/hda5 /mnt/hda5 ext3 noatime 0 2
###/dev/hda6 none swap sw 0 0
/dev/nfs / nfs defaults 0 0
none /tmp tmpfs defaults 0 0
none /var/run tmpfs defaults 0 0
none /var/lock tmpfs defaults 0 0
none /var/tmp tmpfs defaults 0 0
none /media tmpfs defaults 0 0
Next, we need to edit /etc/initramfs-tools/initramfs.conf. Edit it so the BOOT and MODULES lines are as shown
BOOT=nfs
MODULES=netboot
Now, create a new initrd image.
mkinitramfs -o initrd.img.netboot
mv initrd.img.netboot /boot/.
Now, don’t forget to edit the /etc/network/interfaces file. It needs to look like this.
# The primary network interface
#allow-hotplug eth0
iface eth0 inet manual
Then, mount the NFS share and begin copying over the filesystem to the server.
mount -tnfs -onolock 192.168.1.4:/nfs/zim /mnt
cp -axv /. /mnt/.
cp -axv /dev/. /mnt/dev/.
And finally, back on the server, configure tftp. Remember that in Debian Squeeze, for the tftp-hpa package,
the tftp folder is in /var/lib/tftpboot.
mkdir -p /var/lib/tftpboot/pxelinux.cfg
cp /usr/lib/syslinux/pxelinux.0 /var/lib/tftpboot/.
cp /nfs/zim/boot/vmlinuzTAB /var/lib/tftpboot/vmlinuz-zim
cp /nfs/zim/boot/initrd.img.netboot /var/lib/tftpboot/initrd.img.zim
Where you see TAB, press the TAB key and it will automagically fill in the kernel version, assuming you only have one version in there.
Now, create a PXE config file
vim /var/lib/tftpboot/pxelinux.cfg/default
and add contents such as these, replacing the IP address and kernel version with the one your using.
LABEL linux
KERNEL vmlinuz-2.6.15-1-486
APPEND root=/dev/nfs initrd=initrd.img.netboot nfsroot=192.168.1.4:/mnt/hda5/yuki ip=dhcp rw
Enjoy
Now, you should have a working thinclient.
Don’t forget the changes you’ve made to the existing machine, in it’s current state it isn’t bootable, but that isn’t a problem because we assume you’ve installed it to a machine that you will be using as a thinclient. Simply revert the changes to put the machine back in a bootable state.
References
http://wiki.linuxquestions.org/wiki/Diskless_Workstation
https://help.ubuntu.com/community/DisklessUbuntuHowto