linux 操作系统 之 自动化安装 Kickstart (KS) 文件详解

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 协议进行许可,转载请注明出处。

发表评论