图 PXE API架构图。(图片来源:PXE Specification Version 2.1)
上图说明: 当BIOS把PXE Client载入记忆体,此时便具有DHCP Client及TFTP Client的能力。
PXE Client具备DHCP Client能力,可以透过DHCP Server来取得IP位址。
PXE Client具备TFTP Client能力”,可通过TFTP来下载kernel image等文件。
上图启动流程说明如下:
注意: 在NBP执行初始化后,NBP会按照自己默认的方式从TFTP SERVER中下载其他所需的配置文件.
这个时候 PXE 启动流程已经完成了,剩下的工作都是有NBP来执行完成的.
例如: pxelinux.0(NBP) 他会下载 default 配置文件,来显示菜单,根据需要启动不同的kernel image.
如果是RIS(window安装)的NBP,会启动 Windows boot loader 来执行安装部署widows任务.
以下配置和测试 都是在 Centos5 上完成的,其他系统请酌情参考!
在PXE引导过程中,PXE Client通过DHCP Server 获取ip地址,NBP文件名称,然后从TFTP SERVER 下载NBP文件并在客户端执行,从而启动计算机。
[root@linux]# cat /etc/dhcpd.conf注意:在 /etc/dhcpd.conf 配置文件中 filename "pxelinux.0"; 文件目录是相对于 tftp 的根目录(默认是 /tftpboot),
ddns-update-style interim;
allow booting;#定义能够PXE启动
allow bootp;#定义支持bootp
next-server 192.168.0.1; #TFTP Server的IP地址
filename "pxelinux.0";#bootstrap 文件(NBP)
default-lease-time 1800;
max-lease-time 7200;
ping-check true;
option domain-name-servers 192.168.0.1;
subnet 192.168.0.0 netmask 255.255.255.0
{
range 192.168.0.128 192.168.0.220;
option routers 192.168.0.1;
option broadcast-address 192.168.0.255;
}
[root@linux]# /etc/init.d/dhcpd start
启动 dhcpd: [确定]
[root@linux]# chkconfig --level 35 dhcpd on
在PXE引导过程中,PXE Client 使用TFTP协议从TFTP服务器下载bootstrap文件并执行.
[root@linux]# cat /etc/xinetd.d/tftp注意:TFTP服务器的根目录是 /tftpboot,配置完成后重启xinetd服务,使TFTP服务器生效.
# default: off
# description: The tftp server serves files using the trivial file transfer /
# protocol. The tftp protocol is often used to boot diskless /
# workstations, download configuration files to network-aware printers, /
# and to start the installation process for some operating systems.
# default: off
# description: The tftp server serves files using the trivial file transfer /
#protocol. The tftp protocol is often used to boot diskless /
#workstations, download configuration files to network-aware printers, /
#and to start the installation process for some operating systems.
service tftp
{
socket_type= dgram
protocol= udp
wait= yes
user= root
server= /usr/sbin/in.tftpd
server_args= -s /tftpboot
disable= no
per_source= 11
cps= 100 2
flags= IPv4
}
[root@linux]# /etc/init.d/xinetd restart
[root@linux]# rpm -ql syslinux | grep "pxelinux.0"
/usr/lib/syslinux/pxelinux.0
[root@linux]# cp /usr/lib/syslinux/pxelinux.0 /tftpboot/
[root@linux]# mkdir /tftpboot/pxelinux.cfg
[root@linux]# cat /tftpboot/pxelinux.cfg/default注意事项: 默认 pxelinux.0 和 pxelinux.cfg 一定要在同一个目录下
default linux# 默认启动的是 'label linux' 中标记的启动内核
prompt 1 # 显示 'boot: ' 提示符
timeout 60 # 等待超时时间,单位为 1/10 秒,超时后自动启动 默认指定的label
display boot.msg# 显示boot.msg的内容,文件路径是相对tftp server 的根目录(默认 /tftpboot),所以boot.msg文件绝对路径在 /tftpboot/boot.msg .
F1 boot.msg # 按下'F1' 键后显示的文件
F2 options.msg
F3 general.msg
F4 param.msg
F5 rescue.msg
label 1# 'label' 指定你在 'boot:' 提示符下输入的关键字。
kernel linux/rh44-x86-32/vmlinuz
append initrd=linux/rh44-x86-32/initrd.img ramdisk_size=8192 ks=http://install.test.com/conf/ks_module.cfg ksdevice=link
label 2
kernel linux/rh44-x86-64/vmlinuz
append initrd=linux/rh44-x86-64/initrd.img ramdisk_size=8192 ks=http://install.test.com/conf/ks_module.cfg ksdevice=link
label 3
kernel linux/rh46-x86-64/vmlinuz
append initrd=linux/rh46-x86-64/initrd.img ramdisk_size=8192 ks=http://install.test.com/conf/ks_module.cfg ksdevice=link
label 4
kernel linux/rh46-x86-32/vmlinuz
append initrd=linux/rh46-x86-32/initrd.img ramdisk_size=8192 ks=http://install.test.com/conf/ks_module.cfg ksdevice=link
label 5
kernel image/linux/rh38-x86-32/vmlinuz
append initrd=image/linux/rh38-x86-32/initrd.img ramdisk_size=8192 ks=http://install.test.com/conf/ks_module.cfg ksdevice=link
label 6
kernel linux/rh38-x86-64/vmlinuz
append initrd=linux/rh38-x86-64/initrd.img ramdisk_size=8192 ks=http://install.test.com/conf/ks_module.cfg ksdevice=link
由于多个客户端可以从一个PXE服务器引导,PXE引导映像使用了一个复杂的配置文件搜索方式来查找针对客户机的配置文件.
假设 客户端服务器的网卡的MAC地址为 88:99:AA:BB:CC:DD ,对应的IP地址为192.168.1.195,那么客户端的pxelinux.0 程序 搜索顺序如下:
总体来说,pxelinux.0 搜索的文件的顺序是(可以通过tcpdum得到结果):
/tftpboot/pxelinux.cfg/01-88-99-aa-bb-cc-dd
/tftpboot/pxelinux.cfg/C0A801C3
/tftpboot/pxelinux.cfg/C0A801C
/tftpboot/pxelinux.cfg/C0A801
/tftpboot/pxelinux.cfg/C0A80
/tftpboot/pxelinux.cfg/C0A8
/tftpboot/pxelinux.cfg/C0A
/tftpboot/pxelinux.cfg/C0
/tftpboot/pxelinux.cfg/C
/tftpboot/pxelinux.cfg/default
5. pxe的ks.cfg文件----备忘
# Kickstart file automatically generated by anaconda.
install
url --url http://192.168.1.100/CentOS4.5
lang en_US
langsupport --default=en_US.UTF-8 zh_CN.UTF-8 en_US.UTF-8
keyboard us
mouse
text
#xconfig --card "ATI ES1000" --videoram 16384 --hsync 28-64 --vsync 48-78 --resolution 800x600 --depth 16
network --device eth0 --bootproto static --ip 192.168.1.200 --netmask 255.255.255.0 --gateway=192.168.1.1 --hostname=test.insenz.com
rootpw --iscrypted $1$u//jMrgX$dW9ytxBLCyaafVKvwOcnF0
firewall --disabled
selinux --disabled
authconfig --enableshadow --enablemd5
timezone Asia/Shanghai
bootloader --location=mbr
zerombr yes
clearpart --linux --initlabel
part /boot --fstype ext3 --size=150 --ondisk=sda --asprimary
part swap --size=4096 --ondisk=sda
part / --size=20480 --fstype ext3 --ondisk=sda
part /home --fstype ext3 --size=1 --grow --ondisk=sda
part /data --fstype ext3 --size=1 --grow --ondisk=sdb
skipx
%packages --resolvedeps
@ editors
@ emacs
@ system-tools
@ x-software-development
@ dialup
@ chinese-support
@ development-tools
-ckermit
kernel-devel
kernel-smp-devel
-bluez-pin
-gamin-devel
-OpenIPMI-tools
vlock
iptraf
lslk
e2fsprogs
-xdelta
-zsh
sysstat
kernel-smp
grub
-iiimf-libs-devel
%post