# KS文件和语法解析
[TOC]
## 1ks说明
### 1.1ks文件说明
使用kickstart,只需事先定义好一个Kickstart自动应答配置文件ks.cfg(通常存放在安装服务器上),并让安装程序知道该配置文件的位置,在安装过程中安装程序就可以自己从该文件中读取安装配置,这样就避免了在安装过程中多次的人机交互,从而实现无人值守的自动化安装。
### 1.2生成kickstart配置文件的三种方法:
* 方法1:
每安装好一台Centos机器,Centos安装程序都会创建一个kickstart配置文件,名字叫anaconda-ks.cfg位于/root/anaconda-ks.cfg ,记录真实安装配置。
* 方法2:
Centos提供了一个图形化的kickstart配置工具。在任何一个安装好的Linux系统上运行该工具,就可以很容易地创建你自己的kickstart配置文件。
* 方法3:
阅读kickstart配置文件的手册。用任何一个文本编辑器都可以创建你自己的kickstart配置文件。
官方链接:
https://access.redhat.com/documentation/zh-cn/red_hat_enterprise_linux/7/html/installation_guide/sect-kickstart-howto
### 1.3kickstart文件语法检查
```sh
yum install pykickstart
ksvalidator /var/www/html/ks_config/CentOS-7-ks.cfg
```
请记住这个验证工具有其局限性。Kickstart 文件可能会很复杂;ksvalidator 可保证其语法正确,且该文件不包含淘汰的选项,但它无法保证安装会成功。它也不会尝试验证 Kickstart 文件的 %pre、%post 和 %packages 部分。
### 1.4root密码生成
1)python法
```python
python -c 'import crypt; print(crypt.crypt("123456"))'
$6$mM/gpJHUs......AFcT3Q0CMJCqWk9d90
```
2)grub-crypt法
```
grub-crypt
Password:
Retype password:
$6$npM35T......PburyA/FFDbdeGvnUrWpWi.
```
## 2ks.cfg详解
### 2.1ks文件组成
1. 命令段
键盘类型,语言,安装方式等系统的配置,有必选项和可选项,如果缺少某项必选项,安装时会中断并提示用户选择此项的选项
2. 软件包段
以%packages开头,以%end结束,在安装过程中默认安装的软件包,安装软件时会自动分析依赖关系。
```
@groupname:指定安装的包组
package_name:指定安装的包
-package_name:指定不安装的包
```
3. 脚本段(可选)
以%post开头,以%end结束,在安装完系统之后执行的相关Linux命令、脚本
以%pre开头,以%end结束,在安装完系统之前执行的相关Linux命令、脚本
### 2.关键字含义说明
1)开始部分
```sh
# Kickstart Configurator for CentOS 7 by NOAH LUO
install
```
告知安装程序,这是一次全新安装,而不是升级upgrade。
2)安装源部分
```sh
url --url="http://10.0.0.7/CentOS-6.7/"
url --url ftp://:@/
nfs --server=nfsserver.example.com --dir=/tmp/install-tree
```
通过FTP或HTTP或NFS从远程服务器上的安装树中安装。任选一即可
3)模式语言键盘等
```sh
text使用文本模式安装。
lang en_US.UTF-8设置在安装过程中使用的语言以及系统的缺省语言。
keyboard us设置系统键盘类型。
zerombr清除mbr引导信息。
```
4)bootloader系统引导配置
```sh
bootloader --location=mbr --driveorder=sda --append="crashkernel=auto rhgb quiet"
--location指定引导记录被写入的位置.有效的值如下:mbr(缺省),partition,none。
--driveorder指定在BIOS引导顺序中居首的驱动器。
--append=指定内核参数.要指定多个参数,使用空格分隔它们。
```
5)network网络配置[客户机]
```sh
network --bootproto=dhcp --device=eth0 --onboot=yes --noipv6 --hostname=CentOS7 --activate
或者
network --bootproto=static --device=eth0 --ip=10.0.0.201 --netmask=255.255.255.0 --gateway=10.0.0.201 --nameserver=10.0.0.202 --activate
network --hostname=CentOS7
static方法要求在kickstart文件里输入所有的网络信息。
请注意所有配置信息都必须在一行上指定,或写两个newwork,不能使用反斜线来换行。
--ip=被安装的机器的IP地址.
--gatewayIP地址格式的默认网关.
--netmask安装的系统的子网掩码.
--hostname安装的系统的主机名.
--onboot是否在引导时启用该设备.
--noipv6禁用此设备的IPv6.
--nameserver配置dns解析.
```
6)时区认证等
```sh
timezone --utc Asia/Shanghai
authconfig --enableshadow --passalgo=sha512
rootpw --iscrypted $6$X20eRtuZhkHznTb4$dK0BJByOSA.....wJbAjVI5D6/
```
设置时区上海,设置认证方式,设置密码,密码非明文,用前文生成密码的方式生成
7)分区相关
```sh
clearpart --all --initlabel
--all 从系统中清除所有分区,--initlable 初始化磁盘标签
part /boot --fstype xfs --size 1024
part swap --size 1024
part / --fstype xfs --size 1 --grow
磁盘分区。
--fstype为分区设置文件系统类型.有效的类型为ext2,ext3,swap, xfs和vfat。
--asprimary强迫把分区分配为主分区,否则提示分区失败。
--size以MB为单位的分区最小值.在此处指定一个整数值,如500.不加MB。
--grow告诉分区使用所有可用空间(若有),或使用设置的最大值。
```
8)其他信息
```sh
firstboot --disable
selinux --disabled
firewall --disabled
logging --level=info
reboot
firstboot负责协助配置redhat一些重要的信息。
selinux关闭selinux。
firewall关闭防火墙。
logging设置日志级别。
reboot设定安装完成后重启,也可以选择halt关机。
```
9)包选装
```sh
%packages
@^minimal
@compat-libraries
@debugging
@development
tree
nmap
sysstat
lrzsz
dos2unix
telnet
wget
vim
bash-completion
%end
```
10)安装完成后操作
```sh
%post
systemctl disable postfix.service
%end
```
可以调用优化脚本,对装完后的服务器进行初始优化