PXE是Inter公司开发的最新技术,基于C/S模式,可以实现主机通过网络从远程服务器下载系统映像,并由此支持通过网络启动操作系统。具体的工作流程如下:将要安装的设备设置成PXE引导方式,启动后设备会向同一二层交换机下的DHCP服务器请求一个IP用作网络连接,再用TFTP协议请求下载软件启动包到本机内存执行,这个启动包可以被用来引导和安装服务器中的终端操作系统。
1. PXE服务器的搭建
1.1 环境搭建
每台设备出厂时,生产中心都会对设备做严格的测试,比如平台测试,拷机测试。测试时需要使用系统架构部提供的测试镜像来完成,整个测试流程是自动化的。当对大批量的设备做测试时,PXE服务可以帮助测试人员减少重复劳动,比如在每台设备上都插U盘来启动镜像。
PXE服务器搭建步骤如下:
- 首先,安装DHCP服务
#yum -y install dhcp
编辑配置文件:
#vim /etc/dhcp/dhcpd.conf
range为DHCP配置IP的范围,option routers是网关,next-server:定义引导服务器,即tftp服务器的引导文件和tftp服务器地址,可以和DHCP服务器在同一主机。Pxelinux.0后续会介绍。
启动DHCP服务
#service dhcpd start
- 之后配置TFTP
#yum -y install xinetd tftp-server tftp #chkconfig xinetd on #chkconfig tftp on #service xinetd start
配置TFTP:
vim /etc/xinetd.d/tftp
红框处改为”no”
另外需要关闭防火墙和selinux,重启服务生效
#service iptables stop # setenforce 0
- 准备启动需要的文件
首先需要安装syslinux
#yum -y install syslinux
Syslinux是是一个功能强大的引导加载程序,包括PXE所需要的bootloader。之后将bootstrap文件pxelinux.0,vmlinuz(Linux内核)和initrd.img(Linux根文件系统)拷贝到tftpboot下。由于测试镜像不需要安装,因此只需要上述三个文件。
#cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/
tftpboot路径在/etc/xinetd.d/tftp被设定
在/var/lib/tftpboot下创建pxelinux.cfg路径,在pxelinux.cfg路径下创建default文件,default文件相当于bootloader的配置文件。由于多个客户端可以从一个PXE服务器引导,PXE引导映像使用了一个复杂的配置文件搜索方式来查找针对客户机的配置文件。假设客户端服务器的网卡的MAC地址为88:99:AA:BB:CC:DD ,对应的IP地址为10.24.84.10,那么客户端的pxelinux.0 程序搜索顺序如下:
a) 首先以MAC地址为文件名匹配的配置文件,如果不存在,继续查找.
b) 其次以IP地址来查找.根据IP地址16进制命名的配置文件查找,从小范围到打大分为查找(子网掩码由小到大),如果不存在,继续查找.
最后尝试default文件
Default文件内容可以配置如下:
配置文件遵照syslinux.cfg的配置规则,文件中必须包括vmlinuz和initrd.img
配置项解释,推荐一个博客:https://blog.csdn.net/hansel/article/details/8725534
1.2 配置环境时遇到的坑
第一,配置完之后一定要关闭防火墙,或者设置对应的规则,确保DHCP分配的网段的IP数据包不会被防火墙拦截,否则会出现TFTP超时的现象
第二,确保二层网段内只有一台DHCP服务器,否则即便是分配到IP也无法进行下面的设置。
第三,DHCP服务器和TFTP服务器和client主机的物理位置不要太远,能在一个机房的话尽量在一起,这样可以大大提高引导启动的速率。
第四,default文件中指定的vmlinuz和initrd.img文件的路径都是相对于/var/lib/tftpboot路径的,而不是pxelinux.cfg
2. 验证
首先进入BIOS设置从PXE做引导,而不是本机的硬件设备。
之后计算机进入bootloader开始引导启动,可以看到,首先client会请求DHCP服务器一个IP地址,之后通过TFTP传输启动文件。打开initrd.img后,可进入测试镜像。