How to Setup PXE boot in linux
====================================
This document how to set up pxe boot in linux. This assumes that you are using RHEL 5.2 or Centos5.2
0) Following packages need to be installed for PXE
*tftp-server
*dhcpd
*syslinux
*nfs
#yum install tftp-server dhcp syslinux
1) Before configuring PXE you should configure your locat mini network through dhcp ( Lot of doc available to configure dhcp )
2) Activate tftp in xinetd. changed disable=yes to disable=no in /etc/xinetd.d/tftp file. Then restart xinetd daemon.
3) Now we need to setup the pxe environment. You should have linux in cd format.On the first CD or in DVD you can find a folder 'isolinux'.In that dir you will find two files vmlinuz and initrd.img. These are the kernel & initrd.img that the RH/FC bootable CDs use to get the installer (anaconda) booted for performing the installation . Copy both of those files into /tftpboot and make sure that they are world readable .
Next, you need the actual pxe boot linux kernel (what is actually run immediately after your PXE boot client box gets a DHCP lease). In this case, that file is pxelinux.0, and is part of the syslinux RPM. you can find it at "/usr/lib/syslinux/pxelinux.0" . Copy that file into /tftpboot and make sure that it is world readable.
4) Next we need to configure pxelinux. First create the directory /tftpboot/pxelinux.cfg (and make it world readable). Inside that directory you need to create a number of zero size files (use touch):
Ex: My IP is 11.1.0.0/16
So i have converted my ip to hexadecimal . Follow this links to convert that
http://www.kloth.net/services/iplocate.php
Then create files using touch
0B0200
0B020
0B02
0B0
0B
0
01-04-4B-80-80-80-03
First 8 Digit hexadecimal . You can use first 6 digit and make the empty file.
The last entry is the MAC address of your PXE boot client's NIC (with dashes substituted for the colons), with '01' pre-pended. The "01" at the front represents a hardware type of Ethernet, so pxelinux.0 see's the configuration string as an IP address.
5) Now create the default pxelinux configuration inside the new file
#vim /tftpboot/pxelinux.cfg/default
prompt 1
default linux
timeout 100
label linux
kernel vmlinuz
append initrd=initrd.img noapic acpi=off ks=nfs:11.1.0.5:/u1/Centos/ks.cfg
(Lot of doc available to create ks.cfg in linux)
9) Sample ks.cfg file
#vim /u1/Centos/ks.cfg
# Kickstart file automatically generated by anaconda.
install
nfs --server=11.1.0.5 --dir=/u1/Centos
lang en_US.UTF-8
keyboard us
text
network --device eth0 --bootproto dhcp
rootpw --iscrypted $1$nqP5r3zm$82An6lClteT0q4n4Jb3BR.
firewall --disabled
authconfig --enableshadow --enablemd5
selinux --disabled
timezone --utc Asia/Calcutta
bootloader --location=mbr --driveorder=sda
# The following is the partition information you requested
# Note that any partitions you deleted are not expressed
# here so unless you clear all partitions first, this is
# not guaranteed to work
clearpart --all --drives=sda
part /boot --fstype ext3 --size=100 --ondisk=sda
part pv.6 --size=0 --grow --ondisk=sda
volgroup VolGroup00 --pesize=32768 pv.6
logvol swap --fstype swap --name=LogVol01 --vgname=VolGroup00 --size=256 --grow --maxsize=512
logvol / --fstype ext3 --name=LogVol00 --vgname=VolGroup00 --size=1024 --grow
reboot
%packages
@development-libs
@editors
@text-internet
@dialup
@core
@base
@web-server
@admin-tools
@development-tools
kexec-tools
device-mapper-multipath
imake
-sysreport
6) Now you need to put the full contents of your Linux distro (all CDs) somewhere on disk. I put it under /u1/Centos/i386 folder.
7)Then we have to configure NFS
8) Lets see PXE by NFS
activate NFS in your system
#cat /etc/exports
9) Now you can add the mac address of the machine which you are going to install pxe installation like below
10) Need to make some changes in dhcpd file
Add two lines for Boot from lan in dhcpd.conf file
allow bootp;
allow booting;
10) See the sample dhcpd.conf file
[root@node1 ~]# cat /etc/dhcpd.conf
ddns-update-style interim;
ignore client-updates;
allow bootp;
allow booting;
subnet 11.1.0.0 netmask 255.255.0.0 {
# --- default gateway
option routers 11.1.0.5;
option subnet-mask 255.255.0.0;
option nis-domain "karthik.sk";
option domain-name "domain.org";
option domain-name-servers 11.1.0.5, 11.1.0.2;
option time-offset -18000; # Eastern Standard Time
# option ntp-servers 192.168.1.1;
# option netbios-name-servers 192.168.1.1;
# --- Selects point-to-point node (default is hybrid). Don't change this unless
# -- you understand Netbios very well
# option netbios-node-type 2;
range dynamic-bootp 11.1.1.10 11.1.1.200;
default-lease-time 21600;
max-lease-time 43200;
# we want the nameserver to appear at a fixed address
host ns {
next-server marvin.redhat.com;
hardware ethernet 12:34:56:78:AB:CD;
fixed-address 207.175.42.254;
}
}
# Group the PXE bootable hosts together
group {
# PXE-specific configuration directives...
next-server 11.1.0.5;
# You need an entry like this for every host
# unless you're using dynamic addresses
host monitoring.karthik.sk {
hardware ethernet 00:0c:29:ab:40:6a;
#fixed-address 11.1.0.6;
filename "pxelinux.0";
}
}