在网络管理和系统部署领域,PXE(Preboot Execution Environment,预启动执行环境)是一种极为高效的技术,它允许计算机通过网络启动,而无需依赖本地硬盘、光盘或U盘等传统介质,对于需要批量安装操作系统的场景,如数据中心、机房或实验室,基于CentOS搭建PXE服务器可以实现自动化、无人值守的部署,极大地提升了工作效率,本文将详细介绍如何在CentOS系统上构建一个完整的PXE安装环境。
环境准备与组件解析
在开始之前,我们需要准备一台作为PXE服务器的CentOS系统,并确保其网络配置正确,整个PXE部署流程依赖于几个核心服务的协同工作,理解它们的作用至关重要。
服务名称 | 作用 | 安装包名 |
---|---|---|
DHCP | 为客户端分配IP地址,并告知TFTP服务器的地址和启动文件名 | dhcp |
TFTP | 一个简单的文件传输协议,用于向客户端提供启动所需的初始文件,如引导加载程序 | tftp-server |
HTTP/FTP/NFS | 提供完整的操作系统安装源文件(如CentOS的ISO镜像内容) | httpd (本文以HTTP为例) |
Kickstart | 自动化应答文件,定义安装过程中的所有选择,实现无人值守安装 | 由system-config-kickstart 生成或手动编写 |
服务器环境要求:
- 一台已安装CentOS 7或CentOS 8的服务器。
- 服务器配置一个静态IP地址,
168.10.10
。 - 确保服务器防火墙和SELinux已正确配置或暂时关闭,以避免初期排查问题时的干扰。
第一步:安装并配置DHCP服务
DHCP是PXE流程的起点,客户端首先需要通过DHCP获取网络参数。
安装DHCP服务包:
sudo yum install dhcp -y
配置DHCP服务:
DHCP的主配置文件是/etc/dhcp/dhcpd.conf
,该文件默认为空,我们可以参考模板文件/usr/share/doc/dhcp-*/dhcpd.conf.example
进行创建,以下是一个基础配置示例:# /etc/dhcp/dhcpd.conf option domain-name-servers 114.114.114.114, 8.8.8.8; default-lease-time 600; max-lease-time 7200; log-facility local7; # PXE特定配置 subnet 192.168.10.0 netmask 255.255.255.0 { range 192.168.10.100 192.168.10.200; # 分配给客户端的IP地址池 option routers 192.168.10.1; # 网关地址 option broadcast-address 192.168.10.255; next-server 192.168.10.10; # ***关键:TFTP服务器的IP地址*** filename "pxelinux.0"; # ***关键:PXE引导文件的名称*** }
next-server
和filename
是实现PXE引导的核心指令,它们明确告诉客户端从哪里获取什么文件来启动。启动并设置开机自启:
sudo systemctl start dhcpd sudo systemctl enable dhcpd
第二步:安装并配置TFTP服务
TFTP服务负责提供引导加载程序和内核文件。
安装TFTP服务包:
TFTP服务由xinetd
超级守护进程管理。sudo yum install tftp-server xinetd -y
配置TFTP服务:
编辑/etc/xinetd.d/tftp
文件,将disable
的值改为no
,以启用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 # 将 yes 改为 no per_source = 11 cps = 100 2 flags = IPv4 }
TFTP的默认根目录是
/var/lib/tftpboot
,所有需要通过网络传输的引导文件都将放置于此。准备引导文件:
我们需要从syslinux
包中获取引导文件,并从CentOS安装镜像中获取内核和初始化内存盘。# 安装syslinux,提供引导加载程序 sudo yum install syslinux -y # 复制必要的引导文件到TFTP根目录 sudo cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/ sudo cp /usr/share/syslinux/menu.c32 /var/lib/tftpboot/ sudo cp /usr/share/syslinux/vesamenu.c32 /var/lib/tftpboot/ sudo cp /usr/share/syslinux/ldlinux.c32 /var/lib/tftpboot/ sudo cp /usr/share/syslinux/libcom32.c32 /var/lib/tftpboot/ sudo cp /usr/share/syslinux/libutil.c32 /var/lib/tftpboot/ # 挂载CentOS ISO镜像(假设镜像文件为 /tmp/CentOS-7-x86_64-Minimal-2009.iso) sudo mkdir /mnt/centos-iso sudo mount -o loop /tmp/CentOS-7-x86_64-Minimal-2009.iso /mnt/centos-iso # 复制内核和初始化内存盘 sudo cp /mnt/centos-iso/images/pxeboot/vmlinuz /var/lib/tftpboot/ sudo cp /mnt/centos-iso/images/pxeboot/initrd.img /var/lib/tftpboot/
创建PXE菜单配置:
在TFTP根目录下创建pxelinux.cfg
目录,并在其中创建一个名为default
的文件,这是PXE启动菜单的配置文件。sudo mkdir /var/lib/tftpboot/pxelinux.cfg sudo vim /var/lib/tftpboot/pxelinux.cfg/default
如下:
default menu.c32 prompt 0 timeout 60 MENU TITLE PXE Boot Menu LABEL centos7_x64_install MENU LABEL Install CentOS 7 x64 with Kickstart KERNEL vmlinuz APPEND initrd=initrd.img ks=http://192.168.10.10/ks.cfg
这里的
ks=http://192.168.10.10/ks.cfg
指向了我们的Kickstart自动化应答文件。启动并设置服务自启:
sudo systemctl start xinetd sudo systemctl enable xinetd
第三步:配置HTTP服务与Kickstart文件
HTTP服务用于提供安装源和Kickstart文件。
安装并启动HTTP服务:
sudo yum install httpd -y sudo systemctl start httpd sudo systemctl enable httpd
发布安装源:
将CentOS ISO镜像中的所有内容复制到Apache的默认根目录。sudo cp -r /mnt/centos-iso/* /var/www/html/
可以通过
http://192.168.10.10/
访问到安装源。创建Kickstart文件:
Kickstart文件定义了安装的所有细节,我们可以从已安装好的CentOS系统中复制/root/anaconda-ks.cfg
作为模板,然后进行修改,在PXE服务器上创建/var/www/html/ks.cfg
文件。sudo vim /var/www/html/ks.cfg
一个简化的
ks.cfg
示例:#version=RHEL7 install url --url="http://192.168.10.10/" lang en_US.UTF-8 keyboard us network --bootproto=dhcp --device=eth0 --onboot=yes rootpw --plaintext your_password firewall --disabled selinux --disabled timezone Asia/Shanghai bootloader --location=mbr clearpart --all --initlabel part /boot --fstype="xfs" --size=500 part swap --size=2048 part / --fstype="xfs" --grow --size=1 %packages @core %end
请务必修改
rootpw
和url
等关键参数。
第四步:防火墙配置与测试
确保防火墙允许相关服务的流量。
sudo firewall-cmd --permanent --add-service=dhcp sudo firewall-cmd --permanent --add-service=tftp sudo firewall-cmd --permanent --add-service=http sudo firewall-cmd --reload
至此,PXE服务器已全部配置完成,将一台客户端计算机的BIOS启动项设置为网络启动(PXE Boot),它将自动从DHCP获取IP,然后显示我们配置的PXE菜单,选择 “Install CentOS 7 x64 with Kickstart” 后,系统将自动完成整个安装过程,无需任何人工干预。
相关问答FAQs
问1:客户端启动后,提示 “PXE-E53: No boot filename received” 或 “TFTP open timeout” 是什么原因?
答: 这个错误通常意味着客户端成功从DHCP服务器获取了IP地址,但没有收到 filename
或 next-server
参数,或者无法连接到TFTP服务器,请按以下步骤排查:
- 检查DHCP配置: 确认
/etc/dhcp/dhcpd.conf
文件中的next-server
地址是PXE服务器的正确IP,filename
是 “pxelinux.0″。 - 检查TFTP服务状态: 运行
systemctl status xinetd
确保服务正在运行。 - 检查防火墙: 确保PXE服务器的防火墙已放行UDP 69端口(TFTP)和UDP 67/68端口(DHCP),可以使用
sudo firewall-cmd --list-all
查看。 - 检查文件权限: 确认
/var/lib/tftpboot
目录及其内部文件的权限允许其他用户读取。sudo chmod -R 755 /var/lib/tftpboot
通常可以解决问题。
问2:安装程序启动后,提示无法找到安装源,或者进入了手动选择安装源的界面,这是为什么?
答: 这个问题表明Kickstart文件没有被正确读取,或者文件中指定的安装源URL不正确,排查方法如下:
- 检查Kickstart文件URL: 确认PXE菜单配置文件
default
中的ks=...
参数指向的URL是正确的,http://192.168.10.10/ks.cfg
。 - 验证HTTP服务: 在PXE服务器上,使用
curl http://192.168.10.10/ks.cfg
命令,看是否能正常下载到文件内容,如果不能,请检查httpd
服务状态和防火墙设置。 - 检查Kickstart文件内容: 打开
ks.cfg
文件,核对url --url="..."
这一行,确保其地址指向了正确的HTTP安装源根目录,http://192.168.10.10/
,URL末尾的斜杠很重要,不要遗漏。
【版权声明】:本站所有内容均来自网络,若无意侵犯到您的权利,请及时与我们联系将尽快删除相关内容!
发表回复