Cobbler 必须手动用 cobbler system add 注册 MAC 与静态 IP,不自动发现设备;需指定 --mac、--ip-address、--profile 等参数,并执行 cobbler sync 生效;import 和 distro 命令不处理设备级绑定。

必须手动注册 MAC 地址并指定 IP,Cobbler 不会自动“发现”或“绑定”未注册的网卡。 它不扫描网络、不监听 ARP、也不从 DHCP 租约中反向提取 MAC–IP 关系。所谓“按 MAC 自动装机”,本质是「提前把 MAC 和 IP 写进系统对象(cobbler system)」,后续 PXE 启动时由 Cobbler 的 DHCP+TFTP 流程按该映射下发配置。
怎么用 cobbler system add 绑定 MAC 和静态 IP
这是最直接、最可控的方式,适用于已知设备硬件信息的批量部署场景。
-
cobbler system add命令创建一个「系统对象」,它将 MAC 地址、IP、主机名、profile 等全部固化为一条记录 - 必须指定
--mac(物理网卡真实 MAC)、--ip-address(目标静态 IP)、--profile(对应 distro + kickstart 模板) - 可选加
--hostname和--netboot-enabled=1(默认为 1,但显式声明更安全) - 示例:
cobbler system add --name=web01 --mac=00:11:22:33:44:55 --ip-address=192.168.100.101 --hostname=web01.example.com --profile=centos7-x86_64
- 执行后需运行
cobbler sync才能将配置写入 DHCP/TFTP 服务
为什么 cobbler import 或 cobbler distro 不能绑定 MAC/IP
cobbler import 只处理镜像文件(ISO),生成 distro 和默认 profile;cobbler distro 是只读的发行版元数据容器。它们都不承载设备级信息——MAC、IP、主机名这些属于 system 对象的职责。
- 混淆点常出现在 Web 界面:看到「Profile」下有「System」子项,误以为 profile 能“带出”绑定逻辑,实际是反向关联(system → profile)
- 如果跳过
system注册,仅靠profile启动,DHCP 会分配动态地址(除非你额外配了 DHCP 静态租约,但那就脱离 Cobbler 管理了) - 没有
cobbler system记录的机器,即使 PXE 启动成功,也会 fallback 到 profile 默认的 kickstart 行为(比如使用 DHCP 获取 IP,或 kickstart 中硬编码的 IP)
批量导入 MAC+IP 最容易踩的坑
用 CSV 批量注册看似高效,但格式和字段顺序错一个字符就会静默失败或生成错误对象。
- CSV 必须用英文逗号分隔,**首行必须是字段名**,且严格为:
name,mac,profile,ip_address(注意不是ip-address或ip) -
mac字段值要统一格式:全小写、冒号分隔、无空格(如00:11:22:33:44:55),大写或短横线(00-11-22-33-44-55)会导致cobbler system list显示为空 - 执行命令:
cobbler system add --csv=/path/to/systems.csv,路径必须绝对,且文件需被 cobbler 用户(通常是root)可读 - 常见报错:
ValueError: not enough values to unpack→ CSV 行字段数不足;exception on add: 'NoneType' object has no attribute 'strip'→ 某字段为空但必填(如mac) - 导入后务必检查:
cobbler system list和cobbler system report --name=xxx,别只信 “Import successful”
kickstart 里写死 IP 与 Cobbler 绑定 IP 的区别
两者都能实现静态 IP,但维护成本和灵活性天差地别。
- 在 kickstart 文件(如
/var/lib/cobbler/kickstarts/centos7.ks)里写死network --bootproto=static --ip=192.168.100.101:所有用这个 ks 的机器都套同一 IP,无法区分设备 - 用
cobbler system绑定:Cobbler 会在生成临时 ks 时,把该 system 的ip_address动态注入到 ks 的network行中(通过模板变量$ip_address),真正实现“一机一 IP” - 验证方法:查看生成的临时 ks 路径(
cobbler system report --name=xxx | grep autoinstall),然后 cat 对应文件,确认network行是否含实际 IP - 所以,不要在 kickstart 模板里硬编码 IP;而是确保模板里写的是
network --bootproto=static --ip=$ip_address
真正麻烦的不是注册 MAC,而是确保每台待装机的 BIOS/UEFI 网卡启用状态、PXE 启动顺序、以及物理连线都就位——Cobbler 只管“发令”,不管“通电”。MAC 绑定再准,网线没插、网卡没开 PXE,照样黑屏。











