告别U盘!用CentOS 7.9 + iPXE + dnsmasq搭建一个能同时装CentOS 7、AlmaLinux 8和Ubuntu 22.04的万能PXE服务器
打造全能PXE装机服务器CentOS 7.9iPXEdnsmasq混合系统部署指南当机房里的服务器数量超过两位数时U盘安装系统就像用滴管给游泳池注水——效率低得令人发指。我曾用三个通宵手动安装了50台服务器直到发现PXE网络装机这个工业级解决方案。本文将分享如何用一台闲置的CentOS 7.9服务器构建支持CentOS 7、AlmaLinux 8和Ubuntu 22.04的智能装机环境完美适配BIOS和UEFI两种启动模式。1. 基础环境准备与架构设计1.1 为什么选择dnsmasqiPXE组合传统PXE方案通常采用ISC DHCPTFTP组合配置复杂度呈指数级增长。我们的方案使用dnsmasq实现DHCPTFTP二合一服务配合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-range192.168.2.100,192.168.2.200,12h dhcp-optionoption:router,192.168.2.254 dhcp-matchset:bios,option:client-arch,0 dhcp-matchset:efi,option:client-arch,7 dhcp-boottag:bios,undionly.kpxe dhcp-boottag:efi,ipxe.efi dhcp-boottag: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/Nginxgohttpserver只需单个二进制文件就能实现带认证的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] DescriptionGo HTTP Server Afternetwork.target [Service] ExecStart/pxe/gohttpserver -r /pxe/http --addr :80 --auth-type http --auth-http admin:password Restartalways Userroot [Install] WantedBymulti-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 dsnocloud-net;s${base-url}/autoinstall/ initrd ${base-url}/iso/ubuntu/casper/initrd boot3.2 系统镜像处理技巧不同Linux发行版的ISO结构差异较大需要针对性处理系统版本内核路径初始化内存盘路径软件源位置CentOS 7images/pxeboot/vmlinuzimages/pxeboot/initrd.img/AlmaLinux 8isolinux/vmlinuzisolinux/initrd.img/BaseOSUbuntu 22.04casper/vmlinuzcasper/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 --fstypeefi --size600 part /boot --fstypeext4 --size1024 EOF else cat /tmp/part-include EOF part biosboot --fstypebiosboot --size1 part /boot --fstypeext4 --size1024 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倍。