These are the basic steps for creating an NFSROOT fedora core PXE configuration.
Obtain tftp, dhcpd, nfs-utils, dracut, dracut-network and syslinuxCode:
yum install syslinux dhcp tftp nfs-utils
Configure dhcp server
edit /etc/dhcp/dhcpd.conf
vim /etc/dhcpd/dhcpd.conf
2. Add the following text and edit to suit your needs:
allow bootp;
allow booting;
filename = "/pxelinux.0";
authoritative;
ddns-update-style none;
next-server 192.168.200.254;
subnet 192.168.200.0 netmask 255.255.255.0 {
range 192.168.200.100 192.168.200.200;
default-lease-time 3600;
max-lease-time 4800;
option domain-name-servers 192.168.200.254;
option subnet-mask 255.255.255.0;
option domain-name "local";
option routers 192.168.200.254;
option broadcast-address 192.168.200.255;
host c1 {
hardware ethernet 00:13:72:A5:9D:C1;
fixed-address 192.168.200.100;
option host-name "c1";
filename "/pxelinux.0";
}
}
Configure the dhcp server to start at boot
chkconfig dhcpd on
Restart the dhcp server
service dhcpd restart
Configure the NFS Server
Create the directory where you will store all of your NFS Root images
sudo mkdir /home/nfsroot
Edit the /etc/exports file
vim /etc/exports
Add the following line:
/home/nfsroot 192.168.200.0/24(rw,no_root_squash,sync,no_subtree_check) 127.0.0.1/32(rw,no_root_squash,sync,no_subtree_check)
Restart the nfs server or alternatively re-export everything
sudo service nfs restart
sudo exportfs -rfa
Setup the TFTP server and install syslinux
Make the top level tftp directory
sudo mkdir /tftpboot
Add the syslinux boot image
sudo cp /usr/share/syslinux/pxelinux.0 /tftpboot/ sudo cp /usr/share/syslinux/menu.c32 /tftpboot/
Create the pxelinux.cfg directory where you will put the menu files
mkdir -p /tftpboot/pxelinux.cfg
Create default pxe configuraiton
vim /tftpboot/pxelinux.cfg/default
Add the following lines
PROMPT 1
DEFAULT linux
TIMEOUT 30
LABEL linux
KERNEL vmlinuz_fc13
APPEND initrd=fc_13.img selinux=0 nousb rootfstype=nfs root=/dev/nfs nfsroot=192.168.200.254:/home/nfsroot/diskless/fedora/13/x86_64
TFTP uses xinetd. We need to enable the service
vim /etc/xinetd.d/tftp
# default: off
# description: The tftp server serves files using the trivial file transfer \
# protocol. The tftp protocol is often used to boot diskless \
# workstations, download configuration files to network-aware printers, \
# and to start the installation process for some operating systems.
service tftp
{
socket_type = dgram
protocol = udp
wait = yes
user = root
server = /usr/sbin/in.tftpd
# Turn on verbose options to help with troubleshooting and also change the path to /tftpboot
server_args = -s /tftpboot -v -v -v -c
# Do not forget to enable the service
disable = no
per_source = 11
cps = 100 2
flags = IPv4
Restart xinetd
service xinetd restart
Create an NFSRoot image to boot from
Creating a NFSROOT image can be accomplished many ways, including:
- Use virtualbox and install a basic operating system environment. Copy that environment to your nfsroot directory.
- Use yum to install a basic environment. (Not covered here)
1. Determine the method to roll your OS onto some storage platform.
2. Copy the relevant files over to the appropriate directory
rsync -avz --exclude="/dev/*" --exclude="/sys/*" exclude="/proc/*" --exclude="/home/*" --exclude="/tmp/*" --exclude="/selinux/* "-e ssh 192.168.200.254:/nfsroot/diskless/fedora/13/x86_64
3. Generate the the initrd image and copy the kernel to the /tftpboot directory
cp /boot/vmlinuz-`uname -r` /tftpboot/vmlinuz_fc13 dracut /tftpboot/fc_13.img $(uname -r)
4. Edit the fstab file in the image you just installed (Do not edit your systems fstab file....)
sudo vim /home/nfsroot/diskless/fedora/13/x86_64/etc/fstab
Remove every line. The change in step five will not require anyting to be in the fstab file.
5. Edit the /home/nfsroot/diskless/fedora/13/x86_64/etc/sysconfig/readonly-root directory and alter the file to appear like this:
# Set to 'yes' to mount the system filesystems read-only. READONLY=yes # Set to 'yes' to mount various temporary state as either tmpfs # or on the block device labelled RW_LABEL. Implied by READONLY TEMPORARY_STATE=yes # Place to put a tmpfs for temporary scratch writable space RW_MOUNT=/var/lib/stateless/writable # Label on local filesystem which can be used for temporary scratch space RW_LABEL=stateless-rw # Options to use for temporary mount RW_OPTIONS= # Label for partition with persistent data STATE_LABEL=stateless-state # Where to mount to the persistent data STATE_MOUNT=/var/lib/stateless/state # Options to use for peristent mount STATE_OPTIONS=
6. At this point you should have everything you need.
Section F: Troubleshooting
1. Use tail to monitor the messages log file. Look for tftp image files that can not be loaded.
sudo tail -f /var/log/messages
2. Use wireshark to monitor the network traffic between clients and servers.
3. Use virtualbox or some other virtualization solution to rapidly test your PXE/NFSroot configuration.
4. Using CHROOT to access your image. Useful if you want to install packages using YUM. Also use this to remove things that are not needed.
sudo mount --bind /proc /home/nfsroot/diskless/fedora/13/x86_64/proc sudo mount --bind /sys /home/nfsroot/diskless/fedora/13/x86_64/sys sudo mount --bind /dev /home/nfsroot/diskless/fedora/13/x86_64/dev chroot /home/nfsroot/diskless/fedora/13/x86_64 source /etc/profile
5. During system initialization, there will be some complaints about certain things not being available. For the most part, these failures do not seem critical to the system. I am looking into the init scripts to fix these issues, but if anyone else has any comments, please let me know.