Kickstart 是 Red Hat 系列发行版(RHEL、CentOS、Fedora)的自动化安装工具,通过 KS 文件可以实现无人值守安装。
1. KS 文件基本概念
KS 文件是一个纯文本配置文件,包含了系统安装过程中所需的所有配置信息,如分区方案、软件包选择、网络配置等。
2. KS 文件基本语法结构
# 注释以 # 开头
# KS 文件主要由三个部分组成:
# 1. 命令段(Commands Section)- 系统配置命令
# 2. %packages段 - 软件包选择
# 3. 脚本段 - %pre 和 %post 脚本
3. 主要配置命令详解
3.1 基本系统配置
# 安装模式
install # 全新安装
# upgrade # 升级安装
# 安装源
url --url="http://mirror.centos.org/centos/7/os/x86_64/"
# cdrom # 使用光盘安装
# nfs --server=192.168.1.1 --dir=/path/to/iso
# 语言和键盘
lang en_US.UTF-8 # 系统语言
keyboard us # 键盘布局
# 时区
timezone Asia/Shanghai --isUtc
# 根密码
rootpw --iscrypted $6$salt$hashedpassword
# rootpw --plaintext mypassword
# 网络配置
network --bootproto=dhcp --device=eth0 --onboot=on
# network --bootproto=static --ip=192.168.1.100 --netmask=255.255.255.0 --gateway=192.168.1.1 --nameserver=8.8.8.8
3.2 磁盘分区配置
# 清除现有分区
clearpart --all --initlabel
# 零化MBR
zerombr
# 创建分区
part /boot --fstype="ext4" --size=500
part pv.01 --fstype="lvmpv" --size=1 --grow
# LVM配置
volgroup centos --pesize=4096 pv.01
logvol / --fstype="ext4" --name=root --vgname=centos --size=10240
logvol /home --fstype="ext4" --name=home --vgname=centos --size=5120
logvol swap --name=swap --vgname=centos --size=2048
# 或者简单分区方式
# part / --fstype="ext4" --size=10240
# part /boot --fstype="ext4" --size=500
# part swap --size=2048
3.3 认证和安全配置
# 认证配置
auth --enableshadow --passalgo=sha512
# SELinux配置
selinux --enforcing # 启用SELinux
# selinux --disabled # 禁用SELinux
# 防火墙配置
firewall --enabled --service=ssh
# firewall --disabled
3.4 服务和启动配置
# 启动引导程序
bootloader --location=mbr --boot-drive=sda
# 服务配置
services --enabled="chronyd,sshd"
services --disabled="postfix"
# 首次启动配置
firstboot --disable # 禁用首次启动向导
# 重启
reboot # 安装完成后重启
# halt # 安装完成后关机
4. 软件包选择
%packages
# 包组安装
@^minimal # 最小化安装
@core # 核心软件包组
@base # 基础软件包组
@development # 开发工具组
# 单独软件包
vim
wget
curl
git
-postfix # 减号表示不安装该包
# 包含依赖
%end
5. 脚本段
5.1 %pre 脚本(安装前执行)
%pre
#!/bin/bash
# 安装前执行的脚本
echo "开始安装前的准备工作"
# 动态分区示例
DISK_SIZE=$(fdisk -l /dev/sda | grep "Disk /dev/sda" | awk '{print $3}' | cut -d. -f1)
if [ $DISK_SIZE -gt 100 ]; then
echo "part /var --fstype=ext4 --size=10240" >> /tmp/part-include
fi
%end
5.2 %post 脚本(安装后执行)
%post --log=/root/ks-post.log
#!/bin/bash
# 安装后执行的脚本
# 更新系统
yum update -y
# 创建用户
useradd -m dev
echo "dev:password" | chpasswd
# 配置SSH
sed -i 's/#PermitRootLogin yes/PermitRootLogin no/' /etc/ssh/sshd_config
# 安装额外软件
yum install -y epel-release
yum install -y htop tree
# 配置自定义服务
systemctl enable custom-service
# 网络配置
cat > /etc/sysconfig/network-scripts/ifcfg-eth0 << EOF
DEVICE=eth0
BOOTPROTO=static
IPADDR=192.168.1.100
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
DNS1=8.8.8.8
ONBOOT=yes
EOF
echo "安装后配置完成" >> /root/install.log
%end
6. 完整的KS文件示例
#version=DEVEL
# System authorization information
auth --enableshadow --passalgo=sha512
# Use CDROM installation media
cdrom
# Use graphical install
# graphical
text
# Run the Setup Agent on first boot
firstboot --disable
# Keyboard layouts
keyboard --vckeymap=us --xlayouts='us'
# System language
lang en_US.UTF-8
# Network information
network --bootproto=dhcp --device=eth0 --onboot=on --ipv6=auto --activate
# Root password (password123)
rootpw --iscrypted $6$Q5QQQmhyQ7Q5Q5Q5$Q5Q5Q5Q5Q5Q5Q5Q5Q5Q5Q5Q5Q5Q5
# System services
services --enabled="chronyd,sshd"
# System timezone
timezone Asia/Shanghai --isUtc
# System bootloader configuration
bootloader --location=mbr --boot-drive=sda
# Partition clearing information
clearpart --all --initlabel
# Disk partitioning information
zerombr
part /boot --fstype="ext4" --ondisk=sda --size=512
part pv.197 --fstype="lvmpv" --ondisk=sda --size=1 --grow
volgroup centos --pesize=4096 pv.197
logvol / --fstype="xfs" --name=root --vgname=centos --size=10240
logvol /home --fstype="xfs" --name=home --vgname=centos --size=5120
logvol swap --name=swap --vgname=centos --size=2048
%packages
@^minimal
@core
chrony
kexec-tools
vim
wget
curl
%end
%addon com_redhat_kdump --enable --reserve-mb='auto'
%end
%post --log=/root/ks-post.log
#!/bin/bash
# 系统优化
echo "* soft nofile 65535" >> /etc/security/limits.conf
echo "* hard nofile 65535" >> /etc/security/limits.conf
# 创建普通用户
useradd -m admin
echo "admin:admin123" | chpasswd
usermod -aG wheel admin
# 配置sudo
echo "admin ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers.d/admin
%end
reboot
7. 使用KS文件的方式
7.1 本地文件方式
# 启动时指定ks文件路径
linux ks=hd:sda1:/ks.cfg
7.2 网络方式
# HTTP方式
linux ks=http://192.168.1.1/ks.cfg
# FTP方式
linux ks=ftp://192.168.1.1/ks.cfg
# NFS方式
linux ks=nfs:192.168.1.1:/path/to/ks.cfg
7.3 光盘/USB方式
# 光盘
linux ks=cdrom:/ks.cfg
# USB设备
linux ks=hd:sdb1:/ks.cfg
8. KS文件调试和验证
8.1 语法检查
# 使用ksvalidator检查语法
ksvalidator /path/to/ks.cfg
8.2 生成KS文件
# 从现有系统生成KS文件
system-config-kickstart # 图形界面工具
# 从安装日志生成
cat /root/anaconda-ks.cfg
8.3 调试技巧
# 在KS文件中启用调试
%post --log=/root/ks-post.log --erroronfail
set -x # 启用详细输出
# 脚本内容
set +x # 关闭详细输出
%end
9. 高级特性
9.1 条件判断
%post
if [ -f /sys/firmware/efi ]; then
echo "UEFI system detected" >> /root/system-info.log
else
echo "BIOS system detected" >> /root/system-info.log
fi
%end
9.2 包含外部文件
# 在%pre段动态生成分区配置
%include /tmp/part-include
9.3 多网卡配置
network --bootproto=static --device=eth0 --ip=192.168.1.100 --netmask=255.255.255.0 --onboot=on
network --bootproto=static --device=eth1 --ip=192.168.2.100 --netmask=255.255.255.0 --onboot=on
本文版权归原作者zhaofujian所有,采用 CC BY-NC-ND 4.0 协议进行许可,转载请注明出处。