需部署DHCP、TFTP、HTTP三服务:一、DHCP分配IP并指定TFTP地址与pxelinux.0;二、TFTP提供pxelinux.0、vmlinuz、initrd.img;三、HTTP提供安装源及ks.cfg;四、配置pxelinux.cfg/default启动菜单;五、可选Kickstart实现无人值守安装。

如果您希望在局域网内通过网络启动多台Linux主机,需依赖PXE(Preboot Execution Environment)机制,该机制要求DHCP分配IP并告知客户端TFTP服务器地址与启动文件名,TFTP提供引导程序(如pxelinux.0),HTTP或NFS提供完整安装环境。以下是完成此部署的具体步骤:
一、安装并配置DHCP服务
DHCP服务负责为客户端分配IP地址,并指定下一页启动所需的TFTP服务器地址及初始引导文件名(filename)。必须确保DHCP作用域未与其他网络设备冲突,且option 66与option 67正确指向后续部署的TFTP服务。
1、执行命令安装isc-dhcp-server:sudo apt install isc-dhcp-server(Ubuntu/Debian)或sudo yum install dhcp-server(CentOS 7)。
2、编辑主配置文件/etc/dhcp/dhcpd.conf,添加如下段落(假设局域网为192.168.10.0/24,TFTP服务器IP为192.168.10.5):subnet 192.168.10.0 netmask 255.255.255.0 { range 192.168.10.100 192.168.10.200; option routers 192.168.10.1; option domain-name-servers 192.168.10.1; option tftp-server-name "192.168.10.5"; filename "pxelinux.0"; }。
3、指定监听接口,修改/etc/default/isc-dhcp-server中INTERFACESv4值为"ens33"(以实际网卡名为准)。
4、重启服务并检查状态:sudo systemctl restart isc-dhcp-server && sudo systemctl status isc-dhcp-server。
二、部署TFTP服务并放置引导文件
TFTP服务用于传输体积小但关键的初始引导组件,包括pxelinux.0、内核vmlinuz和初始化内存盘initrd.img。其根目录必须可被DHCP所声明的路径访问,且需启用tftpd-hpa的secure模式对应路径限制。
1、安装tftpd-hpa:sudo apt install tftpd-hpa(Ubuntu/Debian)或sudo yum install tftp-server(CentOS 7)。
2、创建TFTP根目录并赋权:sudo mkdir -p /var/lib/tftpboot/pxelinux.cfg;sudo chmod -R 755 /var/lib/tftpboot;sudo chown -R nobody:nogroup /var/lib/tftpboot。
3、复制syslinux引导文件:下载syslinux软件包后提取pxelinux.0,或直接安装syslinux并拷贝:sudo apt install syslinux-common && sudo cp /usr/lib/PXELINUX/pxelinux.0 /var/lib/tftpboot/。
4、将Linux发行版的vmlinuz与initrd.img放入/var/lib/tftpboot/centos8/(路径可自定义),例如:sudo cp /mnt/isolinux/vmlinuz /var/lib/tftpboot/centos8/;sudo cp /mnt/isolinux/initrd.img /var/lib/tftpboot/centos8/。
三、配置HTTP服务提供安装源
HTTP服务替代传统NFS,用于向PXE客户端提供完整的安装树(如CentOS的AppStream、BaseOS目录),避免TFTP传输大文件的低效与失败风险。客户端在加载内核后,通过HTTP URL获取安装介质内容。
1、安装Apache:sudo apt install apache2(Ubuntu/Debian)或sudo yum install httpd(CentOS 7)。
2、挂载ISO镜像至Web根目录子路径:sudo mkdir -p /var/www/html/centos8;sudo mount -o loop /path/to/CentOS-8-x86_64-1905-dvd1.iso /var/www/html/centos8。
3、设置SELinux策略(仅CentOS/RHEL):sudo setsebool -P httpd_can_network_connect 1;若启用防火墙,放行80端口:sudo firewall-cmd --permanent --add-service=http && sudo firewall-cmd --reload。
4、启动并启用HTTP服务:sudo systemctl enable apache2 && sudo systemctl start apache2(Ubuntu)或sudo systemctl enable httpd && sudo systemctl start httpd(CentOS)。
四、构建PXELINUX启动菜单
pxelinux.cfg目录下的配置文件控制启动项显示与内核参数传递。默认查找顺序为MAC地址文件 → IP十六进制文件 → default文件。使用default可统一管理所有客户端启动行为。
1、生成默认配置文件:sudo nano /var/lib/tftpboot/pxelinux.cfg/default。
2、写入标准启动条目(以CentOS 8为例):default menu.c32 timeout 300 menu title PXE Network Boot menu background splash.png label linux menu label Install CentOS 8 kernel centos8/vmlinuz append initrd=centos8/initrd.img inst.ks=http://192.168.10.5/centos8/ks.cfg inst.ks.device=link inst.repo=http://192.168.10.5/centos8/。
3、如需图形化菜单,下载menu.c32并放入/var/lib/tftpboot/:sudo cp /usr/lib/syslinux/modules/bios/menu.c32 /var/lib/tftpboot/。
4、验证文件权限:ls -l /var/lib/tftpboot/应显示pxelinux.0、menu.c32、centos8/目录及pxelinux.cfg/default均为可读。
五、准备Kickstart自动安装应答文件(可选但推荐)
Kickstart文件(.ks)使无人值守安装成为可能,定义分区方案、软件包选择、root密码等。HTTP服务须将其暴露于可公开访问路径,供内核启动时通过inst.ks参数拉取。
1、创建ks.cfg文件:sudo nano /var/www/html/centos8/ks.cfg。
2、填入最小化有效配置(示例):#version=RHEL8 firewall --disabled keyboard --vckeymap=us --xlayouts='us' rootpw --plaintext redhat network --bootproto=dhcp --device=link --onboot=off --ipv6=auto --no-activate firstboot --disable ignoredisk --only-use=sda reboot url --url="http://192.168.10.5/centos8/" text skipx zerombr clearpart --all --initlabel autopart --type=lvm %packages @^minimal-environment %end。
3、设置文件属主与权限:sudo chown root:root /var/www/html/centos8/ks.cfg && sudo chmod 644 /var/www/html/centos8/ks.cfg。
4、测试HTTP可访问性:curl -I http://192.168.10.5/centos8/ks.cfg应返回HTTP 200状态码。










