什么是PXE网络
PXE(preboot execute environment,预启动执行环境)是由Intel公司开发的技术,工作于Client/Server的网络模式,支持工作站通过网络从远端服务器下载映像,并由此支持通过网络启动操作系统,在启动过程中,终端要求服务器分配IP地址,再用TFTP(trivial file transfer protocol)或MTFTP(multicast trivial file transfer protocol)协议下载一个启动软件包到本机内存中执行,由这个启动软件包完成终端(客户端)基本软件设置,从而引导预先安装在服务器中的终端操作系统。PXE可以引导多种操作系统。PXE client集成在网卡ROM中,当计算机引导时,BIOS把PXE client调入内存执行,获取PXE server配置,显示菜单,根据用户选将远程操作系统下载到本机运行。PXE组件及过程的分析。- 部署
PXE需要哪些服务:DHCP服务,分配IP地址,定位引导程序DNS服务,为客户机分配主机名TFTP服务,提供引导程序下载HTTP服务(或ftp/nfs),提供yum安装源
- 客户机应具备的条件:
- 网卡
ROM必须支持PXE协议 - 主板支持网络启动
- 网卡
在CentOS上部署PXE服务器
-
软件需求
dhcpd: 动态分配IPxinetd: 对服务访问进行控制,这里主要控制tftptftp: 从服务器端下载pxelinux.0、default文件httpd: 在网络上提供安装源,也就是ISO镜像文件中的内容syslinux: 用于网络引导
~$ sudo yum install dhcp xinetd syslinux tftp-server httpd
-
配置
IP将服务器的
IP配置为192.168.199.254,让DHCP能够正常启动,TFTP,HTTP都是运行在这个IP上。~$ sudo ip addr add 192.168.0.1/24 brd + dev ensxx # ensxx是网卡名称
~$ ip addr show # 查看网卡ip -
配置
DHCP编辑
dhcp的配置文件/etc/dhcp/dhcpd.conf的内容:~$ sudo vi /etc/dhcp/dhcpd.conf
DHCP Server Configuration file.
see /usr/share/doc/dhcp*/dhcpd.conf.example
see dhcpd.conf(5) man page
1. 整体的环境设定
ddns-update-style none;
ignore client-updates;
default-lease-time 259200;
max-lease-time 518400;
option domain-name-servers 192.168.199.254;
上面是 DNS 的 IP 设定,这个设定值会修改客户端的 /etc/resolv.conf
2. 关于动态分配的 IP
subnet 192.168.199.0 netmask 255.255.255.0 {
range 192.168.199.100 192.168.199.200;
option routers 192.168.199.1;
option subnet-mask 255.255.255.0;
next-server 192.168.199.254;
# the configuration file for pxe boot
filename "centos7/pxelinux.0";
} -
配置
TFTP
tftp是由xinetd管理的,所以需要配置/etc/xinetd.d/tftp文件,这个文件中只需要改一个参数即可
~$ sudo vi /etc/xinetd.d/tftp |
- 首先将已经下载好的
CentOS的ISO镜像文件挂载到一个目录中,然后复制可引导的、压缩的内核文件vmlinuz,以及包含一些模块和安装文件系统的initrd。因为安装过程中以http的方式提供镜像源,所以这里直接将镜像文件挂在到httpd访问目录中(/data/wwwroot/default)。
~$ sudo mkdir /data/wwwroot/default/centos7 |
- 复制
vmlinuz,和initrd.img到TFTP访问目录的centos7子目录中,因为以后会引导其它的系统,所以这里通过子目录将不同的系统区分开。
~$ sudo mkdir /var/lib/tftpboot/centos7 |
vesamenu.c32和menu.c32是syslinux所拥有众多模块中的两个,它们的功能是制定启动器使用什么模式的背景。vesamenu.c32图形模式,menu.c32文本模式。我选择的是menu.c32。同时还需要
pxelinux.0文件,它对整个引导器的作用就如同内核对系统的作用,它可以解释default文件(配置引导菜单文件)中的每个配置项,并根据配置项做出不同的反应。如等待的时间、启动器背景、启动菜单、内核引导等等。需要将这两个文件复制到
tftp的访问目录中:
~$ sudo cp /usr/share/syslinux/menu.c32 /var/lib/tftpboot/ |
pxelinux被执行后,它会扫描该目录下是否存在指定的配置文件,如果存在,则引用被指定的配置文件。
default文件存放于pxelinux.cfg目录中,pxelinux程序最后扫描的配置文件名就是default。所以,把启动器配置项都写入该文件中。所以就要建立
pxelinux.cfg目录,并在此目录下建立default文件,编辑引导菜单。
~$ sudo mkdir /var/lib/tftpboot/pxelinux.cfg/ |
开启
dhcpd,xinetd,tftp,http这些服务,在开启的时候没有发生错误,说明配置没问题。
~$ sudo systemctl start dhcpd.service |
- 可以在浏览器输入
192.168.199.254验证http是否运行正常- 为了防止意外的发生可以关闭防火墙和
selinux。
~$ sudo systemctl stop firewalld.service |
如果要通过
MAC地址分配IP,可以编辑dhcp的配置文件/etc/dhcp/dhcpd.conf
subnet 192.168.0.0 netmask 255.255.255.0 { |

