目录
案例2:修改所有web-server配置文件的kickstart
一、Cobbler简介
Cobbler是一个Linux安装服务器,可以快速设置网络安装环境,实现批量自动化安装操作系统。它集成了PXE、DHCP、TFTP、DNS、Kickstart等服务,简化了批量部署流程。
二、Cobbler各组件作用详解
1. 核心组件
1.1 Cobbler Server
-
作用:主服务进程,协调所有其他组件的工作
-
功能:管理配置、处理API请求、生成安装配置、同步各服务
1.2 Cobbler Web UI
-
作用:基于Web的管理界面
-
功能:提供图形化操作方式,方便用户管理发行版、配置文件和系统
2. 网络服务组件
2.1 DHCP服务
-
作用:动态主机配置协议服务
-
功能:
-
为客户端分配IP地址
-
告知客户端TFTP服务器地址
-
提供PXE启动所需的引导文件位置
-
2.2 TFTP服务
-
作用:简单文件传输协议服务
-
功能:
-
存储和提供PXE启动文件(pxelinux.0)
-
提供内核(vmlinuz)和初始内存盘(initrd.img)
-
传输引导加载程序配置文件
-
2.3 HTTP/FTP/NFS
-
作用:文件共享服务
-
功能:
-
存储和分发操作系统安装文件(ISO内容)
-
提供Kickstart文件访问
-
可选使用Apache、vsftpd或NFS实现
-
3. 配置管理组件
3.1 Kickstart
-
作用:自动化安装配置文件
-
功能:
-
定义系统安装过程中的所有参数
-
包含分区方案、软件包选择、网络配置等
-
实现无人值守安装
-
3.2 模板系统
-
作用:配置模板引擎
-
功能:
-
使用Cheetah模板语言生成动态配置文件
-
管理DHCP、PXE等服务的配置文件模板
-
支持变量替换和条件逻辑
-
4. 数据管理组件
4.1 发行版(Distro)管理
-
作用:操作系统安装源定义
-
功能:
-
存储不同Linux发行版的内核和initrd路径
-
关联ISO镜像或网络安装源
-
定义架构类型(x86_64/i386等)
-
4.2 配置文件(Profile)管理
-
作用:安装配置组合
-
功能:
-
关联发行版和Kickstart文件
-
定义特定安装场景的配置
-
可包含额外内核参数
-
4.3 系统(System)管理
-
作用:目标机器配置
-
功能:
-
定义单个物理/虚拟机的网络配置
-
指定MAC地址与配置文件的映射
-
设置主机名和IP地址预留
-
5. 辅助工具
5.1 Cobbler Sync
-
作用:配置同步工具
-
功能:
-
将Cobbler配置应用到各服务(DHCP/TFTP等)
-
生成PXE菜单和配置文件
-
确保各服务配置一致
-
5.2 Cobbler Import
-
作用:ISO镜像导入工具
-
功能:
-
自动提取ISO中的安装文件
-
创建对应的发行版和配置文件
-
设置合理的默认参数
-
5.3 Cobbler Repo
-
作用:软件仓库管理
-
功能:
-
创建和管理yum/dnf仓库
-
支持本地和远程仓库
-
可用于安装后软件管理
-
这些组件协同工作,使Cobbler能够实现从网络引导、自动安装到配置管理的完整生命周期管理,大大简化了大规模Linux系统部署的复杂度。
三、安装前准备
-
服务器要求:
-
操作系统:CentOS/RHEL 7/8/9
-
内存:至少2GB
-
磁盘空间:至少20GB可用空间
-
网络:静态IP地址
-
-
安装依赖包:
yum install -y epel-release yum install -y cobbler cobbler-web dhcp tftp-server pykickstart httpd xinetd
四、Cobbler基本配置步骤
1. Cobbler设置
vim /etc/cobbler/settings
####设置如何字段:
server: 设置Cobbler服务器的IP地址或主机名。
next_server: 设置TFTP服务器的IP地址或主机名。
manage_dhcp: 设置为1以启用Cobbler管理DHCP服务。
manage_dns: 设置为1以启用Cobbler管理DNS服务。
pxe_just_once: 设置为1以避免重复PXE引导。
2. 检查配置状态
cobbler check
根据提示解决所有问题,常见问题包括:
-
设置
server
和next_server
为服务器IP -
配置DHCP
-
生成用于TFTF的密码
3. 配置DHCP
vim /etc/cobbler/dnsmasq.template
将dhcp-range=...行注释
编辑/etc/cobbler/dhcp.template
:
subnet 192.168.1.0 netmask 255.255.255.0 {
option routers 192.168.1.1;
option domain-name-servers 192.168.1.1;
option subnet-mask 255.255.255.0;
range dynamic-bootp 192.168.1.100 192.168.1.200;
default-lease-time 21600;
max-lease-time 43200;
next-server $next_server;
class "pxeclients" {
match if substring (option vendor-class-identifier, 0, 9) = "PXEClient";
if option pxe-system-type = 00:02 {
filename "ia64/elilo.efi";
} else if option pxe-system-type = 00:06 {
filename "grub/grub-x86.efi";
} else if option pxe-system-type = 00:07 {
filename "grub/grub-x86_64.efi";
} else {
filename "pxelinux.0";
}
}
}
4. 同步配置
cobbler sync
systemctl restart cobblerd
五、添加安装镜像
1. 挂载ISO镜像
mount -o loop /path/to/CentOS-7-x86_64-DVD-2009.iso /mnt
2. 导入镜像到Cobbler
cobbler import --path=/mnt --name=CentOS-7-x86_64 --arch=x86_64
3. 检查导入结果
cobbler distro list
cobbler profile list
六、配置Kickstart自动安装
1. 创建Kickstart文件
vi /var/lib/cobbler/kickstarts/centos7.ks
示例内容:
#platform=x86, AMD64, or Intel EM64T
#version=DEVEL
# Install OS instead of upgrade
install
# Use network installation
url --url=$tree
# System language
lang en_US.UTF-8
# System keyboard
keyboard us
# System timezone
timezone Asia/Shanghai
# Root password
rootpw --plaintext yourpassword
# System authorization information
auth --useshadow --passalgo=sha512
# Use text mode install
text
# SELinux configuration
selinux --disabled
# Do not configure the X Window System
skipx
# Reboot after installation
reboot
# System bootloader configuration
bootloader --location=mbr
# Clear the Master Boot Record
zerombr
# Partition clearing information
clearpart --all --initlabel
# Disk partitioning information
part /boot --fstype="xfs" --size=500
part swap --size=4096
part / --fstype="xfs" --grow --size=1
# Network information
network --bootproto=dhcp --device=ens33--onboot=on
# Firewall configuration
firewall --disabled
# Package installation
%packages
@^minimal
@core
kexec-tools
%end
2. 关联Kickstart到Profile
cobbler profile edit --name=CentOS-7-x86_64 --kickstart=/var/lib/cobbler/kickstarts/centos7.ks
cobbler sync
七、客户端安装流程
-
客户端配置从网络(PXE)启动
-
客户端会自动获取IP并从Cobbler服务器加载安装程序
-
根据配置自动完成操作系统安装
八、高级配置
1. 管理多个发行版
cobbler distro add --name=CentOS-8 --kernel=/path/to/vmlinuz --initrd=/path/to/initrd.img --arch=x86_64
cobbler profile add --name=CentOS-8-x86_64 --distro=CentOS-8 --kickstart=/var/lib/cobbler/kickstarts/centos8.ks
2. 使用Web界面管理
systemctl start cobbler-web
systemctl enable cobbler-web
访问 https://<cobbler-server>/cobbler_web
3. 配置权限管理
编辑/etc/cobbler/users.conf
设置用户权限
cobbler/cobbler
九、常见问题解决
-
PXE启动失败:
-
检查防火墙是否放行DHCP(67/68)和TFTP(69)端口
-
验证
/var/lib/tftpboot
目录下是否有正确的启动文件
-
-
Kickstart安装失败:
-
检查
/var/log/messages
和/var/log/cobbler/cobbler.log
中的错误信息 -
验证Kickstart文件语法:
ksvalidator /path/to/kickstart.ks
-
-
网络安装速度慢:
-
考虑配置本地镜像源
-
使用
createrepo
创建本地仓库
-
通过以上步骤,可以成功配置Cobbler服务器并实现批量自动化安装操作系统。
附录: Cobbler 命令使用指南及案例
一、基本命令结构
Cobbler 使用 cobbler [command] [subcommand] [options]
的命令结构,主要分为以下几类命令:
-
查询类:list, report
-
管理类:import, sync, replicate
-
配置类:distro, profile, system, repo
-
维护类:check, buildiso, hardlink
二、常用命令详解及案例
1. 查询命令
1.1 列出所有对象
# 列出所有发行版
cobbler distro list
# 列出所有配置文件
cobbler profile list
# 列出所有系统
cobbler system list
# 列出所有仓库
cobbler repo list
1.2 查看对象详细信息
# 查看发行版详细信息
cobbler distro report --name=CentOS-7-x86_64
# 查看配置文件详细信息
cobbler profile report --name=web-server
# 查看系统详细信息
cobbler system report --name=node1
2. 发行版管理命令
2.1 添加发行版
cobbler distro add \
--name=CentOS-8-x86_64 \
--kernel=/var/www/cobbler/ks_mirror/CentOS-8-x86_64/images/pxeboot/vmlinuz \
--initrd=/var/www/cobbler/ks_mirror/CentOS-8-x86_64/images/pxeboot/initrd.img \
--arch=x86_64 \
--breed=redhat \
--os-version=rhel8 \
--kopts="console=tty0 console=ttyS0,115200n8"
2.2 修改发行版
cobbler distro edit \
--name=CentOS-8-x86_64 \
--kopts="console=tty0 console=ttyS0,115200n8 no_timer_check"
2.3 删除发行版
cobbler distro remove --name=CentOS-8-x86_64
3. 配置文件管理命令
3.1 添加配置文件
cobbler profile add \
--name=web-server \
--distro=CentOS-7-x86_64 \
--kickstart=/var/lib/cobbler/kickstarts/web-server.ks \
--kopts="net.ifnames=0 biosdevname=0"
3.2 复制配置文件
cobbler profile copy \
--name=web-server \
--newname=db-server \
--kickstart=/var/lib/cobbler/kickstarts/db-server.ks
4. 系统管理命令
4.1 添加系统
cobbler system add \
--name=web01 \
--profile=web-server \
--mac=00:11:22:33:44:55 \
--ip-address=192.168.1.101 \
--hostname=web01.example.com \
--gateway=192.168.1.1 \
--dns-name-servers="8.8.8.8 8.8.4.4" \
--static=1
4.2 修改系统网络配置
cobbler system edit \
--name=web01 \
--ip-address=192.168.1.102 \
--netboot-enabled=1
5. 仓库管理命令
5.1 添加仓库
cobbler repo add \
--name=epel7 \
--mirror=http://mirrors.aliyun.com/epel/7/x86_64/ \
--arch=x86_64 \
--breed=yum
5.2 关联仓库到配置文件
cobbler profile edit \
--name=web-server \
--repos="epel7"
6. 系统维护命令
6.1 检查配置
cobbler check
6.2 同步配置
cobbler sync
6.3 导入ISO镜像
cobbler import \
--path=/mnt/centos7 \
--name=CentOS-7 \
--arch=x86_64
6.4 生成启动ISO
cobbler buildiso \
--systems="web01 db01" \
--iso=/tmp/boot.iso \
--standalone
三、实用案例
案例1:批量添加10台相同配置的服务器
for i in {1..10}; do
cobbler system add \
--name=node${i} \
--profile=web-server \
--mac=00:1C:42:00:00:${i} \
--ip-address=192.168.1.${i} \
--hostname=node${i}.example.com
done
cobbler sync
案例2:修改所有web-server配置文件的kickstart
for profile in $(cobbler profile list); do
if [[ $profile == *"web"* ]]; then
cobbler profile edit \
--name=$profile \
--kickstart=/var/lib/cobbler/kickstarts/web-new.ks
fi
done
cobbler sync
案例3:备份Cobbler配置
cobbler distro report > distros.txt
cobbler profile report > profiles.txt
cobbler system report > systems.txt
cobbler settings report > settings.txt
tar czf /backup/cobbler-config-$(date +%F).tar.gz /etc/cobbler /var/lib/cobbler/kickstarts
案例4:设置PXE启动菜单超时
cobbler profile edit \
--name=web-server \
--menu="Web Server Installation" \
--pxe-menu-timeout=30
cobbler sync
四、高级用法
1. 使用变量模板
cobbler profile edit \
--name=web-server \
--template-files="/path/to/template.ks=/var/lib/cobbler/kickstarts/web-server.ks"
2. 设置安装后脚本
cobbler profile edit \
--name=web-server \
--post="/path/to/post_install_script.sh"
3. 配置电源管理
cobbler system edit \
--name=node1 \
--power-type=ipmi \
--power-address=192.168.1.50 \
--power-user=admin \
--power-pass=password \
--power-id=1