PXE Server Setup
Contents
1. Introduction
1.1. About
This document intends to describe the process of extending an existing CentOS system to support PXE booting of other machines. It includes a simple DHCPd configuration. When complete, a system configured for booting from the network using PXE should be able to get needed files.
1.2. Prerequisites
- A working CentOS system with DHCPd already working.
CentOS 5 Documentation Deployment Guide Chapter 20. Dynamic Host Configuration Protocol (DHCP)
- Single segment network. A multi-segment network is more complex to setup and is beyond the scope of this document.
2. TFTP Server Setup
TFTP (Wikipedia:Trivial File Transfer Protocol) is a simple way to transfer small amounts of semi-public data, like boot images, without authentication.
2.1. Install TFTP
yum install tftp-server
2.2. Enable TFTP
Edit /etc/xinetd.d/tftp and change disable to 'no'.
disable = no
2.3. Restart xinetd
xinetd handles TFTP connection attempts. It reads configuration files when starting.
service xinetd restart
3. Setup Boot images
For each system combination, there are going to be several files required to boot.
3.1. Create Image Directories
Using a directory to segregate the OS boot images keeps /tftpboot/ clean and might make it easier to find things later. Some would use the plural images while others would use the singular image.
To maintain original file names, a directory for each combination of system (OS, arch and release) is recommended. The option -p creates any missing parent directories. The order isn't necessarily important. Some would argue $ARCH is more significant, others would argue for $RELEASE.
mkdir -p /tftpboot/images/centos/i386/3.0 mkdir -p /tftpboot/images/centos/i386/3.1 mkdir -p /tftpboot/images/centos/x86_64/3.0 mkdir -p /tftpboot/images/centos/x86_64/3.1 mkdir -p /tftpboot/images/centos/i386/4.0 mkdir -p /tftpboot/images/centos/i386/4.1 mkdir -p /tftpboot/images/centos/x86_64/4.0 mkdir -p /tftpboot/images/centos/x86_64/4.1 mkdir -p /tftpboot/images/centos/i386/5.0 mkdir -p /tftpboot/images/centos/i386/5.1 mkdir -p /tftpboot/images/centos/x86_64/5.0 mkdir -p /tftpboot/images/centos/x86_64/5.1
or
OS="centos" for RELEASE in "3.0" "3.1" "4.0" "4.1" "5.0" "5.1" ; do for ARCH in i386 x86_64 ; do mkdir -p /tftpboot/image/${OS}/${RELEASE}/${ARCH} done done
For a Xen VM, it could be ...
OS="centos" RELEASE="5.3" ARCH="i386-xen" mkdir -p /tftpboot/image/${OS}/${RELEASE}/${ARCH}
3.2. Copy CentOS Boot Files
For each "Release" and "ARCH", copy vmlinuz and initrd.img from /images/pxeboot/ on "disc 1" of that $RELEASE/$ARCH to /tftpboot/images/centos/$ARCH/$RELEASE. The Xen boot files are in /images/xen.
4. DHCPd
DHCP (Wikipedia:Dynamic Host Configuration Protocol) is used to tell the machines on the network what their address is and provides information about how to interact with other machines.
4.1. Configure DHCPd
Add this to your existing or new /etc/dhcpd.conf.
Note: xxx.xxx.xxx.xxx is the IP address of your PXE server
allow booting; allow bootp; option option-128 code 128 = string; option option-129 code 129 = text; next-server xxx.xxx.xxx.xxx; filename "/pxelinux.0";
4.2. Restart DHCPd
service dhcpd restart
5. Menus
Syslinux (The Syslinux Project) is a bootloader. It can be used on CD/DVD's, PXE boots, DOS FAT partitions and others to provide boot assistance, including menus.
5.1. Install Syslinux
The version of syslinux that is installed as part of the base system is out-dated. There is a newer version on RPMForge. Assuming that repository is available, installing the updated version of syslinux is as easy as:
yum install syslinux
5.2. Copy Needed Files
A simple setup would be to copy syslinux files to /tftpboot/
cp /usr/lib/syslinux/pxelinux.0 /tftpboot cp /usr/lib/syslinux/menu.c32 /tftpboot cp /usr/lib/syslinux/memdisk /tftpboot cp /usr/lib/syslinux/mboot.c32 /tftpboot cp /usr/lib/syslinux/chain.c32 /tftpboot
If the intent is to serve other things through TFTP, you could put the modules into a subdirectory to keep /tftpboot/ relatively clean. Including memtest could allow for testing the memory in a machine easily.
cp /usr/lib/syslinux/pxelinux.0 /tftpboot/ mkdir /tftpboot/pxe-mod cp /usr/lib/syslinux/menu.c32 /tftpboot/pxe-mod/ cp /usr/lib/syslinux/memdisk /tftpboot/pxe-mod/ cp /usr/lib/syslinux/mboot.c32 /tftpboot/pxe-mod/ cp /usr/lib/syslinux/chain.c32 /tftpboot/pxe-mod/ cp /usr/lib/syslinux/memtest /tftpboot/pxe-mod/
Just remember that if you put the modules in a subdirectory, any place you refer to them in the future would include that directory. I.E. instead of menu.c32, use pxe-mod/menu.c32.
5.3. Create Directory for PXE menus
PXELinux expects to find its configuration files in a subdirectory, pxelinux.cfg.
mkdir /tftpboot/pxelinux.cfg
5.4. Create Menu
When booting, PXELinux looks for a series of files, but falls back to pxelinux.cfg/default. A very simple default file could be.
DEFAULT linux PROMPT 100 LABEL linux KERNEL images/centos/5.3/i386/vmlinuz APPEND initrd=images/centos/5.3/i386/initrd.img
For more information about setting up PXE Menus, see Setup simple or multilevel PXE Menus
For more information about kickstart files and setting up automated installations, see CentOS 5 Documentation Installation Guide Advanced Installation and Deployment