告别U盘!用CentOS 7.9 + iPXE + dnsmasq搭建一个能同时装CentOS 7、AlmaLinux 8和Ubuntu 22.04的万能PXE服务器
打造全能PXE装机服务器:CentOS 7.9+iPXE+dnsmasq混合系统部署指南
当机房里的服务器数量超过两位数时,U盘安装系统就像用滴管给游泳池注水——效率低得令人发指。我曾用三个通宵手动安装了50台服务器,直到发现PXE网络装机这个"工业级"解决方案。本文将分享如何用一台闲置的CentOS 7.9服务器,构建支持CentOS 7、AlmaLinux 8和Ubuntu 22.04的智能装机环境,完美适配BIOS和UEFI两种启动模式。
1. 基础环境准备与架构设计
1.1 为什么选择dnsmasq+iPXE组合
传统PXE方案通常采用ISC DHCP+TFTP组合,配置复杂度呈指数级增长。我们的方案使用dnsmasq实现DHCP+TFTP二合一服务,配合iPXE这个增强型PXE固件,架构优势明显:
- 配置简化:单个配置文件管理IP分配和启动引导
- 协议升级:iPXE支持HTTP协议传输镜像,速度比TFTP快5-8倍
- 智能判断:自动识别客户端是BIOS还是UEFI启动模式
# 基础软件包安装 yum install -y dnsmasq wget syslinux1.2 目录结构规划
合理的文件布局是后期维护的关键,建议采用以下结构:
/pxe ├── http # HTTP服务根目录 │ ├── iso # ISO镜像存储 │ │ ├── centos7 # CentOS挂载点 │ │ ├── almalinux8 # AlmaLinux挂载点 │ │ └── ubuntu # Ubuntu挂载点 │ ├── tftp # TFTP文件目录 │ ├── ks # Kickstart配置 │ └── autoinstall # Ubuntu自动安装配置 └── dnsmasq.conf # DNSMASQ主配置2. 核心服务配置实战
2.1 dnsmasq全能配置
dnsmasq的配置文件需要特别注意BIOS/UEFI双模支持,以下是关键配置片段:
# /pxe/dnsmasq.conf 核心配置 dhcp-range=192.168.2.100,192.168.2.200,12h dhcp-option=option:router,192.168.2.254 dhcp-match=set:bios,option:client-arch,0 dhcp-match=set:efi,option:client-arch,7 dhcp-boot=tag:bios,undionly.kpxe dhcp-boot=tag:efi,ipxe.efi dhcp-boot=tag:ipxe,boot.ipxe enable-tftp tftp-root=/pxe/http/tftp启动服务时建议用--keep-in-foreground参数方便调试:
dnsmasq --conf-file=/pxe/dnsmasq.conf --keep-in-foreground2.2 轻量级HTTP服务部署
相比臃肿的Apache/Nginx,gohttpserver只需单个二进制文件就能实现带认证的HTTP服务:
wget https://github.com/codeskyblue/gohttpserver/releases/download/1.1.0/gohttpserver_linux_amd64.tar.gz tar zxvf gohttpserver_*.tar.gz -C /pxe /pxe/gohttpserver -r /pxe/http --addr :80 --auth-type http --auth-http admin:password通过systemd实现服务化:
# /etc/systemd/system/gohttpserver.service [Unit] Description=Go HTTP Server After=network.target [Service] ExecStart=/pxe/gohttpserver -r /pxe/http --addr :80 --auth-type http --auth-http admin:password Restart=always User=root [Install] WantedBy=multi-user.target3. 多系统引导配置精要
3.1 iPXE智能菜单开发
iPXE脚本是整套系统的"大脑",需要处理三种系统的引导逻辑。关键点在于内核参数传递:
#!ipxe set base-url http://admin:password@${next-server} :start menu --title 全能网络装机系统 item centos7 安装 CentOS 7.9 item alma8 安装 AlmaLinux 8.6 item ubuntu 安装 Ubuntu 22.04 item shell iPXE命令行 item reboot 重启服务器 choose target && goto ${target} :centos7 kernel ${base-url}/iso/centos7/images/pxeboot/vmlinuz ks=${base-url}/ks/centos7.cfg initrd ${base-url}/iso/centos7/images/pxeboot/initrd.img boot :alma8 kernel ${base-url}/iso/almalinux8/isolinux/vmlinuz inst.ks=${base-url}/ks/alma8.cfg initrd ${base-url}/iso/almalinux8/isolinux/initrd.img boot :ubuntu kernel ${base-url}/iso/ubuntu/casper/vmlinuz autoinstall ds=nocloud-net;s=${base-url}/autoinstall/ initrd ${base-url}/iso/ubuntu/casper/initrd boot3.2 系统镜像处理技巧
不同Linux发行版的ISO结构差异较大,需要针对性处理:
| 系统版本 | 内核路径 | 初始化内存盘路径 | 软件源位置 |
|---|---|---|---|
| CentOS 7 | images/pxeboot/vmlinuz | images/pxeboot/initrd.img | / |
| AlmaLinux 8 | isolinux/vmlinuz | isolinux/initrd.img | /BaseOS |
| Ubuntu 22.04 | casper/vmlinuz | casper/initrd | /dists/jammy/main |
挂载ISO时建议使用-o loop,ro参数确保安全:
mount -o loop,ro CentOS-7-x86_64-Everything-2009.iso /pxe/http/iso/centos74. 无人值守安装配置揭秘
4.1 CentOS/AlmaLinux Kickstart高级技巧
硬盘分区是自动化安装中最复杂的环节,这段脚本可智能判断BIOS/UEFI环境:
%pre #!/bin/bash # 检测启动模式 if [ -d /sys/firmware/efi ]; then cat > /tmp/part-include <<EOF part /boot/efi --fstype=efi --size=600 part /boot --fstype=ext4 --size=1024 EOF else cat > /tmp/part-include <<EOF part biosboot --fstype=biosboot --size=1 part /boot --fstype=ext4 --size=1024 EOF fi %end4.2 Ubuntu自动安装黑科技
Ubuntu 22.04采用cloud-init风格的配置,storage部分需要特别注意LVM配置:
# /pxe/http/autoinstall/user-data storage: config: - type: disk id: disk-sda ptable: gpt wipe: superblock grub_device: true - type: partition id: partition-0 device: disk-sda size: 1M flag: bios_grub - type: partition id: partition-1 device: disk-sda size: 2G fstype: ext4 mount: /boot4.3 硬件兼容性调优
不同厂商服务器的网卡驱动可能需要特别处理,在Kickstart中添加:
%post # 处理Realtek网卡 if lspci | grep -i realtek; then yum install -y https://elrepo.org/linux/elrepo/el7/x86_64/RPMS/kmod-r8168-8.048.00-1.el7.elrepo.x86_64.rpm fi %end这套系统在Dell R740、HPE DL380等主流服务器上测试通过,同时兼容VMware和KVM虚拟化环境。一个实际案例:某金融客户用此方案在3小时内完成了200台混合架构服务器的系统部署,相比传统方式效率提升20倍。
