netboot.xyz 多架构网络启动完整指南
【免费下载链接】netboot.xyzYour favorite operating systems in one place. A network-based bootable operating system installer based on iPXE.项目地址: https://gitcode.com/gh_mirrors/ne/netboot.xyz
面对 40 台旧服务器、5 台 ARM64 开发板和 2 台树莓派,一台管理机要统一装系统——netboot.xyz 就是为此做的:基于 iPXE 的网络启动发行版工具箱。
从一个真实场景切入
具体点:机房 40 台 Legacy BIOS 老服务器、5 台 ARM64 开发板、2 台树莓派,手里只有一台管理机。烧 U 盘逐台装,一周干不完;给每个架构手搓 iPXE 脚本再加 DHCP 选项,配置量又是一座山。netboot.xyz 的解法是把各架构的启动器和统一菜单一次构建好,设备联网后自动落到正确的菜单,人只负责选发行版。
一张表看懂所有启动器
所有启动器出自同一套 Ansible 构建流程,文件名即用途,默认前缀都是 netboot.xyz:
| 架构 | 镜像文件名 | 典型适用环境 | 一句话备注 |
|---|---|---|---|
| Legacy BIOS | netboot.xyz.kpxe | 旧服务器的 DHCP/PXE 网启 | 标准 DHCP 镜像,内嵌 iPXE 网卡驱动 |
| Legacy BIOS | netboot.xyz-undionly.kpxe | 同上 | 标准版网卡驱动点不亮时换它 |
| Legacy BIOS | netboot.xyz.lkrn / netboot.xyz.dsk | GRUB 引导、DRAC/iLO、VMware | .lkrn 给 GRUB/EXTLINUX 链载,.dsk 当虚拟软盘 |
| UEFI | netboot.xyz.efi | 现代服务器、新 PC 的 DHCP 网启 | 标准 UEFI DHCP 镜像 |
| UEFI | netboot.xyz-snp.efi / netboot.xyz-snponly.efi | iLO、VMware 等虚拟化平台 | snp 尝试启动所有网卡,snponly 只从链式设备启动 |
| ARM64 | netboot.xyz-arm64.efi / -arm64-snp.efi / -arm64-snponly.efi | ARM 服务器、开发板 | aarch64 工具链交叉编译产物 |
| Raspberry Pi | netboot.xyz-rpi4-sdcard.img / -rpi4-snp.efi | 树莓派 4 | 前者灌 SD/USB 卡,后者走网络 SNP |
分不清自己在哪一行?看两个维度:固件是 Legacy BIOS 还是 UEFI,CPU 是 x86 还是 ARM64。ARM64 那几个文件是交叉编译出来的,生成逻辑在roles/netbootxyz/tasks/generate_disks_arm.yml里。设备连上来之后架构到底怎么识别的,看下一节。
设备连上来之后发生了什么
- 设备发 DHCP 请求,拿到 IP 和启动文件名
- 固件按文件名加载对应架构的 iPXE 启动器
- 内嵌的 netboot.xyz 引导脚本开始执行
- cpuid 探测 CPU,确定 x86 还是 arm64
- 按架构裁剪菜单,加载 boot.cfg 和主菜单
- 选中发行版后,拉取内核与 initrd 开装
第 4、5 步就是它比裸 iPXE 方便的地方:架构识别和菜单裁剪全自动,你不用手写一行脚本。判定逻辑写在roles/netbootxyz/templates/menu/menu.ipxe.j2:x86 按 cpuid 扩展位区分 32/64 位,arm64 直接看 buildarch;判定完成后 menu_linux、menu_live_arm 等开关按架构点亮,主菜单只露出当前平台真正能用的入口。
🚀 跑起来:Ansible 或 Docker 二选一
构建入口只有一个 Ansible playbook:机器上有 Ansible 和编译工具链就直接跑;没有就上 Docker,容器自带编译环境。
git clone https://gitcode.com/gh_mirrors/ne/netboot.xyz cd netboot.xyz && ansible-playbook site.yml跑完产物默认落在 /var/www/html,各架构启动器都在 ipxe/ 子目录,交给 HTTP/TFTP 服务器就能用。
docker build -t localbuild --platform=linux/amd64 -f Dockerfile . docker run --rm -it --platform=linux/amd64 -v $(pwd):/buildout localbuild容器退出后,产物会出现在当前目录生成的 buildout/ 文件夹里,结构跟上面一致。两种方式产物完全一致,选你环境里已有的工具链即可;要改镜像源、boot 域名这些参数,写进 user_overrides.yml 就行,不用动roles/netbootxyz/defaults/main.yml里的默认值。
避坑清单与进阶建议
下面这几条按踩坑频率排序,都是真实会卡住你的点:
- 网卡驱动不匹配→ 先换 undionly 变体。标准 kpxe 内嵌的 USB 网卡驱动会顶掉 BIOS 的 USB legacy 支持,老机器点不亮或键盘失灵时,改用 netboot.xyz-undionly.kpxe,它只保留 UNDI 驱动。
- DHCP 选项按架构配→ Legacy 配 option 67 指向 .kpxe,UEFI 走 option 43 的 PXE 菜单项或 SNP。有 proxyDHCP 的环境不用改配置,netboot.xyz 会检测并在几秒内询问是否切到 proxy 的 next-server;想固定行为就在 TFTP 根目录的 local-vars.ipxe 里设 use_proxydhcp_settings。
- HTTPS 不是零成本→ 默认构建把 iPXE 官方 CA 编译进了启动器,自建环境用自签证书的话,需要把 CA 放进 /etc/netbootxyz/certs 重新构建,否则握手会失败。
- 虚拟化平台先试 snp 变体→ DRAC/iLO、VMware 的虚拟网卡对 SNP 支持最稳,标准 netboot.xyz.efi 卡住时换 netboot.xyz-snp.efi 往往直接过;只信任链式设备的环境用 -snponly。
- 定期重建,别等启动失败才想起来→ 发行版镜像 URL 经常漂移,重跑一次 site.yml 就能刷新菜单、端点和 SHA256 校验和;menu.ipxe 还内置版本检查,上游发新版会自动提示并链到最新构建。
- Secure Boot 默认是关的→ 默认产物不含签名支持,受管设备要打开 generate_disks_secureboot 变量单独构建。
最后说两句
netboot.xyz 把异构机群的系统安装从"逐台折腾"收敛成一次构建、处处可启。如果只需要固定一两个发行版的 PXE 安装,自己维护一小段 GRUB 或 iPXE 脚本反而更轻,它的价值在多发行版工具箱场景。去仓库的 release 页挑个版本,clone 下来跑一次 site.yml,半小时后你的管理机上就有全套启动器。🌱
【免费下载链接】netboot.xyzYour favorite operating systems in one place. A network-based bootable operating system installer based on iPXE.项目地址: https://gitcode.com/gh_mirrors/ne/netboot.xyz
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考