原理部分借鉴http://baidu.blog.51cto.com/71938/158675
 
第一步:PXE Client向DHCP发送请求
     首先,将支持 PXE 的网络接口卡( NIC )的客户端的 BIOS 设置成为网络启动,通过 PXE BootROM (自启动芯片)会以 UDP (简单用户数据报协议)发送一个广播请求,向网络中的 DHCP 服务器索取 IP 地址等信息。

   第二步:DHCP服务器提供信息

         DHCP 服务器收到客户端的请求,验证是否来至合法的 PXE Client 的请求,验证通过它将给客户端一个“提供”响应,这个“提供”响应中包含了为客户端分配的 IP 地址、 pxelinux 启动程序( TFTP )位置,以及配置文件所在位置。

   第三步:PXE客户端请求下载启动文件

     客户端收到服务器的“回应”后,会回应一个帧,以请求传送启动所需文件。这些启动文件包括: pxelinux.0 pxelinux.cfg/default vmlinuz initrd.img 等文件。

   第四步:Boot Server响应客户端请求并传送文件

     当服务器收到客户端的请求后,他们之间之后将有更多的信息在客户端与服务器之间作应答 , 用以决定启动参数。 BootROM TFTP 通讯协议从 Boot Server 下载启动安装程序所必须的文件( pxelinux.0 pxelinux.cfg/default )。 default 文件下载完成后,会根据该文件中定义的引导顺序,启动 Linux 安装程序的引导内核。

   第五步:请求下载自动应答文件

     客户端通过 pxelinux.cfg/default 文件成功的引导 Linux 安装内核后,安装程序首先必须确定你通过什么安装介质来安装linux,如果是通过网络安装(NFS, FTP, HTTP),则会在这个时候初始化网络,并定位安装源位置。或许你会说,刚才PXE不是已经获取过IP地址了吗?为什么现在还需要一次?这是由于PXE获取的是安装用的内核以及安装程序等,而安装程序要获取的是安装系统所需的二进制包以及配置文件。由于它们需要的内容不同造成PXE模块和安装程序是相对独立的,PXE的网络配置并不能传递给安装程序。从而进行两次获取IP地址过程。
     接着会读取该文件中指定的自动应答文件 ks.cfg 所在位置,根据该位置请求下载该文件。

   第六步:客户端安装操作系统

     将 ks.cfg 文件下载回来后,通过该文件找到 OS Server ,并按照该文件的配置请求下载安装过程需要的软件包。
         OS Server 和客户端建立连接后,将开始传输软件包,客户端将开始安装操作系统。安装完成后,将提示重新引导计算机。这个时候注意,在重新引导的过程中一定要将 BIOS 修改回从硬盘启动,不然的话又会重复的自动安装操作系统。
在上面介绍中 PXE client 是需要安装 Linux 的计算机, TFTP Server DHCP Server NFS Server 运行在另外一台 Linux Server 上。 Bootstrap 文件、配置文件、 Linux 内核都放置在 Linux Server TFTP 服务器的根目录下。而 Linux 根文件系统存放于 NFS Server 的共享目录中。
PXE client 在工作过程中,需要三个二进制文件: bootstrap Linux 内核和 Linux 根文件系统。 Bootstrap 文件是可执行程序,它向用户提供简单的控制界面,并根据用户的选择,下载合适的 Linux 内核以及 Linux 根文件系统。
一、环境搭建
1、一台server担任启动服务器和安装服务器
2、一台client,需要能从网卡启动
3、两台机器在同一局域网
4、服务器要有安装所需的所有包
5、我们用192.168.0.0/24网段来试验,我的服务器IP是:192.168.0.2/24
6、服务器系统RHEL5.1,client系统RHEL5.1
 
二、具体实施,server端配置
1、安装自己的yum服务器(必须要做)。不会的请参考我的blog:
[url]http://linuxguest.blog.51cto.com/195664/109496[/url]   yum服务器架设。
2、使用自己的yum服务器安装dhcp服务
#yum install "dhcp*"
安装成功以后就修改配置文件DHCP的配置文件如下,我给大家解释下重点
=======================================
#配置文件内代表注释
#定义所支持的DNS动态更新类型(必选)
ddns-update-style none;
#定义作用域(或IP子网)
subnet 192.168.0.0 netmask 255.255.255.0 {
 
########################################
#在用#表示的条线之间的意思是:定义一些值,,指定何时使用他们。
#例如,假定要管理两种客户端类,使用选项空间定义在前面的例子中,现在能够依据不同的virtual值
向客户端发送不同的选项值,
#如下:当client端的mac前三个满足00:16:3e 那么,client就会获取到
192.168.0.61-192.168.0.80,否则就会获取192.168.0.1#-192.168.0.20
class "virtual" {
 match if substring (hardware, 1, 3) = 00:16:3e;
}
 option routers 192.168.0.2;          #router的ip地址
 option subnet-mask 255.255.255.0;    #subnet-mask 地址  
 option domain-name "linux.com";      #域名根据你自己的情况定
 option domain-name-servers 192.168.0.2;   #域名服务器也就是DNS服务器地址
 default-lease-time 21600;   
 max-lease-time 43200;
 # Assign IPs 61-80 to Xen domUs
        pool {
         allow members of "virtual";
         range 192.168.0.61 192.168.0.80;
 }
 # Assign IPs 1-20 for cla***oom systems unless
 # static IPs are assigned below
 pool {
  deny members of "virtual";
  range  192.168.0.1 192.168.0.20;
 }
#################################################################

 filename "/kickstart/ks.cfg";   #指定kickstart配置文件的位置
 next-server 192.168.0.2;        #指定下以个服务器,也就是tftp服务器。   

# host定义某个mac得到某个IP,一般没有启用
#
# host station1 {
#  hardware ethernet 00:a0:cc:3c:80:c5;
#  fixed-address 192.168.0.1;
# }
# host station2 {
#  hardware ethernet 00:A0:CC:39:AF:B0;
#  fixed-address 192.168.0.2;
# }
}
#下面就是PXE的参数了,很重要
option space PXE;
class "PXE" {
 match if substring(option vendor-class-identifier, 0, 9) = "PXEClient";
  option vendor-encapsulated-options 01:04:00:00:00:00:ff;
   option boot-size 0x1;
   filename "pxelinux.0";
   option tftp-server-name "192.168.0.2"; #这个IP地址一定要修改成你的
TFTP的IP地址
   option vendor-class-identifier "PXEClient";
   vendor-option-space PXE;
}
#我会给出以份DHCP配置文件,你只要修改我红色标记出来的地方符合你自己的环境。
 
==================================
3、安装tftp服务
#yum install "tftp*"
安装后会生成/tftpboot 这个目录现在我们往这个目录加入启动需要的一些文件
拷贝pxeboot目录下的所有文件到tftpboot目录主要有这四个文件:
initrd.img,README,TRANS.TBL,vmlinuz。
#cp  /var/ftp/pub/p_w_picpaths/pxeboot/*   /tftpboot/
删除TRANS.TBL,这个文件没用
#rm -f /tftpboot/TRANS.TBL
查找pxelinux.0这个文件拷贝到tftpboot目录
#updatedb
#locate pxelinux.0
#cp  /usr/lib/syslinux/pxelinux.0  ./
在tftpboot目录内创建pxelinux.cfg目录。然后把default文件放进去
#mkdir pxelinux.cfg
default文件的内容

default linux
label linux
  kernel vmlinuz
  append ksdevice=eth0 load_ramdisk=1 initrd=initrd.img network ks noipv6
不建议你修改此文件,这样TFTP,的相关设置就完成了
 
4、制造kickstart文件,我知道有三种方法
   
     方法1、 每当你安装好一台Red Hat Linux机器,Red Hat Linux 安装程序都会创建一个
kickstart 配置文件,记录你的真实安装配置。如果你希望实现和某系统类似的安装,可以基于该系统
的kickstart配置文件来生成你自己的kickstart配置文件。(生成的文件名字叫anaconda-ks.cfg放在
root的家目录里)
    
    方法2、Red Hat Linux提供了一个图形化的kickstart配置工具。在任何一个安装好的Red Hat
Linux系统上运行该工具,就可以很容易地创建你自己的kickstart配置文件。kickstart配置工具命令为
redhat-config-kickstart(RHEL3)或system-config-kickstart(RHEL4,RHEL5)
    
   方法3、阅读kickstart配置文件的手册。用任何一个文本编辑器都可以创建你自己的kickstart配置
文件。
现在我们使用方法2来创建以个kickstart文件
#yum install "*kickstart*"  安装工具,如果已经安装就不用了
#system-config-kickstart
    进入就是一个图形界面,大家按照自己的要求在程序里面选择,注意分区那页。你最好先把所有分
区删除,然后自己规划分区,规划的分区要比硬盘小哦。还有installation Method要选择nfs,在下面
填写NFS Server和NFS Directory。还有防火墙一定要先关闭。最后就是选择安装包的时候一般都不能选择是灰色的。剩下的就需要我们自己DIY了。
     完成选择后,就选择左上角的File 图标,然后点击 save file。这样你的配置文件就会保存到当前目录。然后我们对这个文件DIY,DIY两个地方,一、由于KICKSTART工具没有提到序列号的问题,所以我们要定义下。在配置文件开始加入 key --skip 这个参数,独占一行。二、添加需要安装的包,这个时候我们就要用到刚才说的/root/anaconda-ks.cfg 文件了。打开这个文件,复制%packages行到
libsane-hpaio行之间的包到我们自己的kickstart文件的最后,复制的内容包括%packages和libsane-hpaio这两行。
     然后创建/kickstart目录,把这我们的kickstart文件放进去
#mkdir  /kickstart
#cp  ks.cfg  /kickstart/
我会把我的system-config-kickstart放在一目录内上传给大家。
 
5、用NFS共享kickstart文件和安装介质
#vim  /etc/export
加入这样两行
/kickstart   192.168.0.0/24(ro)
/var/ftp/pub/   192.168.0.0/24(ro)
 
6安装DNS服务器,为了让新安装的服务器可以有你期望的主机名。最好在正向解析里面使用$GENERATE 变量,可以批量做解析,减少工作量。不会的请具体参见我的BLOG
[url]http://linuxguest.blog.51cto.com/195664/108415[/url]
 
7、从新启动服务器
#chkconfig dhcpd .
#service dhcpd restart
 
#chkconfig tftp  .
#service xinetd restart
 
#chkconfig named .
#service named restart
 
#service portmap restart
#service nfs     restart
 
#service network restart
 
都完成以后,您的kickstart服务器就可以使用了。
clinet配置就简单了,只需要在bios里面把启动方式设置成网卡。这样就OK。当然也已用虚拟机来代替
。然后您就可以端把椅子坐到一边去喝茶,过20分钟基本就安装好,如果同时安装的量大,速度会变慢
,应为服务器的硬盘转速只有那么快,这是批量安装的瓶颈。ok,你赶快试试你的kickstart服务器吧。
 
kickstart服务器故障排除
1、关闭防火墙,系统自带的和IPTABLES都要关闭
2、 从网卡启动,获取不到IP地址检查你的DHCP服务器是否开机,使用#netstat  -tulnp | grep dhcpd ,来查看是否在监听67号端口

3、获取IP后,在TFTP那步卡住了。检查你的DHCP配置文件,next-server 是不是指的正确的tftp服务器。TFTP服务器是否开启,是否运
行正常。 可以在linux里面使用这个方法来测试
#tftp 您的服务器IP   登陆进入后
tftp>get pxelinux.0 
tftp>quit
查看当前目录是否有pxelinux.0这个文件,有的话,证明你的tftp服务器是正常的最后检查你的网络中是不是还有其他dhcp服务器
 
3、内核成功加载后,系统有完成自动安装,需要人工介入,那就证明你的kickstart脚本文件出问题了,需要重新生成以个,或者使用我给的,在里面修改下NFS的服务器的地址就可以用了。
 
4、监控服务器的/var/log/message文件,寻找故障原因。