Tuesday, September 29, 2009

How To Setup PXE Boot in Linux

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";

}

}