CentOS运维中手动安装系统耗时费力且容易出错,kickstart正是解决这一痛点的自动化安装方案。它通过一个预先配置的应答文件,让系统安装过程完全无需人工干预,从分区设置、软件包选择到网络配置和后期脚本,全部自动完成。对于需要批量部署服务器或频繁重装系统的运维团队来说,掌握kickstart意味着能将数小时的重复劳动压缩到几分钟,并确保环境绝对一致。

一、Kickstart的核心:理解ks.cfg应答文件

整个自动化安装的“大脑”是一个名为ks.cfg的文本文件。这个文件定义了安装过程的所有答案。其结构清晰,主要包含以下几个指令区块:

1. 命令部分: 定义安装过程的基本行为。例如,指定安装源、系统语言、键盘布局、时区、根密码以及安装完成后是重启还是关机。

2. 分区部分: 这是关键且容易出错的地方。你需要明确指定磁盘的分区方案。Kickstart会严格按照你的指令执行格式化与分区,务必谨慎。

3. 软件包部分: 定义需要安装哪些软件包组或单个软件包。你可以选择最小化安装,也可以定制包含特定服务(如Web服务器、数据库)的完整环境。

4. 预安装与安装后脚本部分: 这是实现深度定制的利器。你可以在安装开始前(%pre)或安装完成后(%post)执行自定义的Shell脚本,用于配置YUM源、创建用户、部署应用代码或修改系统参数。

二、三步生成属于你的Kickstart文件

获取ks.cfg文件有三种主流方法,各有优劣:

方法一:手动编写。 适合高手,需要对语法非常熟悉。你可以从CentOS官方文档中找到所有指令的详细说明。

方法二:基于现有系统生成。 这是最推荐的方法。在一台已经按你要求配置好的CentOS系统上,安装"system-config-kickstart"工具(图形界面)或直接使用"ksdump"命令。"system-config-kickstart"工具会生成一个包含当前系统大部分设置的模板文件,你可以在此基础上修改。

方法三:修改安装程序生成的模板。 CentOS安装程序在完成一次手动安装后,会在"/root"目录下生成一个名为"anaconda-ks.cfg"的文件。这份文件完美记录了本次安装的所有选择,是极佳的定制起点。

三、实战:一个基础ks.cfg文件详解

下面是一个功能完整的ks.cfg示例,适用于最小化安装并做基本配置:

# 平台与安装模式
install
url --url="http://your-repo/centos/7/os/x86_64/"  # 指定网络安装源
text  # 使用文本模式安装,效率更高
lang en_US.UTF-8
keyboard us
timezone Asia/Shanghai --isUtc
rootpw --plaintext your_secure_password  # 生产环境建议使用iscrypted加密密码
auth --useshadow --passalgo=sha512
selinux --disabled
firewall --disabled
services --disabled=NetworkManager,firewalld --enabled=network
reboot

# 网络配置(静态IP示例)
network --bootproto=static --device=eth0 --ip=192.168.1.100 --netmask=255.255.255.0 --gateway=192.168.1.1 --nameserver=8.8.8.8 --hostname=node01.yourdomain.com

# 磁盘清除与分区方案
zerombr
clearpart --all --initlabel
autopart  # 使用自动分区方案,适合新手
# 高级自定义分区示例(注释掉autopart后启用):
# part /boot --fstype="xfs" --size=1024
# part pv.01 --size=1 --grow
# volgroup vg_root pv.01
# logvol / --fstype="xfs" --name=lv_root --vgname=vg_root --size=10240
# logvol swap --fstype="swap" --name=lv_swap --vgname=vg_root --size=2048
# logvol /data --fstype="xfs" --name=lv_data --vgname=vg_root --size=1 --grow

# 软件包选择
%packages
@^minimal
@core
vim-enhanced
wget
curl
net-tools
%end

# 安装后脚本:配置yum源、创建用户、更新系统等
%post --log=/root/ks-post.log
#!/bin/bash

# 1. 配置国内YUM源(示例为阿里云)
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
sed -i -e '/mirrors.cloud.aliyuncs.com/d' -e '/mirrors.aliyuncs.com/d' /etc/yum.repos.d/CentOS-Base.repo

# 2. 创建运维用户并配置sudo权限
useradd -m -G wheel opsadmin
echo "opsadmin:YourUserPassword" | chpasswd

# 3. 可选:更新所有包到最新
# yum update -y

# 4. 部署公钥以实现SSH免密登录
mkdir -p /home/opsadmin/.ssh
echo "ssh-rsa AAAAB3NzaC...您的公钥内容..." > /home/opsadmin/.ssh/authorized_keys
chmod 700 /home/opsadmin/.ssh
chmod 600 /home/opsadmin/.ssh/authorized_keys
chown -R opsadmin:opsadmin /home/opsadmin/.ssh

echo "Kickstart post-installation completed!" >> /root/ks-post.log
%end

四、部署:如何让安装程序找到你的ks.cfg

生成文件后,需要让安装程序能访问它。主要有四种方式:

1. 网络服务器(最常用): 将ks.cfg文件放在Web服务器(如Nginx/Apache)、FTP服务器或NFS共享目录下。在启动安装时,通过引导参数指定位置,例如:"linux ks=http://your-web-server/path/ks.cfg"。

2. U盘或本地硬盘: 将文件放在U盘或硬盘的某个分区。引导参数可能是:"linux ks=hd:sdb1:/ks.cfg"。

3. DVD/CD-ROM: 将文件刻录到安装介质中。引导参数为:"linux ks=cdrom:/ks.cfg"。

4. DHCP集成(高级): 在DHCP服务器配置中,通过"next-server"和"filename"选项指向存放ks.cfg的TFTP服务器。这样客户端只需设置"ksdevice"引导参数,即可全自动启动安装。

五、高级技巧与避坑指南

1. 分区规划的陷阱: "clearpart --all"会清空所有磁盘数据,在有多块硬盘的服务器上极其危险。务必确认目标磁盘。对于复杂存储环境(如RAID、LVM),建议先在"%pre"脚本中使用自定义命令进行配置。

2. 密码安全: 示例中使用明文密码仅为演示。生产环境务必使用"openssl passwd -6"或"grub-crypt"生成加密密码,并使用"rootpw --iscrypted $6$加密串"的格式。

3. 网络依赖: Kickstart安装严重依赖网络(除非使用完整本地源)。确保安装源("url"指令)稳定可达,且"%post"脚本中的网络操作有重试或容错机制。

4. 使用变量和条件判断: 高级用法中,你可以通过传递内核引导参数(如"ks.cfg ip=192.168.1.100")到ks.cfg文件,并在"%pre"脚本中解析,实现根据IP或主机名动态调整配置。

5. 测试与验证: 永远不要在物理生产服务器上直接测试新的ks.cfg文件。强烈建议使用虚拟化平台(如VMware、VirtualBox或KVM)构建一个隔离的测试环境。先进行全流程测试,确认分区、软件包安装和后期脚本都按预期执行。

六、从自动化安装到配置管理

Kickstart解决了操作系统层面的自动化安装,但现代运维的自动化远不止于此。安装完成的系统,其上的应用部署、配置变更、状态维护需要更强大的工具。这就是Ansible、SaltStack、Puppet等配置管理工具的舞台。

一个成熟的自动化运维流水线通常是:Kickstart(裸机/虚拟机初始化) -> 配置管理工具(应用与环境配置) -> 持续集成/持续部署(CI/CD)。 你甚至可以在"%post"脚本的最后,调用Ansible的playbook,实现从系统安装到应用上线的“一键交付”。将Kickstart视为你自动化大厦坚实的地基,在此基础上构建的运维体系,才能真正实现高效、可靠与可追溯。