Cobbler自动化部署系统:从入门到实战完整指南
前言
在数据中心运维工作中,操作系统安装是最基础也是最频繁的操作之一。当服务器规模达到数十台甚至数百台时,传统的光盘/U盘逐台安装方式显然无法满足效率要求。Cobbler作为一款强大的自动化部署工具,集成了DHCP、TFTP、HTTP等服务,能够实现操作系统的全自动批量安装,大大提升了运维效率。
本文将系统性地介绍Cobbler的完整知识体系,从基础概念到实战部署,涵盖传统BIOS和UEFI两种引导模式,支持CentOS、RHEL、AlmaLinux、Ubuntu、Debian等主流Linux发行版。
一、Cobbler概述
1.1 什么是Cobbler
Cobbler是一款开源的Linux操作系统自动化部署工具,由Python开发,本质上是对PXE(预启动执行环境)技术的二次封装和增强。它集成了DHCP、TFTP、DNS、HTTP等服务,形成一个集中化的管理节点,能够实现操作系统的无人值守安装。
核心功能:
-
配置DHCP、TFTP、DNS、HTTP等服务
-
创建和管理操作系统安装源(YUM/APT仓库)
-
解压缩和准备安装介质
-
与Puppet、Ansible等配置管理系统集成
-
支持电源管理(IPMI)实现远程开关机
-
提供CLI和Web管理界面及REST API接口
支持的平台:
-
物理机(x86_64架构)
-
KVM虚拟机
-
Xen虚拟化
1.2 Cobbler能做什么
| 功能 | 说明 |
|---|---|
| 自动化系统安装 | 服务器上架后网络引导自动安装CentOS、RHEL、Ubuntu等系统 |
| 配置管理 | 安装过程中配置IP地址、主机名、安装包等参数 |
| 初始化脚本 | 安装后自动执行自定义脚本(如Zabbix-agent安装、系统优化) |
| 内部YUM源 | 可作为企业内部的软件包仓库 |
| 系统重装 | 支持已部署系统的重装操作 |
| 高级网络配置 | 支持网卡路由、DNS配置、网卡Bonding |
| API集成 | 提供REST API,可与企业内部系统集成 |
1.3 Cobbler应用架构
二、PXE自动化安装服务
2.1 PXE介绍
PXE(Preboot eXecution Environment,预启动执行环境)是Intel开发的一项网络引导技术,允许计算机通过网络接口而不是本地存储设备(如硬盘、光盘)来启动操作系统。
必要条件:
-
计算机网卡支持PXE(集成BOOTROM芯片)
-
主板支持网络引导启动
2.2 PXE工作流程
PXE采用Client/Server模式,PXE Client程序位于网卡的ROM芯片中。整个工作流程需要以下服务器配合:
| 服务器 | 作用 | 说明 |
|---|---|---|
| DHCP服务器 | 分配IP地址 | 为客户端提供IP及引导文件位置信息 |
| TFTP服务器 | 提供引导文件 | 传输pxelinux.0、grubx64.efi等启动文件 |
| HTTP/NFS服务器 | 提供安装源 | 存放操作系统ISO镜像文件和应答文件 |

2.3 TFTP协议简介
TFTP(Trivial File Transfer Protocol,简单文件传输协议):
-
基于UDP协议,端口号69
-
设计简单,无认证机制
-
适用于小文件的快速传输
-
常用于PXE引导场景
2.4 DHCP协议简介
DHCP(Dynamic Host Configuration Protocol,动态主机配置协议):
-
自动为网络中的设备分配IP地址
-
可同时指定网关、DNS、TFTP服务器等信息
-
在PXE环境中,通过DHCP的
next-server和filename选项指定TFTP服务器地址和引导文件名
三、自动应答配置文件
3.1 Kickstart(红帽系列)
Kickstart是红帽系列Linux(RHEL、CentOS、AlmaLinux等)的自动化安装配置文件,将安装过程中需要手动输入的参数预写入ks.cfg文件,实现无人值守安装。
Kickstart文件组成部分:
| 部分 | 说明 |
|---|---|
| 安装选项 | 语言、时区、防火墙、磁盘分区、root密码等 |
| %pre | 安装前执行的脚本(在分区前运行) |
| %packages | 指定要安装的软件包组或单个软件包 |
| %post | 安装后执行的脚本(如系统初始化、部署监控Agent) |
Kickstart示例片段:
# 安装选项
install
url --url=http://192.168.38.221/centos7
lang en_US.UTF-8
keyboard us
timezone Asia/Shanghai
rootpw --iscrypted $6$randomsalt$encryptedpassword
# 分区配置
clearpart --all --initlabel
autopart --type=lvm
# 软件包
%packages
@base
@core
vim
wget
%end
# 安装后脚本
%post
echo "System installation completed at $(date)" > /root/install.log
%end
3.2 Preseed(Debian/Ubuntu 18.04及以前)
Debian和Ubuntu 18.04及更早版本使用Preseed文件实现自动化安装,采用键值对格式定义安装参数。
Preseed示例:
d-i debian-installer/locale string en_US
d-i keyboard-configuration/xkb-keymap select us
d-i netcfg/choose_interface select auto
d-i netcfg/get_hostname string ubuntu-server
d-i mirror/country string manual
d-i mirror/http/hostname string archive.ubuntu.com
d-i partman-auto/method string lvm
d-i passwd/root-login boolean true
d-i passwd/root-password password admin123
d-i passwd/root-password-again password admin123
tasksel tasksel/first multiselect server
3.3 Cloud-init(Ubuntu 20.04+)
Ubuntu从20.04版本开始,使用Cloud-init替代Preseed作为自动化配置工具。Cloud-init是Canonical开发的跨平台云实例初始化工具,功能更加强大。
Cloud-init核心文件:
| 文件 | 用途 |
|---|---|
| user-data | 用户自定义配置(用户、密码、脚本、软件包等) |
| meta-data | 实例元数据(主机名、实例ID等) |
| vendor-data | 厂商自定义数据 |
User-data示例:
#cloud-config
autoinstall:
version: 1
identity:
hostname: ubuntu-server
username: ubuntu
password: "$6$randomsalt$encryptedpassword"
storage:
layout:
name: lvm
locale: en_US
timezone: Asia/Shanghai
packages:
- vim
- htop
- net-tools
late-commands:
- 'echo "Installation completed" >> /target/root/install.log'
四、Cobbler安装与配置
4.1 实验环境
| 组件 | 配置 |
|---|---|
| Cobbler服务器 | AlmaLinux 9 / RHEL 9(IP: 192.168.38.221) |
| 客户端 | 任意支持PXE启动的物理机或虚拟机 |
| 网络要求 | 同一局域网,DHCP服务可达 |
4.2 安装Cobbler
# 安装EPEL源
[root@cobbler ~]# yum install -y epel-release
# 安装Cobbler及相关组件
[root@cobbler ~]# yum install -y cobbler cobbler-web dhcp-server pykickstart httpd yum-utils
# 启动并设置开机自启
[root@cobbler ~]# systemctl restart httpd cobblerd
[root@cobbler ~]# systemctl enable httpd cobblerd
4.3 Cobbler目录结构
| 目录 | 说明 |
|---|---|
/etc/cobbler/ |
配置文件目录 |
/var/lib/cobbler/ |
数据存储目录 |
/var/www/cobbler/ |
镜像和安装文件目录(HTTP根) |
/var/log/cobbler/ |
日志文件目录 |
/var/lib/tftpboot/ |
TFTP根目录 |
4.4 配置Cobbler
步骤1:执行环境检查
[root@cobbler ~]# cobbler check
根据检查结果,逐一解决以下问题:
步骤2:修改主配置文件
编辑 /etc/cobbler/settings.yaml:
# 设置TFTP服务器IP(本机IP)
next_server_v4: 192.168.38.221
# 设置Cobbler服务器IP
server: 192.168.38.221
# 启用DHCP管理
manage_dhcp: true
manage_tftp: true
manage_dns: false
步骤3:安装引导程序
[root@cobbler ~]# yum install -y syslinux
# 复制PXE引导文件
[root@cobbler ~]# cp /usr/share/syslinux/pxelinux.0 /var/lib/cobbler/loaders/
[root@cobbler ~]# cp /usr/share/syslinux/menu.c32 /var/lib/cobbler/loaders/
[root@cobbler ~]# cp /usr/share/syslinux/ldlinux.c32 /var/lib/cobbler/loaders/
步骤4:配置root密码
# 生成加密密码(密码为admin123456)
[root@cobbler ~]# openssl passwd -1 -salt `openssl rand -hex 4` 'admin123456'
$1$abc123$def456ghi789jkl012mno345
# 将生成的加密字符串写入settings.yaml
# default_password_crypted: "$1$abc123$def456ghi789jkl012mno345"
步骤5:配置DHCP模板
编辑 /etc/cobbler/dhcp.template:
# 关键配置片段
subnet 192.168.38.0 netmask 255.255.255.0 {
option routers 192.168.38.1;
option domain-name-servers 192.168.38.1;
option subnet-mask 255.255.255.0;
range dynamic-bootp 192.168.38.100 192.168.38.200;
filename "/pxelinux.0";
next-server $next_server;
default-lease-time 21600;
max-lease-time 43200;
}
步骤6:同步配置并重启服务
[root@cobbler ~]# cobbler sync
[root@cobbler ~]# systemctl restart cobblerd httpd xinetd
4.5 导入系统镜像
导入CentOS 7镜像:
# 挂载ISO镜像
[root@cobbler ~]# mount -o loop /data/CentOS-7-x86_64-DVD-2009.iso /mnt/centos7
# 导入镜像到Cobbler
[root@cobbler ~]# cobbler import --path=/mnt/centos7 --name=centos7 --arch=x86_64
# 查看已导入的发行版和配置文件
[root@cobbler ~]# cobbler list
distros:
centos7-x86_64
profiles:
centos7-x86_64
修改Profile关联的Kickstart文件:
[root@cobbler ~]# cobbler profile edit --name=centos7-x86_64 --autoinstall=/var/lib/cobbler/templates/centos7.ks
生成GRUB2引导文件:
[root@cobbler ~]# cobbler mkloaders
[root@cobbler ~]# cobbler sync
[root@cobbler ~]# systemctl restart cobblerd
五、传统模式全自动安装
5.1 安装CentOS 7 / RHEL 8
在传统BIOS/Legacy模式下,配置完成后客户端只需设置网络启动(PXE),即可自动引导安装。
客户端操作:
-
开机进入BIOS设置
-
将启动顺序调整为网络启动(PXE)优先
-
保存重启
-
等待自动进入安装界面
-
系统自动完成安装
5.2 安装RHEL 9 / AlmaLinux 9
Kickstart模板调整:
RHEL 9/AlmaLinux 9在Kickstart语法上有以下变化:
| 旧语法 | 新语法 |
|---|---|
auth |
authselect |
需要install |
需注释掉install |
Kickstart示例:
# 注释掉install
# install
# 使用authselect替代auth
authselect select minimal
url --url=http://192.168.38.221/almalinux9
lang en_US.UTF-8
keyboard us
timezone Asia/Shanghai
rootpw --iscrypted $6$...
去除kssendmac警告:
编辑 /usr/lib/python3.9/site-packages/cobbler/tftpgen.py,找到第868行附近:
# 原代码
# args.append("kssendmac")
# 修改为
args.append("inst.ks.sendmac")
修改后重启Cobbler服务并重新同步:
[root@cobbler ~]# systemctl restart cobblerd
[root@cobbler ~]# cobbler sync
5.3 安装Ubuntu 18.04
使用版本: ubuntu-18.04-legacy-server-amd64.iso
导入命令:
[root@cobbler ~]# mount -o loop /data/ubuntu-18.04-legacy-server-amd64.iso /mnt/ubuntu18
[root@cobbler ~]# cobbler import --path=/mnt/ubuntu18 --name=ubuntu18 --arch=x86_64
导入后会有两个发行版选项,建议使用 ubuntu18-hwe-x86_64。
替换initrd.gz文件:
[root@cobbler ~]# cp /mnt/ubuntu18/install/netboot/ubuntu-installer/amd64/initrd.gz /var/www/cobbler/distro_mirror/ubuntu18-x86_64/install/
六、Legacy Boot与UEFI Boot机制
6.1 Legacy BIOS vs UEFI
| 对比项 | Legacy BIOS | UEFI |
|---|---|---|
| 分区表 | MBR(主引导记录) | GPT(GUID分区表) |
| 支持架构 | 32位和64位 | 仅64位 |
| 引导文件 | pxelinux.0 | grubx64.efi |
| 配置文件 | /pxelinux.cfg/default | grub.cfg |
| EFI分区 | 不需要 | 需要 /boot/efi 分区 |
6.2 Legacy Boot + PXE
DHCP配置:
# 指定TFTP服务器地址
next-server 192.168.38.221;
# 指定引导文件名
filename "pxelinux.0";
TFTP需要提供的文件:
-
pxelinux.0— 主引导程序 -
menu.c32— 菜单界面 -
ldlinux.c32— Linux引导加载器 -
/pxelinux.cfg/default— 启动菜单配置文件
6.3 UEFI Boot + PXE
DHCP配置:
# 指定TFTP服务器地址
next-server 192.168.38.221;
# 指定UEFI引导文件名
filename "grubx64.efi";
TFTP需要提供的文件:
-
grubx64.efi— GRUB2 UEFI引导程序 -
grub.cfg— GRUB配置文件 -
内核和initrd文件(vmlinuz和initrd.img)
七、使用PXE+TFTP构建UEFI自动安装环境
7.1 构建UEFI引导环境
创建目录结构:
[root@cobbler ~]# mkdir -p /var/lib/cobbler/loaders/uefi/
[root@cobbler ~]# mkdir -p /var/lib/tftpboot/grub/
拷贝GRUB引导文件(从AlmaLinux 9 ISO获取):
[root@cobbler ~]# cp /mnt/almalinux9/EFI/BOOT/BOOTX64.EFI /var/lib/cobbler/loaders/uefi/grubx64.efi
[root@cobbler ~]# cp /var/lib/cobbler/loaders/uefi/grubx64.efi /var/lib/tftpboot/
准备内核和initrd:
[root@cobbler ~]# mkdir -p /var/lib/tftpboot/rhel9
[root@cobbler ~]# cp /mnt/almalinux9/images/pxeboot/vmlinuz /var/lib/tftpboot/rhel9/
[root@cobbler ~]# cp /mnt/almalinux9/images/pxeboot/initrd.img /var/lib/tftpboot/rhel9/
7.2 编写GRUB配置文件
创建 /var/lib/tftpboot/grub/grub.cfg:
set default="1"
set timeout=60
menuentry "Auto Install AlmaLinux 9" {
linuxefi /rhel9/vmlinuz inst.stage2=http://192.168.38.221/almalinux9 inst.repo=http://192.168.38.221/almalinux9 inst.ks=http://192.168.38.221/almalinux9.ks
initrdefi /rhel9/initrd.img
}
7.3 AlmaLinux 9 Kickstart示例
/var/www/cobbler/almalinux9.ks:
# 注释install
# install
# 使用authselect替代auth
authselect select minimal
url --url=http://192.168.38.221/almalinux9
lang en_US.UTF-8
keyboard us
timezone Asia/Shanghai
rootpw --iscrypted $6$...
# UEFI分区配置
clearpart --all --initlabel
part /boot/efi --fstype=efi --size=200
part /boot --fstype=ext4 --size=1024
part pv.01 --size=1 --grow
volgroup vg01 pv.01
logvol / --fstype=ext4 --name=root --vgname=vg01 --size=1 --grow
# 软件包
%packages
@base
@core
vim
wget
net-tools
%end
# 安装后脚本
%post
echo "AlmaLinux 9 installation completed" > /root/install.log
%end
八、配置各系统的UEFI引导
8.1 CentOS 8 / RHEL 8 / AlmaLinux 8
拷贝内核文件:
[root@cobbler ~]# mkdir -p /var/lib/tftpboot/rhel8
[root@cobbler ~]# cp /mnt/rhel8/images/pxeboot/vmlinuz /var/lib/tftpboot/rhel8/
[root@cobbler ~]# cp /mnt/rhel8/images/pxeboot/initrd.img /var/lib/tftpboot/rhel8/
在grub.cfg中添加引导项:
menuentry "Auto Install RHEL 8" {
linuxefi /rhel8/vmlinuz inst.stage2=http://192.168.38.221/rhel8 inst.repo=http://192.168.38.221/rhel8 inst.ks=http://192.168.38.221/rhel8.ks
initrdefi /rhel8/initrd.img
}
RHEL 8 Kickstart示例(注意auth和install参数):
install
auth --enableshadow --passalgo=sha512
url --url=http://192.168.38.221/rhel8
lang en_US.UTF-8
keyboard us
timezone Asia/Shanghai
rootpw --iscrypted $6$...
8.2 Ubuntu 20.04 / 22.04
准备工作:
Ubuntu 20.04+使用live-server版本,需要拷贝 casper/ 目录下的内核和initrd:
[root@cobbler ~]# mkdir -p /var/lib/tftpboot/ubuntu22
[root@cobbler ~]# cp /mnt/ubuntu22/casper/vmlinuz /var/lib/tftpboot/ubuntu22/
[root@cobbler ~]# cp /mnt/ubuntu22/casper/initrd /var/lib/tftpboot/ubuntu22/
grub.cfg引导项:
menuentry "Auto Install Ubuntu 22.04" {
linux /ubuntu22/vmlinuz url=http://192.168.38.221/ubuntu22.iso autoinstall ds=nocloud-net;s=http://192.168.38.221/cloud-init/
initrd /ubuntu22/initrd
}
Cloud-init配置(user-data):
/var/www/cobbler/cloud-init/user-data:
#cloud-config
autoinstall:
version: 1
identity:
hostname: ubuntu-server
username: ubuntu
password: "$6$randomsalt$encryptedpassword"
storage:
layout:
name: lvm
locale: en_US
timezone: Asia/Shanghai
packages:
- vim
- htop
- net-tools
late-commands:
- 'echo "Ubuntu installation completed" >> /target/root/install.log'
meta-data:
instance-id: ubuntu-server
local-hostname: ubuntu-server
8.3 Debian 11
下载netboot文件:
[root@cobbler ~]# cd /tmp
[root@cobbler ~]# wget https://deb.debian.org/debian/dists/bullseye/main/installer-amd64/current/images/netboot/netboot.tar.gz
[root@cobbler ~]# tar -xzf netboot.tar.gz
[root@cobbler ~]# cp ./debian-installer/amd64/initrd.gz /var/lib/tftpboot/debian11/
[root@cobbler ~]# cp ./debian-installer/amd64/linux /var/lib/tftpboot/debian11/
grub.cfg引导项:
menuentry "Auto Install Debian 11" {
linux /debian11/linux url=http://192.168.38.221/debian11.iso auto=true priority=critical preseed/url=http://192.168.38.221/debian11.preseed
initrd /debian11/initrd.gz
}
Preseed配置(preseed.cfg):
# 语言和地区
d-i debian-installer/locale string en_US
d-i keyboard-configuration/xkb-keymap select us
d-i netcfg/choose_interface select auto
d-i netcfg/get_hostname string debian-server
d-i netcfg/get_domain string example.com
# 镜像源(使用国内镜像)
d-i mirror/country string manual
d-i mirror/http/hostname string mirrors.ustc.edu.cn
d-i mirror/http/directory string /debian
d-i mirror/http/proxy string
# 分区配置(格式:size priority maxsize filesystem mountpoint)
d-i partman-auto/choose_recipe select atomic
d-i partman-partitioning/confirm_write_new_label boolean true
d-i partman/choose_partition select finish
d-i partman/confirm boolean true
d-i partman/confirm_nooverwrite boolean true
# 用户和密码
d-i passwd/root-login boolean true
d-i passwd/root-password password admin123
d-i passwd/root-password-again password admin123
# 软件包选择
tasksel tasksel/first multiselect server
d-i pkgsel/include string vim wget curl net-tools
# 允许未认证软件包(解决签名问题)
d-i debian-installer/allow_unauthenticated string true
# 后期脚本
d-i preseed/late_command string \
in-target echo "Debian installation completed" > /root/install.log
九、常用管理命令
| 命令 | 用途 |
|---|---|
cobbler check |
检查Cobbler环境配置 |
cobbler sync |
同步所有配置到相关服务 |
cobbler list |
列出所有已导入的发行版和配置文件 |
cobbler distro list |
列出所有发行版 |
cobbler profile list |
列出所有配置文件 |
cobbler import --path=/path --name=name --arch=arch |
导入系统镜像 |
cobbler profile edit --name=name --autoinstall=ks.cfg |
修改配置文件关联的应答文件 |
cobbler mkloaders |
生成GRUB引导文件 |
cobbler repo add --name=name --mirror=url |
添加YUM仓库 |
cobbler system add --name=name --profile=profile |
添加特定系统(指定MAC地址) |
十、常见问题排查
10.1 DHCP服务未启动
# 检查DHCP服务状态
systemctl status dhcpd
# 查看DHCP日志
tail -f /var/log/messages | grep dhcp
10.2 TFTP传输失败
# 检查TFTP服务状态
systemctl status xinetd
# 检查TFTP根目录权限
ls -la /var/lib/tftpboot/
chmod -R 755 /var/lib/tftpboot/
10.3 客户端获取不到IP
-
确认网络连通性
-
确认DHCP服务器配置的网段和地址池
-
检查DHCP服务是否绑定到正确的网卡
10.4 Kickstart文件无法下载
-
确认HTTP服务状态:
systemctl status httpd -
确认Kickstart文件路径和权限
-
确认防火墙开放80端口:
firewall-cmd --add-service=http
10.5 UEFI引导失败
-
确认客户端支持UEFI引导
-
确认grubx64.efi文件存在且版本匹配
-
检查grub.cfg配置文件语法是否正确
十一、总结
本文系统性地介绍了Cobbler自动化部署工具的完整知识体系,涵盖以下核心内容:
| 核心知识点 | 说明 |
|---|---|
| Cobbler基础架构 | 集成了DHCP、TFTP、HTTP等服务,实现集中式自动化部署 |
| PXE工作流程 | 基于网络引导技术,Client/Server模式自动安装 |
| 应答文件配置 | Kickstart(红帽系列)、Preseed(Debian/Ubuntu 18.04)、Cloud-init(Ubuntu 20.04+) |
| Legacy vs UEFI | 两种引导模式的原理、配置差异及迁移方法 |
| 多发行版支持 | CentOS、RHEL、AlmaLinux、Ubuntu、Debian的自动安装配置 |
通过Cobbler,运维团队可以:
-
极大提升部署效率:新服务器上架后无需人工干预即可完成操作系统安装
-
统一系统标准:通过标准化的应答文件保证所有服务器配置的一致性
-
灵活的扩展能力:通过安装后脚本实现系统初始化、监控部署等自动化操作
-
降低运维成本:减少重复性劳动,让运维人员专注于更有价值的工作
📌 相关文章推荐:
《Ansible自动化运维工具完整知识体系》
《Zabbix监控Windows应用实践》
《PXE网络安装环境搭建完全指南》
如果文章对您有帮助,欢迎点赞收藏!如有疑问,请在评论区留言交流。
原创文章,转载请注明出处。
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐




所有评论(0)