1. PXE原理概述
PXE(preboot execute environment)是Intel公司开发的技术,目前普遍应用于服务器中。PXE通过网络启动操作系统,在启动流程如下:
- 服务器发送dhcp请求
- dhcp-server 响应dhcp请求,分配ip地址,并且返回next-server(tftp服务器地址)和filename(一般为pxelinux.0)
- 服务器获得ip地址,然后通过tftp协议从next-server下载pxelinux.0
- pxelinux.0读取tftp-server上pxelinux.cfg目录下的配置
- pxelinux.0展示界面,根据用户输入的选项进行安装或者启动
dhcp-server上/etc/dhcpd.conf的配置:
next-server 10.127.201.199;
filename pxelinux.0;
tftp-server一般通过xinet.d服务启动,/etc/xinetd.d/tftp配置如下:
service tftp
{
socket_type = dgram
protocol = udp
wait = yes
user = root
server = /usr/sbin/in.tftpd
server_args = -s /var/lib/tftpboot
disable = no
per_source = 11
cps = 100 2
flags = IPv4
}
/var/lib/tftpboot 一般包含文件:
- pxelinux.cfg目录,文件读取顺序为服务器MAC地址,服务器dhcp获取的ip和网段,default文件,即如下顺序:
- pxelinux.cfg/01-MACADDRESS
- pxelinux.cfg/C0A8000F
- pxelinux.cfg/C0A8000
- pxelinux.cfg/C0A800
- pxelinux.cfg/C0A80
- pxelinux.cfg/C0A8
- pxelinux.cfg/C0A
- pxelinux.cfg/C0
- pxelinux.cfg/C
- pxelinux.cfg/default
- pxelinux.0
- 操作系统kernel和initrd文件
2. IPXE 原理概述
PXE有诸多不变之处,IPXE是对PXE的修改,对PXE做了更好的扩展,支持获取服务器上更多的信息,如序列号等等。但是由于物理机目前只支持PXE的方式,所以首先要将PXE启动转换为IPXE启动,才能使用IPXE的便利之处。IPXE流程如下:
- 服务器 第一次 发送dhcp请求
- dhcp-server 响应dhcp请求,分配ip地址,并且返回next-server(tftp服务器地址)和filename(一般为undionly.kpxe)
- 服务器通过tftp协议下载unidonly.kpxe文件
- undionly.kpxe 第二次 发送dhcp请求
- dhcp-server 响应dhcp请求,分配ip地址,并且返回一个URL
- 服务器访问URL,并将硬件信息(如sn)作为参数传递,然后获取根据sn生成的ipxe脚本
- 服务器执行ipxe脚本,通过http协议下载操作系统kernel和initrd
- 服务器利用kernel和initrd正常引导
dhcp-server上/etc/dhcpd.conf的配置:
# 如果是ipxe发送的dhcp请求,表示服务器是在第二次dhcp请求过程中,返回URL,要求服务器将sn作为参数来访问此URL
if exists user-class and ( option user-class = "iPXE" ) {
filename "http://10.127.201.97/cgi-bin/ipxe.py?sn=${serial}";
}
# 如果不是ipxe发送的dhcp请求,表示服务器是在第一次dhcp请求过程中,返回unidonly.kpxe 文件
else {
filename "undionly.kpxe";
}
ipxe.py接收到服务器sn,然后返回对应的ipxe脚本信息,ipxe脚本信息一般如下:
#!ipxe
set net0/ip IPADDRESS
set net0/netmask 255.255.255.0
set net0/gateway GATEWAY
set dns DNSSERVER
:START
menu Please choose an operating system to boot
item --gap -- ------------------------- OS Installation --------------------------------
item OPERATIONSYSTEM OPERATIONSYSTEM
choose --default OPERATIONSYSTEM --timeout 5000 os
goto ${os}
:OPERATIONSYSTEM
echo Starting install for OPERATIONSYSTEM
set baseurl http://ks.vip.split.hdb.com/base/OPERATIONSYSTEM/images/pxeboot
kernel ${baseurl}/vmlinuz
initrd ${baseurl}/initrd.img
imgargs vmlinuz text ksdevice=link ramdisk_size=8192 biosdevname=0 sshd=1 ks=http://ks.vip.split.hdb.com/ksconf/OPERATIONSYSTEM.cfg noipv6 ip=IPADDRESS netmask=255.255.255.0 gateway=GATEWAY dns=DNSSERVER
boot || goto FAILED
goto START
没有评论:
发表评论