Starting from scratch:
This is my configuration for dhcp. Change values in here as required. /etc/dhcp/dhcpd.conf :
ignore client-updates;
subnet 10.0.0.0 netmask 255.255.255.0 {
range 10.0.0.5 10.0.0.20; # total 15 addresses allocated
default-lease-time 86400; #1 day lease time for extended boots
max-lease-time 86400; # only 1 day lease - no more - no less
option ip-forwarding off;
option broadcast-address 10.0.0.255;
option subnet-mask 255.255.255.0;
filename "/pxelinux.0";
option tftp-server-name "10.0.0.1";
}
Point of note: You must have a 10.0.0.0/24 address assigned to a NIC for the DHCP server to broadcast on.
/etc/xinetd.d/tftp :
Notably: change 'disable = yes' to 'disable = no'
The following is the tftpd configuration file. Change '/sto/tftpboot' to the directory where you'll be hosting your files. If you're making this directory from scratch, please note this dir must have 0x777 permissions for the tftp daemon to access and host it.
service tftp {
disable = no
socket_type = dgram
protocol = udp
wait = yes
user = root
server = /usr/sbin/in.tftpd
server_args = -s /sto/tftpboot -v -v -p
per_source = 11
cps = 100 2
flags = IPv4
}
If you're using the IPTables firewall, you will need to add the following lines to allow DHCP and TFTP traffic directed at the server.
/etc/sysconfig/iptables :
-A INPUT -m state -m tcp --state NEW --dports 67,68 -j ACCEPT
-A INPUT -m state -m udp --state NEW --dports 67,68 -j ACCEPT
-A INPUT -m state -m tcp --state NEW --dport 69 -j ACCEPT
This is how I structured my filesystem. You may move the root tftpboot directory wherever you like, but the substructure must remain the same.
Filesystem structure:
/tftpboot
|-- menu.c32
|-- pxelinux.0
|-- pxelinux.cfg/
| -- default
You will need to copy both pxelinux.0 and menu.c32 from /usr/share/syslinux into this directory for PXE to boot into the menu successfully.
Within /tftpboot/pxelinux.cfg/default , the bare minimum must contain the following lines:
DEFAULT menu
PROMPT 0
MENU TITLE PXEBoot Server. Use at own risk.
TIMEOUT 200
TOTALTIMEOUT 6000
ONTIMEOUT local
LABEL local
MENU LABEL (local)
MENU DEFAULT
LOCALBOOT 0
MENU end
I have found it easier to simply disable SELinux on my PXE server boxes if only to remove needless hassle.
Follow the following links for instructions on how to add individual boot options.