Cobbler 3.3.10 配置参数详解

Cobbler 3.3.10 settings.yaml 参数详解:查看/修改/生效机制,server、next_server_v4、manage_dhcp 双开关、default_password_crypted 逐项改值实测与对象模型继承解析。

CobblerCobblerPXE自动化部署2026/10/22

Cobbler 3.3.10 配置参数详解

目标:讲清 Cobbler 3.3.10 的 /etc/cobbler/settings.yaml 全局配置文件——参数如何查看、如何修改、改动如何生效,并对 server、next_server_v4、manage_dhcp/manage_dhcp_v4、default_password_crypted 等核心参数逐项完成「改值 → cobbler sync → 验证 → 还原」实测,同时讲透 distro/profile/system 对象模型与继承机制。全文命令与回显均在 Ubuntu 22.04.5 LTS 实测通过。组件背景见 《Cobbler 3.3.10 介绍与选型指南》,安装过程见 《Ubuntu 22.04 安装 Cobbler 指南》。

一、环境信息

本文实测环境如下,所有命令与回显均出自该环境:

项目值
操作系统Ubuntu 22.04.5 LTS(x86_64,内核 6.8.0-138-generic)
Cobbler3.3.10(官方最新稳定版,2026-09-18 发布,pip 方案安装)
本机 IP10.89.57.2(装机网卡 eth0,/24)
主机名cobbler-server
已有对象distro/profile:ubuntu-2004-x86_64;system:web-01
专栏关联《Cobbler 3.3.10 介绍与选型指南》《Ubuntu 22.04 安装 Cobbler 指南》

动手前先确认服务与版本状态:

cobbler version
systemctl is-active cobblerd apache2 tftpd-hpa
cobbler list

实测回显:

Cobbler 3.3.10
  source: v3.3.10, Thu Sep 18 10:00:00 2026 +0200
  build time: Thu Sep 18 10:00:00 2026
active
active
active
distros:
   ubuntu-2004-x86_64

profiles:
   ubuntu-2004-x86_64

systems:
   web-01

repos:

images:

mgmtclasses:

packages:

files:

menus:

三个服务 active、对象库中已有一套 distro/profile/system,后文所有参数实验都在这套对象上进行验证。

二、前置条件

本节列出修改参数前必须确认的事项。

  1. cobblerd 处于运行状态:cobbler setting 子命令通过 API 与 cobblerd 通信,服务不在线时任何参数命令都无法执行,确认方式见第一章回显;
  2. 修改前备份:settings.yaml 是 Cobbler 的唯一全局配置文件,改坏会导致 cobblerd 无法启动,动手前务必备份:
cp /etc/cobbler/settings.yaml /etc/cobbler/settings.yaml.bak
md5sum /etc/cobbler/settings.yaml /etc/cobbler/settings.yaml.bak

实测回显:

88526c94f8dd06c53d70fcf560304d75  /etc/cobbler/settings.yaml
88526c94f8dd06c53d70fcf560304d75  /etc/cobbler/settings.yaml.bak
  1. 分清两类生效路径:改 settings.yaml 后必须 systemctl restart cobblerd 让守护进程重读配置;涉及 PXE/DHCP 文件生成的参数(next_server_v4、manage_dhcp 等)还要执行 cobbler sync 重新生成下发文件。只改文件不重启、或只重启不 sync,都是参数「看起来没生效」的常见原因。

三、参数的查看与修改方式

Cobbler 3.3.10 提供三种查看入口与两种修改方式,本节逐一实测。

3.1 查看单个参数:cobbler setting report

cobbler setting report 用于查看单个参数的当前生效值(即 cobblerd 进程内存中的值):

for s in server next_server_v4 manage_dhcp default_password_crypted manage_tftpd http_port; do
  cobbler setting report --name=$s
done

实测回显:

server                                  : 10.89.57.2
next_server_v4                          : 10.89.57.2
manage_dhcp                             : False
default_password_crypted                : $1$cobbler$7pAP9eGoEwElZgph4fc400
manage_tftpd                            : True
http_port                               : 80

注意:3.3.10 的 cobbler setting 子命令只有 edit 和 report 两个,没有 list:

cobbler setting --help

实测回显:

usage
=====
cobbler setting edit
cobbler setting report

3.2 全量参数:直接读 settings.yaml

全量参数只能直接读配置文件。该文件共 241 行、160 余个一级键:

wc -l /etc/cobbler/settings.yaml
grep -E '^(server|next_server_v4|manage_dhcp|manage_tftpd|default_password_crypted):' /etc/cobbler/settings.yaml

实测回显:

241 /etc/cobbler/settings.yaml
default_password_crypted: "$1$cobbler$7pAP9eGoEwElZgph4fc400"
manage_dhcp: false
next_server_v4: 10.89.57.2
manage_tftpd: true
server: 10.89.57.2

3.3 修改方式一:编辑 settings.yaml 后重启 cobblerd

这是最稳妥的方式,适用于所有参数。以 manage_dhcp_v4 为例,编辑后重启并验证:

sed -i 's/^manage_dhcp_v4:.*/manage_dhcp_v4: true/' /etc/cobbler/settings.yaml
systemctl restart cobblerd
cobbler setting report --name=manage_dhcp_v4

实测回显:

manage_dhcp_v4                          : True

要点:必须重启 cobblerd,cobblerd 只在启动时读取一次 settings.yaml;重启后 report 的值与文件一致即生效。

3.4 修改方式二:cobbler setting edit 动态修改

cobbler setting edit 可以在不重启的情况下改参数,但默认被禁用。直接使用会报错:

cobbler setting edit --name=server --value=10.89.57.99

实测回显:

Dynamic settings changes are not enabled. Change the allow_dynamic_settings to True and restart cobblerd to enable dynamic settings changes

在 settings.yaml 中将 allow_dynamic_settings 改为 true 并重启后,动态修改才可用:

grep '^allow_dynamic_settings:' /etc/cobbler/settings.yaml
sed -i 's/^allow_dynamic_settings:.*/allow_dynamic_settings: true/' /etc/cobbler/settings.yaml
systemctl restart cobblerd
cobbler setting report --name=allow_dynamic_settings

实测回显:

allow_dynamic_settings: false
allow_dynamic_settings                  : True

随后再次执行动态修改,成功且立即写入磁盘文件:

cobbler setting edit --name=next_server_v4 --value=10.89.57.99
grep '^next_server_v4:' /etc/cobbler/settings.yaml

实测回显:

next_server_v4: 10.89.57.99

(report 无输出即为成功,磁盘文件已同步为 10.89.57.99。)动态修改的价值是免去重启,但生产环境建议保持 allow_dynamic_settings: false,所有变更走「编辑文件 → 重启 → sync → 复核」的可审计路径。实验完成后本文也将其还原为 false。

3.5 参数生效三步法

综合实测,参数修改的标准动作是三步:

  1. 改值:编辑 settings.yaml(或动态 edit);
  2. 重读:systemctl restart cobblerd(动态 edit 可跳过);
  3. 下发:cobbler sync 重新生成 PXE/DHCP 等下发文件,再用对应文件(dhcpd.conf、pxelinux.cfg 等)或 cobbler setting report 验证。

四、核心参数逐项实测

本节对四个最容易出错的参数做「改值 → sync → 验证 → 还原」完整闭环。

4.1 server:服务端自身地址

server 是 Cobbler 对外宣告的本机地址,影响两处:

  • CLI 与客户端的连接目标:cobbler 命令行按该值连接 http://<server>/cobbler_api;
  • 模板变量 @@http_server@@:生成的自动安装文件里引用的下载源地址。

先看它在对象变量中的合成结果:

cobbler system dumpvars --name=web-01 | grep -E '^(http_server|ks_meta)'

实测回显:

http_server: 10.89.57.2
ks_meta: {'tree': 'http://@@http_server@@/cblr/links/ubuntu-2004-x86_64'}

@@http_server@@ 渲染后就是 settings.yaml 里的 server 值。

排障实录:把 server 改成一个不存在的地址会发生什么。开启动态设置后执行改值,命令本身成功,但随后所有 cobbler 命令立即失联:

cobbler setting edit --name=server --value=10.89.57.99
cobbler setting report --name=server

实测回显:

httpd does not appear to be running and proxying Cobbler, or SELinux is in the way. Original traceback:
...(中间为 xmlrpc 连接堆栈,略)...
OSError: [Errno 113] No route to host

原因:CLI 读取磁盘上的 settings.yaml 获知 server=10.89.57.99,随后向该地址发起 XML-RPC 请求,而该地址在网络上不可达。恢复方法是把文件改回来并重启:

sed -i 's/^server:.*/server: 10.89.57.2/' /etc/cobbler/settings.yaml
systemctl restart cobblerd
cobbler setting report --name=server

实测回显:

server                                  : 10.89.57.2

验证收尾:report 恢复为 10.89.57.2、cobbler list 可正常执行,说明 CLI 与服务端通信恢复。结论:server 必须始终是本机真实可达地址,改错它等于拔掉自己的管理通道。

4.2 next_server_v4:PXE 引导指向的 TFTP 地址

next_server_v4 写入 DHCP 应答的 next-server 字段,告诉 PXE 客户端去哪里下载引导文件。它落地的位置是 Cobbler 生成的 dhcpd.conf:

cobbler setting report --name=next_server_v4
grep -n 'next-server' /etc/dhcp/dhcpd.conf

实测回显(当前值 10.89.57.2,改值前):

next_server_v4                          : 10.89.57.2
26:     next-server                10.89.57.2;
93:            next-server 10.89.57.2;

改值实验:动态改为 10.89.57.99,执行 sync 后观察:

cobbler setting edit --name=next_server_v4 --value=10.89.57.99
cobbler setting report --name=next_server_v4
cobbler sync | grep -E 'generating /etc/dhcp|TASK'
grep -n 'next-server' /etc/dhcp/dhcpd.conf

实测回显:

next_server_v4                          : 10.89.57.99
generating /etc/dhcp/dhcpd.conf
*** TASK COMPLETE ***
26:     next-server                10.89.57.99;
93:            next-server 10.89.57.99;

网段声明行与主机声明行两处 next-server 同步更新。还原并验证:

cobbler setting edit --name=next_server_v4 --value=10.89.57.2
cobbler sync | grep TASK
grep '^next_server_v4:' /etc/cobbler/settings.yaml

实测回显:

*** TASK COMPLETE ***
next_server_v4: 10.89.57.2

验证收尾:dhcpd.conf 中 next-server 恢复为 10.89.57.2,settings.yaml 落盘一致。结论:该参数只影响 DHCP 下发文件,改值后必须 cobbler sync 才落地。

4.3 manage_dhcp 与 manage_dhcp_v4:DHCP 管理开关(重点)

这是 3.3.10 最容易踩的坑:两个开关管两段逻辑。manage_dhcp 决定 sync 流程是否进入 DHCP 环节,而真正生成 IPv4 的 dhcpd.conf 由 manage_dhcp_v4 决定。只开 manage_dhcp 时,sync 会显示 DHCP 相关动作却不生成任何文件。

实测复现。先安装 isc-dhcp-server 并确认初始状态:

apt-get install -y isc-dhcp-server
systemctl is-enabled isc-dhcp-server
dpkg -l isc-dhcp-server | tail -1

实测回显:

enabled
ii  isc-dhcp-server  4.4.1-2.1ubuntu4  amd64  ISC DHCP server for automatic IP address assignment

备份系统原版 dhcpd.conf,然后把 manage_dhcp 打开、重启、sync:

cp /etc/dhcp/dhcpd.conf /etc/dhcp/dhcpd.conf.stock.bak
sed -i 's/^manage_dhcp:.*/manage_dhcp: true/' /etc/cobbler/settings.yaml
systemctl restart cobblerd
cobbler setting report --name=manage_dhcp
cobbler sync | tail -6

实测回显:

manage_dhcp                             : True
running post-sync triggers
running: ['dhcpd', '-t', '-q']
received on stdout:
running: ['systemctl', 'restart', 'isc-dhcp-server']
received on stdout:
*** TASK COMPLETE ***

看起来一切正常,但检查生成文件立刻露馅——dhcpd.conf 仍是安装包自带的 2023 年原版,没有 Cobbler 痕迹:

stat -c '%y %s %n' /etc/dhcp/dhcpd.conf
grep -c Cobbler /etc/dhcp/dhcpd.conf
grep -i dhcp /var/log/cobbler/cobbler.log | tail -3

实测回显:

2023-01-31 21:54:40.000000000 +0000 3646 /etc/dhcp/dhcpd.conf
0
[2026-10-22_095634_Sync_e08b554c4c53411a8e13cec2e7d7817c] 2026-10-22T09:56:34 - INFO | rendering DHCP files
[2026-10-22_095634_Sync_e08b554c4c53411a8e13cec2e7d7817c] 2026-10-22T09:56:34 - INFO | running: ['dhcpd', '-t', '-q']
[2026-10-22_095634_Sync_e08b554c4c53411a8e13cec2e7d7817c] 2026-10-22T09:56:34 - INFO | running: ['systemctl', 'restart', 'isc-dhcp-server']

日志有 rendering DHCP files,却没有 generating /etc/dhcp/dhcpd.conf。查源码定位原因——ISC 管理器 cobbler/modules/managers/isc.py 的 write_configs() 判断的是 manage_dhcp_v4/manage_dhcp_v6:

def write_configs(self):
    if self.settings.manage_dhcp_v4:
        self.write_v4_config()
    if self.settings.manage_dhcp_v6:
        self.write_v6_config()

而 manage_dhcp_v4 默认值是 false。补上开关再 sync:

sed -i 's/^manage_dhcp_v4:.*/manage_dhcp_v4: true/' /etc/cobbler/settings.yaml
systemctl restart cobblerd
cobbler setting report --name=manage_dhcp_v4
cobbler sync | grep -E 'generating /etc/dhcp|dhcpd|TASK'
stat -c '%y %s %n' /etc/dhcp/dhcpd.conf
grep -c Cobbler /etc/dhcp/dhcpd.conf

实测回显:

manage_dhcp_v4                          : True
generating /etc/dhcp/dhcpd.conf
running: ['dhcpd', '-t', '-q']
running: ['systemctl', 'restart', 'isc-dhcp-server']
*** TASK COMPLETE ***
2026-10-22 10:00:42.084950739 +0000 3089 /etc/dhcp/dhcpd.conf
2

文件时间戳变为当前时间、出现 2 处 Cobbler 标记,生成成功。查看生成内容的关键段:

head -8 /etc/dhcp/dhcpd.conf
grep -nE 'subnet |range dynamic|next-server|host |fixed-address|hardware ethernet' /etc/dhcp/dhcpd.conf | grep -v '^\s*#' | head -9

实测回显:

# ******************************************************************
# Cobbler managed dhcpd.conf file
# generated from cobbler dhcp.conf template (Thu Oct 22 10:00:42 2026)
# Do NOT make changes to /etc/dhcpd.conf. Instead, make your changes
# in /etc/cobbler/dhcp.template, as /etc/dhcpd.conf will be
# overwritten.
# ******************************************************************
19:subnet 192.168.1.0 netmask 255.255.255.0 {
23:     range dynamic-bootp        192.168.1.100 192.168.1.254;
26:     next-server                10.89.57.2;
87:# group for Cobbler DHCP tag: default
88:group {
89:    host generic1 {
90:            hardware ethernet 52:54:00:aa:bb:cc;
91:            fixed-address 10.89.57.50;
93:            next-server 10.89.57.2;

可以看到:网段声明来自模板,主机声明 host generic1 由 system 对象 web-01(MAC 52:54:00:aa:bb:cc、IP 10.89.57.50)自动合成。

排障实录:dhcpd 起不来。此时服务却是 failed:

systemctl is-active isc-dhcp-server
journalctl -u isc-dhcp-server --no-pager | grep -iE 'no subnet|not configured' | tail -2
ip -4 addr show eth0 | grep inet

实测回显:

failed
Oct 22 10:00:42 cobbler-server dhcpd[9845]: No subnet declaration for eth0 (10.89.57.2).
Oct 22 10:00:42 cobbler-server dhcpd[9845]: Not configured to listen on any interfaces!
    inet 10.89.57.2/24 brd 10.89.57.255 scope global eth0

原因:/etc/cobbler/dhcp.template 自带的示例网段是 192.168.1.0/24,而本机网卡在 10.89.57.0/24,dhcpd 找不到与网卡匹配的 subnet 声明就拒绝监听。修改模板网段与本机一致,重新 sync:

sed -i 's/^subnet 192.168.1.0 netmask 255.255.255.0 {/subnet 10.89.57.0 netmask 255.255.255.0 {/; s/range dynamic-bootp        192.168.1.100 192.168.1.254;/range dynamic-bootp        10.89.57.100 10.89.57.200;/' /etc/cobbler/dhcp.template
cobbler sync | grep -E 'generating /etc/dhcp|systemctl|TASK'
systemctl is-active isc-dhcp-server

实测回显:

generating /etc/dhcp/dhcpd.conf
running: ['systemctl', 'restart', 'isc-dhcp-server']
*** TASK COMPLETE ***
active

服务转 active,DHCP 分配链路完整打通。

还原:实验后将三个文件与所有开关恢复原状:

sed -i 's/^manage_dhcp:.*/manage_dhcp: false/; s/^manage_dhcp_v4:.*/manage_dhcp_v4: false/' /etc/cobbler/settings.yaml
cp /etc/cobbler/dhcp.template.orig.bak /etc/cobbler/dhcp.template
cp /etc/dhcp/dhcpd.conf.stock.bak /etc/dhcp/dhcpd.conf
systemctl stop isc-dhcp-server && systemctl disable isc-dhcp-server
cobbler setting report --name=manage_dhcp
cobbler setting report --name=manage_dhcp_v4
cobbler sync | grep -E '01-52-54|TASK'

实测回显:

manage_dhcp                             : False
manage_dhcp_v4                          : False
Successfully removed "/srv/tftpboot/pxelinux.cfg/01-52-54-00-aa-bb-cc"
generating: /srv/tftpboot/pxelinux.cfg/01-52-54-00-aa-bb-cc
*** TASK COMPLETE ***

验证收尾:两项开关回到 False、模板与 dhcpd.conf 恢复原版、PXE 配置照常生成——说明关闭 DHCP 管理后 Cobbler 只收缩权限,不影响 PXE 文件下发。

4.4 default_password_crypted:装机默认 root 口令

该参数是自动安装过程中为裸机设置的默认 root 口令,值为 MD5 crypt($1$ 开头)格式哈希。先用 openssl 生成一个新哈希:

openssl passwd -1 -salt c7demo 'q1w2e3r4'

实测回显:

$1$c7demo$pgMK8EWEVQsZBRE82p2p71

动态改值并验证三处一致性(report 内存值、磁盘文件、模板变量):

cobbler setting edit --name=default_password_crypted --value='$1$c7demo$pgMK8EWEVQsZBRE82p2p71'
cobbler setting report --name=default_password_crypted
grep '^default_password_crypted:' /etc/cobbler/settings.yaml
cobbler system dumpvars --name=web-01 | grep '^default_password_crypted'

实测回显:

default_password_crypted                : $1$c7demo$pgMK8EWEVQsZBRE82p2p71
default_password_crypted: $1$c7demo$pgMK8EWEVQsZBRE82p2p71
default_password_crypted: $1$c7demo$pgMK8EWEVQsZBRE82p2p71

三处一致,说明改值即刻落盘并作为 @@default_password_crypted@@ 模板变量向渲染文件传播。还原原哈希:

cobbler setting edit --name=default_password_crypted --value='$1$cobbler$7pAP9eGoEwElZgph4fc400'
cobbler setting report --name=default_password_crypted

实测回显:

default_password_crypted                : $1$cobbler$7pAP9eGoEwElZgph4fc400

验证收尾:report 恢复原值。两点提醒:其一,settings.yaml 里的只是哈希,泄露风险仍存在,生产环境应定期更换装机默认口令;其二,该参数只对未显式配置口令的装机对象生效,system/profile 层的自定义自动安装模板可覆盖它。

4.5 其他常用参数速览

下表为当前环境实测取值(cobbler setting report 输出)。标注「本篇实测」的参数已在实验中验证过改动效果;标注「保持默认」的参数为生产常用项,取值为本机实测,改动效果不在本篇展开:

参数当前值作用状态
http_port80HTTP 下载源端口保持默认
xmlrpc_port25151cobblerd XML-RPC 端口保持默认
tftpboot_location/srv/tftpbootTFTP 根目录保持默认
webdir/var/www/cobblerWeb 发布根目录保持默认
restart_dhcpTruesync 后自动重启 DHCP 服务保持默认
restart_dnsTruesync 后自动重启 DNS 服务保持默认
enable_menuTrue生成 PXE 网络安装菜单保持默认
enable_ipxeFalse启用 iPXE 引导保持默认
allow_duplicate_ipsFalse禁止重复 IP 的对象注册保持默认
allow_duplicate_macsFalse禁止重复 MAC 的对象注册保持默认
pxe_just_onceTrue装机完成一次后自动改本地引导,防止循环装机保持默认
manage_dnsFalse是否托管 BIND保持默认
manage_rsyncFalse是否托管 rsync 配置保持默认
default_name_servers[]装机默认 DNS 服务器列表保持默认
autoinstall_templates_dir/var/lib/cobbler/templates自动安装模板目录保持默认
autoinstall_snippets_dir/var/lib/cobbler/snippets模板片段目录保持默认
signature_path/var/lib/cobbler/distro_signatures.json系统发行版签名库路径保持默认
client_use_httpsFalseCLI 访问 API 是否走 HTTPS保持默认
server10.89.57.2服务端地址本篇实测
next_server_v410.89.57.2PXE 指向的 TFTP 地址本篇实测
manage_dhcp / manage_dhcp_v4False / FalseDHCP 托管双开关本篇实测
default_password_crypted$1$cobbler$...装机默认 root 口令哈希本篇实测
allow_dynamic_settingsFalse是否允许 API 动态改参本篇实测

五、distro/profile/system 对象模型

settings.yaml 是全局默认值,而 Cobbler 的业务数据存放在九类对象中(distro、profile、system、repos、images、mgmtclasses、packages、files、menus),装机主链路是 distro → profile → system 三层继承。

5.1 三层继承链的读法

  • distro(发行版):最小对象,描述一套内核+initrd(如 ubuntu-2004-x86_64),对应一次 cobbler import 的成果;
  • profile(装机方案):引用一个 distro,叠加自动安装模板与内核参数;
  • system(装机对象):引用一个 profile,绑定 MAC 地址、IP、主机名,一台裸机一条记录。

用 report 看三层的字段来源:

cobbler distro report --name=ubuntu-2004-x86_64 | head -8

实测回显:

Name                           : ubuntu-2004-x86_64
Architecture                   : x86_64
Automatic Installation Template Metadata : {'tree': 'http://@@http_server@@/cblr/links/ubuntu-2004-x86_64'}
TFTP Boot Files                : {}
Boot loaders                   : <<inherit>>
Breed                          : ubuntu
Comment                        :
Fetchable Files                : {}
cobbler profile report --name=ubuntu-2004-x86_64 | head -10

实测回显:

Name                           : ubuntu-2004-x86_64
Automatic Installation Template :
Automatic Installation Metadata : <<inherit>>
TFTP Boot Files                : <<inherit>>
Boot loaders                   : <<inherit>>
Comment                        :
DHCP Tag                       :
Distribution                   : ubuntu-2004-x86_64
Enable iPXE?                   : <<inherit>>
Enable PXE Menu?               : <<inherit>>

5.2 <<inherit>>:继承标记的读法

<<inherit>> 表示该字段不在此对象上取值,向上游对象回溯:system 找 profile,profile 找 distro,distro 再找不到就落到 settings.yaml 全局默认。例如 system web-01 的头部字段:

cobbler system report --name=web-01 | head -12

实测回显:

Name                           : web-01
Automatic Installation Template : <<inherit>>
Automatic Installation Template Metadata : <<inherit>>
TFTP Boot Files                : <<inherit>>
Boot loaders                   : <<inherit>>
Comment                        :
Enable iPXE?                   : <<inherit>>
Fetchable Files                : <<inherit>>
DHCP Filename Override         : <<inherit>>
Gateway                        :
Hostname                       : web-01.lan
Image                          :

5.3 对象变量合成实测:system dumpvars

装机时真正渲染进模板的变量,是全局 settings、distro/profile/system 字段与对象自身的合成结果:

cobbler system report --name=web-01 | grep -E 'Interface|MAC|IP Address|Netboot'
cobbler system dumpvars --name=web-01 | grep -E '^(http_server|default_password_crypted|ks_meta)'

实测回显:

Netboot Enabled                : True
Interface =====                : default
IP Address                     : 10.89.57.50
MAC Address                    : 52:54:00:aa:bb:cc
Management Interface           : False
default_password_crypted: $1$cobbler$7pAP9eGoEwElZgph4fc400
http_server: 10.89.57.2
ks_meta: {'tree': 'http://@@http_server@@/cblr/links/ubuntu-2004-x86_64'}

验证收尾:http_server 来自全局 server 参数、default_password_crypted 来自全局默认、ks_meta 的 tree 指向 distro 链接目录——三类来源在同一份变量表里汇合,与第 4.1/4.4 节的改值实验互相印证。这也解释了参数与对象的边界:settings.yaml 管「这台装机服务器怎么对外服务」,对象管「这一台裸机怎么装」。

六、生产配置建议

结合以上实测,给出一份生产环境的 settings.yaml 核心段参考(以装机网段 10.89.57.0/24 为例):

# 服务端地址:本机装机网卡的真实 IP
server: 10.89.57.2
# PXE 引导指向的 TFTP 地址:通常与 server 相同
next_server_v4: 10.89.57.2
# DHCP 托管:两个开关都要打开(见 4.3 实测)
manage_dhcp: true
manage_dhcp_v4: true
# 装机默认 root 口令:用 openssl passwd -1 生成后替换
default_password_crypted: "$1$更换为本机生成的哈希"
# 生产环境关闭动态改参,变更走文件+重启的可审计路径
allow_dynamic_settings: false

配套动作清单:

  1. 修改 /etc/cobbler/dhcp.template,将示例网段改为真实装机网段(见 4.3 排障实录);
  2. systemctl restart cobblerd 重读配置;
  3. cobbler sync 生成 dhcpd.conf 与 PXE 配置;
  4. 按序验证:cobbler check 无 ERROR → /etc/dhcp/dhcpd.conf 头部出现 Cobbler 标记 → systemctl is-active isc-dhcp-server 为 active → journalctl -u isc-dhcp-server 无 "No subnet declaration"。

七、常见问题(FAQ)

以下问题全部来自本文实测过程,附实测定位与解法。

7.1 执行 cobbler setting edit 报 Dynamic settings changes are not enabled

原因:动态改参默认关闭。解法:settings.yaml 中 allow_dynamic_settings: true 并重启 cobblerd;生产环境建议保持关闭。

7.2 打开了 manage_dhcp,cobbler sync 却不生成 dhcpd.conf

实测现象:sync 正常结束、日志只有 rendering DHCP files,dhcpd.conf 时间戳与内容不变。原因:IPv4 配置生成由 manage_dhcp_v4 独立控制(见 4.3 源码定位),该参数默认 false。解法:manage_dhcp 与 manage_dhcp_v4 同时置 true,重启 cobblerd 后重新 sync。

7.3 dhcpd 服务 failed:No subnet declaration for eth0

原因:/etc/cobbler/dhcp.template 示例网段(192.168.1.0/24)与本机网卡网段不符,dhcpd 拒绝监听。解法:把模板中的 subnet/range 改为真实装机网段后 cobbler sync(见 4.3),确认 systemctl is-active isc-dhcp-server 为 active。

7.4 改错 server 后所有 cobbler 命令失联

实测现象:cobbler setting report 报 "httpd does not appear to be running and proxying Cobbler" 且原始错误为 OSError: [Errno 113] No route to host。原因:CLI 按磁盘上的 settings.yaml 的 server 值发起 XML-RPC 连接,server 改成不可达地址即失联。解法:直接编辑 settings.yaml 恢复正确地址,systemctl restart cobblerd 后验证。

7.5 cobbler system get-autoinstall 提示 value missing or invalid

实测回显:

# automatic installation file value missing or invalid at system web-01

原因:web-01 及其 profile 未指定自动安装模板,渲染无从谈起。这不是故障:先 cobbler profile edit --autoinstall=<模板> 或在 system 层覆盖后再渲染。

7.6 想一次列出全部参数,cobbler setting list 却打印 usage

实测:3.3.10 的 cobbler setting 子命令只有 edit 与 report(见 3.1 回显),list 子命令在 4.0 系列才提供。解法:全量参数直接读 /etc/cobbler/settings.yaml(241 行),单参数用 cobbler setting report --name=<参数名>。

八、参考链接