I already wrote a little article, how to boot a FreeDos via PXE. Of course, you can boot Fedora (or CentOS) in like manner.
0. Setting up the dhcp server
Depending on what actual dhcp server implementation you are using (ISC dhcp etc.) ymwv here anyway. So instead of walking you through this this step-by-step, I suggest you have a look at the sylinux wiki or just ask google.
1. Installing packages
Well, this one is rather easy. Just pull the packages from your yum-repo:
yum install xinetd tftp-server syslinux
2. Configuring xinetd
Enabling xinetd (and tftp) is no big deal:
chkconfig xinetd on chkconfig tftp on
You may want to find out (or adjust) the tftp root path. Simply edit /etc/xinetd.d/tftp with your favourite editor and change the line that says server_args = -s /tftpboot. Make sure, the service is restarted after you changed something in the configuration file.
3. Setting up boot environment
This is the really beautiful part. Since the initial ramdisk and the kernel is different for every Fedora (even CentOS) release, I wrote a little script to automate this task:
#/bin/bash
# setupTftpboot
# common source and destination
CMNSRC=rsync://mirrors3.kernel.org/fedora/releases/12/Fedora/i386/os/isolinux/
#CMNSRC=rsync://mirrors3.kernel.org/centos/5.4/os/i386/isolinux/
CMNDST=$1
PXECFGDIR=pxelinux.cfg
PXECFGFILE=default
# options
RSYNCOPTS="-avh --progress --stats --exclude=isolinux.bin"
# syslinux
SYSLINUXSRC=http://www.kernel.org/pub/linux/utils/boot/syslinux/
SYSLINUXVER=syslinux-3.86
# files
WGET=/usr/bin/wget
MKDIR=/bin/mkdir
MV=/bin/mv
RSYNC=/usr/bin/rsync
function usage() {
echo "sh $0 <targetdir>"
}
if [ -z $CMNDST ]
then
usage
exit 0
fi
if [ ! -d $CMNDST ]
then
echo "Error $CMNDST does not exist"
exit 0
fi
$RSYNC $RSYNCOPTS $CMNSRC $CMNDST
if [ ! -d $CMNDST/$PXECFGDIR ]; then $MKDIR -p $CMNDST/$PXECFGDIR; fi
$MV $CMNDST/isolinux.cfg $CMNDST/$PXECFGDIR/$PXECFGFILE
$WGET -O - $SYSLINUXSRC/$SYSLINUXVER.tar.gz | tar xvz $SYSLINUXVER/core/pxelinux.0 -O>$CMNDST/pxelinux.0
The usage is quite self-explaining:
sh setupTftpboot <targetdir>
<targetdir> could be /var/lib/tftpboot (on Fedora > 9 (see Bugzilla)) or something like /var/lib/tftpboot/Fedora/12/ for a multi-distribution tftp setup.