CentOS 上简化 Cobbler 操作流程的可落地方案
一 核心思路
二 一键化脚本骨架
#!/usr/bin/env bash
set -Eeuo pipefail
# ===== 用户可配置 =====
COBBLER_IP="192.168.1.10"
SUBNET="192.168.1.0"
NETMASK="255.255.255.0"
RANGE_START="192.168.1.100"
RANGE_END="192.168.1.200"
ROUTER="192.168.1.1"
DNS_SERVERS="8.8.8.8 1.1.1.1"
ISO_PATH="/mnt/centos7.iso" # 已挂载或指向 ISO 目录
NAME="centos7-base"
KICKSTART="/var/lib/cobbler/kickstarts/centos7.ks"
# ======================
log(){ echo "[$(date '+%F %T')] $*"; }
# 0) 安装依赖
log "安装 cobbler 与依赖..."
yum -y install cobbler cobbler-web pykickstart httpd dhcp xinetd || { log "依赖安装失败"; exit 1; }
# 1) 启动与开机自启
systemctl enable --now cobblerd httpd xinetd
systemctl enable --now dhcpd 2>/dev/null || log "未安装/启用 DHCP(若由外部 DHCP 管理可忽略)"
# 2) 关键配置
log "写入 /etc/cobbler/settings"
sed -i "s/^server: .*/server: ${COBBLER_IP}/" /etc/cobbler/settings
sed -i "s/^next_server: .*/next_server: ${COBBLER_IP}/" /etc/cobbler/settings
# 若由 Cobbler 托管 DHCP,设为 1;否则为 0 并在外部 DHCP 配置 next-server/filename
sed -i "s/^manage_dhcp: .*/manage_dhcp: 1/" /etc/cobbler/settings
# 3) 渲染 DHCP 模板
log "配置 DHCP 模板"
cat >/etc/cobbler/dhcp.template <<EOF
subnet ${SUBNET} netmask ${NETMASK} {
option routers ${ROUTER};
option domain-name-servers ${DNS_SERVERS};
range dynamic-bootp ${RANGE_START} ${RANGE_END};
default-lease-time 21600;
max-lease-time 43200;
next-server \$next_server;
filename "/pxelinux.0";
}
EOF
# 4) 获取引导加载器
log "获取 PXE 引导文件"
cobbler get-loaders
# 5) 导入镜像(幂等:已存在则跳过)
if ! cobbler distro list | grep -qw "${NAME}"; then
log "挂载并导入 ISO: ${ISO_PATH}"
mkdir -p /mnt/iso
mount -o loop "${ISO_PATH}" /mnt/iso
cobbler import --path=/mnt/iso --name="${NAME}" --arch=x86_64
umount /mnt/iso
else
log "镜像 ${NAME} 已存在,跳过导入"
fi
# 6) 绑定 Kickstart(幂等:若已设置则跳过)
if cobbler profile list | grep -qw "${NAME}-x86_64"; then
if ! cobbler profile report --name="${NAME}-x86_64" | grep -q "Kickstart: ${KICKSTART}"; then
cobbler profile edit --name="${NAME}-x86_64" --kickstart="${KICKSTART}"
fi
else
cobbler profile add --name="${NAME}-x86_64" --distro="${NAME}-x86_64" --kickstart="${KICKSTART}"
fi
# 7) 同步到 DHCP/TFTP/HTTP
log "同步配置"
cobbler sync
# 8) 可选:从 CSV 批量注册主机(CSV 列:mac,ip,hostname)
register_from_csv(){
local csv="$1"
while IFS=',' read -r mac ip hostname; do
[[ -z "${mac}" || "${mac}" =~ ^# ]] && continue
local name="host-${ip##*.}"
if ! cobbler system list | grep -qw "${name}"; then
cobbler system add \
--name="${name}" \
--profile="${NAME}-x86_64" \
--mac="${mac}" \
--ip-address="${ip}" \
--subnet="${NETMASK}" \
--gateway="${ROUTER}" \
--hostname="${hostname}" \
--name-servers="${DNS_SERVERS}"
fi
done < <(sed 's/\r//g' "$csv")
}
# 示例:register_from_csv "hosts.csv"
log "完成。客户端请设置从网络启动(PXE)。"
三 标准化 Kickstart 模板
# /var/lib/cobbler/kickstarts/centos7.ks
install
url --url=http://$server/cobbler/ks_mirror/$distro/
lang en_US.UTF-8
keyboard us
timezone Asia/Shanghai
auth --enableshadow --passalgo=sha512
rootpw --iscrypted $default_password_crypted
# 网络(可按需细化网卡名)
network --bootproto=dhcp --device=eth0 --onboot=yes --noipv6
# 引导与分区
bootloader --location=mbr
clearpart --all --initlabel
part /boot --fstype=ext4 --size=1024
part / --fstype=xfs --size=10240 --grow
part swap --size=2048
# 软件包
%packages
@base
@core
vim
wget
curl
%end
# 安装后脚本(装机即配置)
%post
# 示例:安装常用工具、注册 CM 客户端、关闭 SELinux/防火墙(按策略调整)
yum install -y epel-release
yum install -y htop tree git
systemctl enable --now chronyd
sed -i 's/^SELINUX=.*/SELINUX=permissive/' /etc/selinux/config
setenforce 0
%end
四 批量与自助化
五 快速排错与最小化检查