Packages required: tftp, dhcp & syslinux
1. Install the required packages on the server. Syslinux is usually by default installed on the server.
#yum install tftp-server dhcp syslinux
2. Edit /etc/xinet.d/tftp file to run the tftp service under xinetd daemon. Modify the following lines in the conf file as follows:
disable = no
server_args = -s /tftpboot
Make sure the both the lines should be exactly like this, because we are going to use the /tftpboot dir as default root-pxe dir. If the path given here in server-args is different from our pxe root dir, then we'll normally get "PXE-T01: File not found." error. Save the above file after making the changes.
3. Restart the xinetd services to start the tftp service and make it executable on startup.
#service xinetd start
#chkconfig xinetd on
4. Copy the required files from the Syslinux dir to /tftpboot dir.
#cp /usr/lib/syslinux/{pxelinux.0,menu.c32,mboot.c32,memdisk,chain.c32} /tftpboot/
5. Create PXE Menu directory.
# mkdir /tftpboot/pxelinux.cfg
6. Create dir for centos image in tftpboot dir. Suppose you have centos 5.5 i386 and centos 5.5 x86_64 linux iamges, then create dir as follows.
# mkdir -p /tftpboot/images/centos/i386/5.5
# mkdir -p /tftpboot/images/centos/x86_64/5.5
7. mount the linux iso image that you have to /mnt and copy initrd.img and vmlinuz files from the /mnt/images/pxeboot dir to the respective tftpboot image paths that you have created.
# mount -o loop /home/centos-5.5.i386.iso /mnt
# cp /mnt/images/pxeboot/{ initrd.img, vmlinuz} /tftpboot/images/centos/i386/5.5
# umount /mnt
# mount -o loop /home/centos-5.5.x86_64.iso /mnt
# cp /mnt/images/pxeboot/{ initrd.img, vmlinuz} /tftpboot/images/centos/x86_64/5.5
# umount /mnt
8. Edit dhcpd.conf file and add the following lines to the configuration. Use your pxe server ip in place of the 000.000.000.000.
allow bootp;
allow booting;
filename "pxelinux.0";
next-server 000.000.000.000;
option option-128 code 128 = string;
option option-129 code 129 = text;
9. Create a file /tftpboot/pxelinux.cfg/default for default menu and add the following.
default menu.c32
prompt 0
timeout 300
ONTIMEOUT local
MENU TITLE PXE MENU
LABEL Centos 5.5 x86
MENU LABEL Centos 5.5 x86
KERNEL images/centos/i386/5.5/vmlinuz
APPEND ks initrd=image/centos/i386/5.5/initrd.img ramdisk_size=100000 ksdevice=eth0 ip=dhcp url --url http://path to ks file
LABEL Centos 5.5 x86_64
MENU LABEL Centos 5.5 x86_64
KERNEL images/centos/x86_64/5.5/vmlinuz
APPEND ks initrd=image/centos/x86_64/5.5/initrd.img ramdisk_size=100000 ksdevice=eth0 ip=dhcp url --url http://path to ks file
10. Restart the dhcpd server and restart the xinetd service.
#service dhcpd restart
#service xinetd restart
You can add more images to your pxe configuration later on in the similar way.