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.