1.1.5 自动化安装与批量部署(Kickstart/Preseed)

自动化安装与批量部署用于在大规模服务器或虚拟机环境中实现一致的系统安装与配置,减少人工操作和偏差。RHEL/CentOS 系列常用 Kickstart,Debian/Ubuntu 系列常用 Preseed。两者核心思想是通过应答文件预设安装流程,结合 PXE 实现无人工干预部署。


原理草图(PXE + 应答文件)#

文章图片

Kickstart(RHEL/CentOS/Rocky/Alma)#

关键服务与目录结构#

  • DHCP/TFTP:提供 PXE 启动与引导文件
  • HTTP:提供安装源与 ks.cfg
  • 常用目录
  • /var/lib/tftpboot/pxelinux.0
  • /var/www/html/ks/ks.cfg
  • /var/www/html/os/8/BaseOS/

完整示例:PXE + Kickstart#

# 1) 安装服务
dnf -y install dhcp-server tftp-server httpd syslinux

# 2) 配置 DHCP(/etc/dhcp/dhcpd.conf)
cat >/etc/dhcp/dhcpd.conf <<'EOF'
subnet 192.168.10.0 netmask 255.255.255.0 {
  range 192.168.10.100 192.168.10.200;
  option routers 192.168.10.1;
  next-server 192.168.10.10;
  filename "pxelinux.0";
}
EOF

# 3) 准备 TFTP 引导文件
cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/
cp /usr/share/syslinux/menu.c32 /var/lib/tftpboot/
mkdir -p /var/lib/tftpboot/pxelinux.cfg

# 4) PXE 启动菜单(/var/lib/tftpboot/pxelinux.cfg/default)
cat >/var/lib/tftpboot/pxelinux.cfg/default <<'EOF'
DEFAULT menu.c32
PROMPT 0
TIMEOUT 50
LABEL rocky8
  MENU LABEL Rocky 8 Auto Install
  KERNEL vmlinuz
  APPEND initrd=initrd.img inst.stage2=http://192.168.10.10/os/8 inst.ks=http://192.168.10.10/ks/ks.cfg
EOF

# 5) 挂载 ISO 并作为安装源
mkdir -p /var/www/html/os/8
mount -o loop Rocky-8.8-x86_64-dvd1.iso /var/www/html/os/8

# 6) 复制内核与 initrd 到 TFTP
cp /var/www/html/os/8/images/pxeboot/vmlinuz /var/lib/tftpboot/
cp /var/www/html/os/8/images/pxeboot/initrd.img /var/lib/tftpboot/

# 7) 启动服务
systemctl enable --now dhcpd tftp httpd

Kickstart 文件示例(/var/www/html/ks/ks.cfg)#

#version=RHEL8
lang en_US.UTF-8
keyboard us
timezone Asia/Shanghai --isUtc
rootpw --plaintext P@ssw0rd
reboot

# 安装源
url --url="http://192.168.10.10/os/8"

# 网络配置
network --bootproto=dhcp --device=ens33 --onboot=on

# 自动分区
clearpart --all --initlabel
autopart --type=lvm

# 包组选择
%packages
@^minimal-environment
vim
curl
%end

# 安装后执行
%post
echo "Kickstart installed at $(date)" > /root/ks.log
%end

命令解释要点#

  • inst.stage2:指定安装源位置
  • inst.ks:指定 Kickstart 应答文件 URL
  • autopart --type=lvm:自动分区并使用 LVM
  • %post:安装完成后执行初始化脚本

排错清单#

# 1) PXE 启动失败:检查 TFTP 是否可达
ss -lntup | grep :69
# 2) ks.cfg 读取失败:检查 HTTP 访问
curl -I http://192.168.10.10/ks/ks.cfg
# 3) 安装源失败:确认 ISO 挂载与权限
ls /var/www/html/os/8/.treeinfo
# 4) DHCP 未分配地址:检查 dhcpd.conf 与网卡
journalctl -u dhcpd -f

Preseed(Debian/Ubuntu)#

完整示例:PXE + Preseed#

# 1) 安装服务
apt -y install isc-dhcp-server tftpd-hpa apache2 pxelinux

# 2) DHCP(/etc/dhcp/dhcpd.conf)
cat >/etc/dhcp/dhcpd.conf <<'EOF'
subnet 192.168.20.0 netmask 255.255.255.0 {
  range 192.168.20.100 192.168.20.200;
  option routers 192.168.20.1;
  next-server 192.168.20.10;
  filename "pxelinux.0";
}
EOF

# 3) TFTP 引导
cp /usr/lib/PXELINUX/pxelinux.0 /srv/tftp/
cp /usr/lib/syslinux/modules/bios/menu.c32 /srv/tftp/
mkdir -p /srv/tftp/pxelinux.cfg

# 4) PXE 菜单
cat >/srv/tftp/pxelinux.cfg/default <<'EOF'
DEFAULT menu.c32
PROMPT 0
TIMEOUT 50
LABEL ubuntu
  MENU LABEL Ubuntu 22.04 Auto Install
  KERNEL vmlinuz
  APPEND initrd=initrd.gz auto=true priority=critical url=http://192.168.20.10/preseed.cfg
EOF

# 5) 提供安装源(简化:使用网络安装)
systemctl enable --now isc-dhcp-server tftpd-hpa apache2

Preseed 文件示例(/var/www/html/preseed.cfg)#

d-i debian-installer/locale string en_US.UTF-8
d-i keyboard-configuration/xkb-keymap select us
d-i time/zone string Asia/Shanghai

d-i netcfg/choose_interface select auto
d-i netcfg/get_hostname string ubuntu-auto
d-i netcfg/get_domain string local

d-i passwd/root-password password P@ssw0rd
d-i passwd/root-password-again password P@ssw0rd
d-i passwd/user-fullname string Ops User
d-i passwd/username string ops
d-i passwd/user-password password P@ssw0rd
d-i passwd/user-password-again password P@ssw0rd

d-i partman-auto/method string lvm
d-i partman-auto/choose_recipe select atomic
d-i partman-auto/confirm boolean true
d-i partman/confirm boolean true

tasksel tasksel/first multiselect minimal
d-i pkgsel/include string vim curl openssh-server

d-i finish-install/reboot_in_progress note

命令解释要点#

  • url=:指定 Preseed 文件地址
  • priority=critical:尽量抑制交互
  • partman-auto:自动分区策略

排错清单#

# 1) 预置文件未生效:检查 URL 可达
curl -I http://192.168.20.10/preseed.cfg
# 2) 分区失败:查看 installer 日志
tail -n 200 /var/log/syslog
# 3) PXE 无菜单:检查 TFTP 根目录
ls /srv/tftp/pxelinux.cfg/default

练习#

  1. 为 Kickstart 添加静态 IP 配置(指定 IP、网关、DNS),并验证系统安装后网络可用。
  2. 在 Preseed 中添加 openssh-server 并验证安装后可 SSH 登录。
  3. 手动制造一个错误(如 ks.cfg 路径错误),观察 PXE 安装的报错信息并记录修复步骤。