Kickstart 自动安装系统教程
Kickstart 是 Red Hat 系列 Linux(CentOS、RHEL、Fedora、AlmaLinux)的自动安装技术,通过一个配置文件(ks.cfg)预先定义安装过程中的所有选项,实现完全无人值守的操作系统安装。Ubuntu 新版本则使用 Autoinstall(cloud-init)方案实现类似功能。本教程将详细讲解两种自动安装方案的配置方法。
一、Kickstart 基础
1.1 获取参考配置
安装完 CentOS/RHEL 后,系统会自动生成一个 Kickstart 参考文件:
# CentOS/RHEL 安装后的参考配置
cat /root/anaconda-ks.cfg
1.2 Kickstart 配置文件结构
Kickstart 文件由三个部分组成:命令段(安装选项)、软件包段(%packages)和脚本段(%pre / %post)。
二、完整 Kickstart 配置示例
# /var/www/html/ks.cfg - CentOS/AlmaLinux 自动安装配置
# 安装模式
text
url --url="http://mirror.example.com/centos/9-stream/BaseOS/x86_64/os/"
# 系统语言和键盘
lang en_US.UTF-8
keyboard us
# 网络配置
network --bootproto=dhcp --device=eth0 --onboot=yes --hostname=server01.example.com
# Root 密码(使用加密密码)
rootpw --iscrypted $6$rounds=656000$randomsalt$encryptedpasswordhere
# 创建普通用户
user --name=admin --groups=wheel --iscrypted --password=$6$rounds=656000$salt$hash
# 时区设置
timezone Asia/Shanghai --utc
# 引导加载器
bootloader --location=mbr --boot-drive=vda
# 清除所有分区
clearpart --all --drives=vda --initlabel
# 磁盘分区方案
part /boot --fstype=ext4 --size=1024
part swap --size=2048
part / --fstype=ext4 --size=1 --grow
# SELinux
selinux --enforcing
# 防火墙
firewall --enabled --ssh
# 安装完成后重启
reboot
# 软件包选择
%packages
@^minimal-environment
vim-enhanced
wget
curl
net-tools
openssh-server
chrony
%end
# 安装后脚本
%post --log=/root/ks-post.log
#!/bin/bash
# 启用必要服务
systemctl enable sshd
systemctl enable chronyd
# SSH 安全加固
sed -i 's/#PermitRootLogin yes/PermitRootLogin prohibit-password/' /etc/ssh/sshd_config
sed -i 's/#PasswordAuthentication yes/PasswordAuthentication no/' /etc/ssh/sshd_config
# 添加 SSH 公钥
mkdir -p /root/.ssh
chmod 700 /root/.ssh
echo "ssh-rsa YOUR_PUBLIC_KEY_HERE" > /root/.ssh/authorized_keys
chmod 600 /root/.ssh/authorized_keys
# 更新系统
yum update -y
# 安装常用工具
yum install -y htop iotop tmux git
# 配置时间同步
systemctl start chronyd
chronyc makestep
echo "Kickstart post-install completed: $(date)" >> /root/ks-post.log
%end
三、高级分区方案
# LVM 分区方案
clearpart --all --drives=vda --initlabel
part /boot --fstype=ext4 --size=1024
part pv.01 --size=1 --grow
volgroup vg_system pv.01
logvol / --vgname=vg_system --fstype=ext4 --size=10240 --name=lv_root
logvol /var --vgname=vg_system --fstype=ext4 --size=5120 --name=lv_var
logvol /var/log --vgname=vg_system --fstype=ext4 --size=3072 --name=lv_log
logvol /tmp --vgname=vg_system --fstype=ext4 --size=2048 --name=lv_tmp
logvol swap --vgname=vg_system --size=2048 --name=lv_swap
logvol /home --vgname=vg_system --fstype=ext4 --size=1 --grow --name=lv_home
四、生成加密密码
# 使用 Python 生成加密密码(用于 Kickstart 的 rootpw 字段)
python3 -c 'import crypt; print(crypt.crypt("your-password", crypt.mksalt(crypt.METHOD_SHA512)))'
# 或使用 openssl
openssl passwd -6 -salt randomsalt your-password
# 使用 grub-crypt(旧版系统)
grub2-mkpasswd-pbkdf2
五、Ubuntu Autoinstall
Ubuntu 20.04+ 使用 Autoinstall 替代了传统的 Preseed。配置文件采用 YAML 格式:
# /var/www/html/autoinstall/user-data
#cloud-config
autoinstall:
version: 1
locale: en_US.UTF-8
keyboard:
layout: us
network:
network:
version: 2
ethernets:
eth0:
dhcp4: true
storage:
layout:
name: direct
identity:
hostname: ubuntu-server
username: admin
password: '$6$rounds=656000$salt$encryptedpassword'
ssh:
install-server: true
allow-pw: false
authorized-keys:
- ssh-rsa YOUR_PUBLIC_KEY_HERE
packages:
- vim
- curl
- wget
- htop
- tmux
- ufw
late-commands:
- curtin in-target -- systemctl enable ufw
- curtin in-target -- ufw allow ssh
- curtin in-target -- ufw --force enable
- curtin in-target -- apt-get update
- curtin in-target -- apt-get upgrade -y
5.1 提供 Autoinstall 配置
# 通过 HTTP 服务器提供
mkdir -p /var/www/html/autoinstall
# 将 user-data 放在上述目录
# 创建空的 meta-data 文件
touch /var/www/html/autoinstall/meta-data
# 内核启动参数中指定
# autoinstall ds=nocloud-net;s=http://PXE_SERVER_IP/autoinstall/
六、Kickstart 验证
# 安装验证工具
yum install pykickstart -y # CentOS/RHEL
apt install pykickstart -y # Ubuntu
# 验证 Kickstart 文件语法
ksvalidator ks.cfg
# 查看 Kickstart 文件差异
ksdiff ks1.cfg ks2.cfg
# 将现有系统转换为 Kickstart 文件
system-config-kickstart
七、配合 PXE 使用
# PXE 引导菜单中指定 Kickstart 文件
# /srv/tftp/pxelinux.cfg/default
LABEL centos9-auto
MENU LABEL Install CentOS 9 (Automated)
KERNEL images/centos9/vmlinuz
APPEND initrd=images/centos9/initrd.img inst.ks=http://PXE_SERVER_IP/ks.cfg
LABEL ubuntu2204-auto
MENU LABEL Install Ubuntu 22.04 (Automated)
KERNEL images/ubuntu2204/vmlinuz
APPEND initrd=images/ubuntu2204/initrd autoinstall ds=nocloud-net;s=http://PXE_SERVER_IP/autoinstall/
八、安装后自动配置脚本
# %post 脚本可以完成各种初始化操作
%post --log=/root/ks-post.log
#!/bin/bash
# 配置 DNS
echo "nameserver 8.8.8.8" > /etc/resolv.conf
echo "nameserver 8.8.4.4" >> /etc/resolv.conf
# 安装监控工具
yum install -y sysstat atop
# 配置自动安全更新
yum install -y yum-cron
systemctl enable yum-cron
# 配置日志轮转
cat > /etc/logrotate.d/custom <<ROTATE
/var/log/myapp/*.log {
daily
rotate 14
compress
missingok
notifempty
}
ROTATE
# 设置内核参数优化
cat >> /etc/sysctl.conf <<SYSCTL
net.core.somaxconn = 65535
net.ipv4.tcp_max_syn_backlog = 65535
vm.swappiness = 10
SYSCTL
sysctl -p
echo "安装后配置完成: $(date)"
%end
总结
Kickstart(CentOS/RHEL)和 Autoinstall(Ubuntu)是实现 Linux 系统无人值守安装的标准方案。掌握自动安装技术可以大幅提高批量服务器部署效率,减少人为配置错误。配合 PXE 网络启动 使用可以实现完全自动化的操作系统部署流程。搬瓦工 VPS 本身可通过 KiwiVM 面板重装系统,但学习这些技术有助于理解 Linux 部署自动化的核心概念。选购搬瓦工 VPS 请查看全部方案,使用优惠码 NODESEEK2026 可享受 6.77% 循环折扣。