centos

centos cobbler怎样简化操作流程

小樊
34
2025-12-31 06:19:40
栏目: 智能运维

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

四 批量与自助化

五 快速排错与最小化检查

0
看了该问题的人还看了