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

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

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

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

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

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

     当服务器收到客户端的请求后,他们之间之后将有更多的信息在客户端与服务器之间作应答, 用以决定启动参数。BootROM TFTP 通讯协议从Boot Server下载启动安装程序所必须的文件(pxelinux.0pxelinux.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 ServerDHCP ServerNFS Server运行在另外一台Linux Server上。Bootstrap文件、配置文件、Linux内核都放置在Linux ServerTFTP服务器的根目录下。而Linux根文件系统存放于NFS Server的共享目录中。
PXE client在工作过程中,需要三个二进制文件:bootstrapLinux 内核和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 classroom 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
 
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文件,寻找故障原因。