原理部分借鉴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 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/images/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文件,寻找故障原因。
本文出自 “fenghao.cn's Soft..” 博客,谢绝转载!