无人值守安装配置

无人值守安装是指通过预定义的配置文件自动回答安装过程中的所有问题,实现从系统启动到安装完成的全程自动化,无需人工干预。

概述

支持的应答文件格式

格式 适用系统 配置文件名
Kickstart Red Hat系Linux(CentOS、RHEL、Anolis、OpenEuler等) *.ks
Preseed Debian系Linux(Debian、Ubuntu等) preseed.cfg
自定义 银河麒麟桌面/服务器 ky-installer.cfg / initial-setup-ks.cfg

工作原理

无人值守安装的工作流程如下:

1. 客户端从PXE启动
       ↓
2. GRUB加载并读取ks/preseed参数
       ↓
3. 安装程序读取应答文件
       ↓
4. 自动完成所有配置(分区、语言、用户等)
       ↓
5. 安装完成后自动重启

配置步骤

  1. 准备应答文件:根据目标系统生成或编辑应答文件
  2. 放置配置文件:将应答文件放入对应镜像的配置目录
  3. 修改GRUB菜单:在启动参数中指定应答文件位置
  4. 启用自动安装:在Web界面勾选对应镜像的自动安装选项

Kickstart配置详解

Kickstart文件结构

# 版本声明(必填)
#version=DEVEL

# 安装模式 - 图形安装或文本安装
#graphical  # 图形界面
text        # 文本模式

# 安装源 - NFS、URL或本地
url --url="nfs:server:/path"  # NFS安装
url --url="http://server/path"  # HTTP安装
cdrom  # 光盘安装

# 键盘布局
keyboard --xlayouts='cn'

# 系统语言
lang zh_CN.UTF-8

# 网络配置
network --bootproto=dhcp --device=eth0 --onboot=on --ipv6=auto --activate

# 主机名
network --hostname=localhost.localdomain

# 认证
authconfig --enableshadow --passalgo=sha512

# SELinux配置
selinux --enforcing

# 防火墙配置
firewall --enabled --service=ssh

# 时区
timezone Asia/Shanghai --utc

# Root密码(加密)
rootpw --iscrypted $6$xxxxxx

# 磁盘分区(关键配置)
clearpart --all --initlabel
part /boot --fstype=xfs --size=1024
part pv.01 --size=1 --grow
volgroup vg_root pv.01
logvol / --fstype=xfs --size=1 --grow --name=lv_root --vgname=vg_root

# bootloader配置
bootloader --location=mbr --boot-drive=sda

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

# 安装后脚本
%post
# 在此处执行安装完成后的自定义操作
%end

关键配置项说明

分区配置

分区是Kickstart文件中最重要的部分,常见配置方式:

# 方式一:自动分区(全盘安装)
autopart

# 方式二:手动分区
clearpart --all --initlabel  # 清空所有分区并初始化标签
part /boot --fstype=xfs --size=1024 --ondisk=sda
part /boot/efi --fstype=vfat --size=512 --ondisk=sda
part pv.01 --size=1 --grow --ondisk=sda
volgroup vg_root pv.01
logvol swap --name=swap --vgname=vg_root --size=4096
logvol / --fstype=xfs --size=1 --grow --name=lv_root --vgname=vg_root

# 方式三:LVM分区
part /boot --fstype=ext4 --size=1024
part pv.01 --size=1 --grow
volgroup vg_main pv.01
logvol / --fstype=xfs --size=1 --grow --vgname=vg_main
logvol /home --fstype=xfs --size=10240 --vgname=vg_main

密码配置

生成加密密码的方法:

# 使用Python生成SHA512加密密码
python3 -c "import crypt; print(crypt.crypt('YourPassword', crypt.mksalt(crypt.METHOD_SHA512)))"

# 或使用grub2-mkpasswd
grub2-mkpasswd-pbkdf2

网络配置

# DHCP自动获取
network --bootproto=dhcp --device=eth0 --onboot=on --ipv6=auto --activate

# 静态IP配置
network --bootproto=static --ip=192.168.1.100 --netmask=255.255.255.0 --gateway=192.168.1.1 --nameserver=8.8.8.8 --device=eth0 --onboot=on --ipv6=auto --activate

# 多网卡绑定VLAN
network --bootproto=dhcp --device=eth0 --vlanid=100 --activate

银河麒麟桌面系统

配置文件说明

银河麒麟桌面使用ky-installer.cfg作为无人值守配置文件,主要配置项如下:

加密设置 [Encrypty]

[Encrypty]
# 是否启用加密安装
encrypty=false
# 加密密钥(用于LUKS加密)
encryptyPWD=@ByteArray(qwer1234)
# 是否使用LVM逻辑卷安装
lvm=false

基本配置 [config]

[config]
# 自动登录设置(0为不自动登录)
autologin=0
# 固定值,无需修改
automatic-installation=1

# 安装目标磁盘设备(留空则自动选择最大磁盘)
devpath=
# 可选:指定设备如 /dev/sda, /dev/nvme0n1

# 是否使用swapfile替代swap分区
enable-swapfile=false

# 出厂备份设置
factory-backup=0

# 主机名
hostname=kylin-pc

# 语言设置
language=zh_CN

# root密码
password=@ByteArray(qwer1234)

# 安装完成后行为:1重启,0关机
reboot=1

# 时区设置
timezone=Asia/Shanghai

# 用户名
username=kylin

数据盘配置

# 数据盘配置(可选)
# 不填表示不配置数据盘
# 填auto表示自动选择最大磁盘作为数据盘
# 填具体设备名如/dev/sda表示指定磁盘
data-device=

# 是否跳过OOBE初始化向导
oem-config=false

# 是否保留用户数据安装
data-unformat=false

# 预装软件包(逗号分隔)
PreinstallApps=wps-office,sc-reader

自定义分区 [custompartition]

[custompartition]
# 启用自定义分区
disk-custom=false

# 是否格式化整盘(false用于安装双系统)
format-disk=true

# 系统分区起始偏移(MB)
kos-start=1

# 磁盘末尾预留空间(MB)
kos-end=0

# 分区清单(分号分隔)
custom-partitions="efi;boot;root;backup;data;swap;"

# 各分区详细配置
# 格式:fs=文件系统;mount=挂载点;size=大小;
# efi分区(UEFI必须)
custom-efi="fs=fat32;mount=/boot/efi;size=default;"
# boot分区
custom-boot="fs=ext4;mount=/boot;size=default;"
# 根分区
custom-root="fs=ext4;mount=/;size=default;"
# 备份分区
custom-backup="fs=ext4;mount=/backup;size=default;"
# 数据分区
custom-data="fs=ext4;mount=/data;size=default;"
# swap分区
custom-swap="fs=linux-swap;mount=[swap];size=default;"

桌面系统OOBE设置密码

在GRUB菜单的启动参数中添加:

oem-config/enable=true

银河麒麟服务器系统

获取Kickstart文件

银河麒麟服务器支持从已安装系统导出Kickstart文件:

# 从已安装完成的系统获取
# 文件位于安装完成后的系统根目录
/root/initial-setup-ks.cfg

关键配置说明

银河麒麟服务器的Kickstart配置与标准RHEL基本兼容,以下是常见配置项:

授权协议

# 自动同意许可协议(必须)
eula --agreed

安装源配置

# NFS安装源(MPXE自动配置)
nfs --server=10.10.10.25 --dir=/tmp/pxenfsroot/xxx

# HTTP安装源
url --url="http://server/path/to/repo"

磁盘分区

重要:anaconda默认不会自动格式化磁盘,需修改分区配置:

# 错误写法(不会格式化磁盘):
clearpart --none --initlabel

# 正确写法(会格式化磁盘):
clearpart --all --initlabel

包组配置

%packages
# 最小安装
@^minimal-environment

# 可选:添加其他包组
@kylin-server
@debugging
@kysecurity-enhance
%end

安装后脚本

%post --nochroot
# 在chroot环境外执行的脚本
# 常用于复制license文件等
%end

%post
# 在chroot环境内执行的脚本
# 常用于系统配置
systemctl disable firewalld
systemctl disable NetworkManager
%end

OpenEuler配置

OpenEuler Kickstart示例

#version=DEVEL
eula --agreed
text
keyboard --xlayouts='cn'
lang zh_CN.UTF-8

# 网络配置
network --bootproto=dhcp --device=eth0 --onboot=on --ipv6=auto --activate --hostname=openEuler

# 安装源(由PXE自动提供)
url --url="http://10.10.10.10/repo/openeuler"

# 磁盘分区
clearpart --all --initlabel
part /boot/efi --fstype=efi --size=512
part /boot --fstype=xfs --size=2048
part pv.01 --size=1 --grow
volgroup vg_root pv.01
logvol swap --name=swap --vgname=vg_root --size=4096
logvol / --fstype=xfs --size=1 --grow --name=lv_root --vgname=vg_root

# 时区和root密码
timezone Asia/Shanghai --utc
rootpw --iscrypted $6$xxxxxx

# bootloader
bootloader --location=mbr --boot-drive=sda

%packages
@^minimal-environment
%end

%post
systemctl disable firewalld
%end

CentOS / Anolis 配置

CentOS 7 Kickstart示例

#version=DEVEL
eula --agreed
text
keyboard --xlayouts='us'
lang en_US.UTF-8

network --bootproto=dhcp --device=eth0 --onboot=on --ipv6=auto --activate
url --url="http://mirror.centos.org/centos/7/os/x86_64"

# CentOS 7使用ext4文件系统
clearpart --all --initlabel
part /boot --fstype=ext4 --size=1024
part pv.01 --size=1 --grow
volgroup vg_root pv.01
logvol swap --name=swap --vgname=vg_root --size=4096
logvol / --fstype=ext4 --size=1 --grow --name=lv_root --vgname=vg_root

bootloader --location=mbr
timezone UTC --utc
rootpw --plaintext password

%packages
@core
%end

Anolis 8 Kickstart示例

#version=DEVEL
eula --agreed
text
keyboard --xlayouts='cn'
lang zh_CN.UTF-8

network --bootproto=dhcp --device=eth0 --onboot=on --ipv6=auto --activate
url --url="http://mirrors.openanolis.cn/anolis/8.9"

clearpart --all --initlabel
part /boot/efi --fstype=efi --size=512
part /boot --fstype=xfs --size=2048
part pv.01 --size=1 --grow
volgroup vg_root pv.01
logvol swap --name=swap --vgname=vg_root --size=4096
logvol / --fstype=xfs --size=1 --grow --name=lv_root --vgname=vg_root

bootloader --location=mbr
timezone Asia/Shanghai --utc
rootpw --iscrypted $6$xxxxxx

%packages
@^minimal-environment
%end

%post
systemctl disable firewalld
%end

常见问题

Q: 桌面无人值守安装过程中如何设置账号密码?

在GRUB配置中autoinstall所在选项的linux开头行添加:

oem-config/enable=true

Q: 服务器无人值守安装自动分区失败?

anaconda默认不会自动格式化磁盘。需要将Kickstart文件中的:

clearpart --none --initlabel

修改为:

clearpart --all --initlabel

Q: 如何生成加密的root密码?

# 方法一:Python生成
python3 -c "import crypt; print(crypt.crypt('YourPassword', crypt.mksalt()))"

# 方法二:使用openssl
openssl passwd -6 YourPassword

Q: 安装完成后如何自动执行脚本?

在Kickstart文件的%post部分添加脚本:

%post
# 禁用防火墙
systemctl disable firewalld

# 配置网络
hostnamectl set-hostname new-server

# 其他自定义操作
%end

Q: 多磁盘如何指定安装到特定磁盘?

# 指定安装到特定磁盘
ignoredisk --only-use=sda

# 或排除某些磁盘
ignoredisk --drives=sdb,sdc

Q: LVM分区如何配置?

# 创建物理卷
part pv.01 --size=1 --grow

# 创建卷组
volgroup vg_root pv.01

# 创建逻辑卷
logvol / --fstype=xfs --size=1 --grow --name=lv_root --vgname=vg_root
logvol swap --name=swap --vgname=vg_root --size=4096
logvol /home --fstype=xfs --size=10240 --name=lv_home --vgname=vg_root

Q: 如何跳过首次启动的初始化向导?

银河麒麟桌面需要在GRUB参数中添加:

oem-config/skip=true

Q: Kickstart文件语法如何检查?

# 使用ksvalidator检查语法(需要pykickstart包)
ksvalidator /path/to/kickstart.ks

更多帮助请参考: