一、Kickstart配置文件由三部分组成:
      一是选项指令段,用于自动应答图形界面安装时除包选择外的所有手动操作
      二是package选择段,使用%packages引导该功能
      三是脚本段,该段可有可无,分为两种:
         (1) %pre  预安装脚本段,在安装系统之前就执行的脚本,该段很少使用,因为可用的命令太少
         (2) %post 后安装脚本段,在系统安装完成后执行的脚本

  创建kickstart文件
       kickstart文件是一个简单的文本文件,它包含了一个项目列表,每个项目由一个关键字来识别.可以用
「Kickstart 配置」应用程序创建它或是自己从头编写.
       首先,在创建kickstart文件时留意下列问题:
               1.每节必须按顺序指定.除非特别申明,每节内的项目则不必按序排列.小节的顺序为:
                       命令部分,这里应该包括必需的选项.
                       %packages部分,这部分选择需要安装的软件包.
                       %pre和%post部分,这两个部分可以按任何顺序排列而且不是必需的.
               2.不必需的项目可以被省略.
               3.如果忽略任何必需的项目,安装程序会提示用户输入相关的项目的选择,就象用户在典型的安
       装过程中所遇到的一样.一旦用户进行了选择,安装会以非交互的方式(unattended)继续(除非找到另外一个没有指定的项目).
               4.以井号("#")开头的行被当作注释行并被忽略.
       对于 kickstart 升级,下列项目是必需的:
               1.语言
               2.安装方法
               3.设备规格(如果这个设备是在安装过程中所需要的)
               4.键盘设置
               5.upgrade 关键字
               6.引导装载程序配置
               7.如果任何其他的项目被指定为upgrade,这些项目将被忽略(注意这包括了软件包选择).          
二、kickstart选项指令段的说明:

【必须的选项】:

1.auth或者authconfig :验证选项
   --useshadow或者--enableshadow启用shadow文件来验证
       --passalgo=sha512使用sha512算法
2.bootloader: 指定如何安装引导程序,要求必须已选择分区、已选择引导程序、已选择软件包,如果没选择将会停止而不会询问
          --location=mbr 指定引导程序的位置,默认为mbr,还可以指定none或者包含bootloader的引导块所在分区
              --driveorder=sda 指定grub安装在哪个分区以及指定寻找顺序,--driverorder=sda sdc sdb
                  --append="crashkernel=auto rhgb quiet" 指定内核参数
3.keyboard:指定键盘类型,一般使用美式键盘"keyboard us",新版的kickstart的格式有所变化,但也支持"keyboard us"这样的老格式
4.lang:指定语言,如"lang en_US.UTF-8"
5.rootpw:设置root用户的密码
   --iscrypted:使用加密密码,可以使用MD5,SHA-256,sha-512等。
       如:
   rootpw  --iscrypted $6$kxEBpy0HqHiY2Tsx$FTAqbjHs6x0VruChfYKxVeKLlxPuY0LXK7RxAVdu3uUivGclMUEz.i4ARlsMpqe1bf379uEgWOSFqGtZxqrwg.
       其中SHA-512位的加密密码在CentOS 6上可以使用"grub-crypt --sha-512"生成,CentOS7上可以使用python等工具来生成,
       如下:
       python -c 'import crypt,getpass;pw=getpass.getpass();print(crypt.crypt(pw) if (pw==getpass.getpass("C
【可选的选项】:

1.selinux:设置selinux,值为enforcing,permissice,disable之一

2.autostep: 交互式,和interactive类似,为系统设置验证选项.这和在安装后运行的authconfig命令相似.在缺省情况下,
密码通常被加密但不使用影子文件(shadowed).

3.interactive: 使用kickstart文件指定的参数交互式安装,但仍会给出每一步的选择项,如果直接下一步就使用kickstart参数

4.cmdline: 在完全的非交互式的命令行模式下进行安装.任何交互式的提示都会终止安装.这个模式对于有x3270控制台的IBM System z系统很有用.
5.driverdisk:指定驱动程序所在位, 可以在kickstart安装过程中使用驱动软盘.必须把驱动软盘的内容复制到系统的硬盘分区的根目录下.
然后必须使用driverdisk 命令来告诉安装程序到哪去寻找驱动磁盘.
driverdisk [--type=]
另外,也可以为驱动程序盘指定一个网络位置:
               driverdisk --source=ftp://path/to/dd.img
               driverdisk --source=http://path/to/dd.img
               driverdisk --source=nfs:host:/path/to/img
                       ,包含驱动程序盘的分区.
                       --type=,文件系统类型(如:vfat,ext2,ext3).    drvierdisk --source=
6.firewall:设置firewall,firewall --enabled|--disabled [--trust=] [--port=]
      --enabled或者--enable,拒绝不是答复输出请求如DNS答复或DHCP请求的进入连接.如果需要使用在这个机器上运行的服务,
可以选择允许指定的服务穿过防火墙.
      --disabled或--disable,不要配置任何iptables规则.
      --trust=,在此列出设备,如eth0,这允许所有经由这个设备的数据包通过防火墙.如果需要列出多个设备,
使用--trust eth0 --trust eth1.不要使用以逗号分隔的格式,如--trust eth0, eth1.
      ,使用以下服务中的一个或多个来替换,从而允许指定的服务穿过防火墙.
                       --ssh
                       --telnet
                       --smtp
                       --http
                       --ftp
      --port=,可以用端口:协议(port:protocal)格式指定允许通过防火墙的端口.
                       例如,如果想允许IMAP通过的防火墙,可以指定imap:tcp.还可以具体指定端口号码,
要允许UDP分组在端口1234通过防火墙,输入1234:udp.要指定多个端口,用逗号将它们隔开.

7.firstboot:决定是否在系统第一次引导时启动"设置代理".如果启用,firstboot软件包必须被安装.如果不指定,这个选项是缺省为禁用的.
      --enable或--enabled,系统第一次引导时,启动"设置代理".
      --disable或--disabled,系统第一次引导时,不启动"设置代理".
      --reconfig,在系统引导时在重配置(reconfiguration)模式下启用"设置代理".这个模式启用了语言,鼠标,键盘,根密码,安全级别,时区和缺省网络配置之外的选项.

8.graphical:在图形模式下根据kickstart执行安装,默认该选项

9.text:文本模式下根据kickstart执行安装(既然使用kickstart了,当然建议选择使用纯文本模式而不是图形模式了), skipx:不安装图形工具
10.halt/reboot/poweroff:安装完成后关机还是reboot,默认是halt
11.ignoredisk:指定忽略的磁盘,导致安装程序忽略指定的磁盘.如果使用自动分区并希望忽略某些磁盘的话,这就很有用.
      例如,没有ignoredisk,如要试图在SAN-cluster系统里部署,kickstart就会失败,因为安装程序检测到SAN不返回分
      区表的被动路径(passive path).如果有磁盘的多个路径时,ignoredisk选项也有用处.
      语法是:
             ignoredisk --drives=drive1,drive2,...这里driveN是sda,sdb... hda等等中的一个.
12.install/upgrade:指定是安装还是升级系统    对于install,还必须指定下面几种安装方式之一:        cdrom:指定从第一个光盘驱动器安装        harddrive:指定从本地硬盘安装,要求硬盘必须是vfat或者ext2文件系统格式
           --biospart:指定从bios类型的分区来安装,如82文件系统类型号的分区
           --partition:从某个分区安装
           --dir:指定从包含install-tree(安装树)的目录安装                例如:harddrive --partition=hdb2 --dir=/tmp/install-tree        nfs:指定从nfs路径安装
           --server:指定nfs服务器主机名或IP
           --dir:指定包含install-tree的目录
           --opts:指定挂载NFS的mount选项
           如:nfs --server=172.16.10.10 --dir=/export_path        url:指定从ftp、http、https安装             例如:url --url ftp://172.16.10.10
13.logging:指定安装过程中的错误日志位置
   --host=:指定日志将发送到那台主机上,发送日志信息到给定的远程主机,这个主机必须运行配置为可接受远程日志的syslogd进程.
   --port=:如果远程主机的rsyslog使用非默认端口,则应该指定该端口选项
   --levle=:指定日志级别,debug,info,warning,error或critical中的一个.
14.network:为系统配置网络信息,并在安装过程中激活该网络设备。可多次使用network指令,例如既设置网络,又设置主机名
   --bootproto:dhcp(bootp)或static中的一种;对于static则必须指定IP地址、子网掩码、网关和DNS
       --device:网卡名,可以使用eth0类似的名称来指定
           --hostname:指定主机名
               --onboot:是否在引导系统时启用指定的设备        如:        network --bootproto=static --ip=192.168.100.2 --netmask=255.255.255.0 --gateway=192.168.100.254 --nameserver=8.8.8.8        network --bootproto=dhcp --device=eth0 --noipv6        network --hostname=node1.xuexi.com
15.autopart: 自动创建几个分区:大于1G的根分区,250M的boot分区和swap分区
16.zerombr:清除磁盘的mbr
17.clearpart: 在安装系统前清除分区,如果指定该选项则必须指定正确
   --all:清除所有分区
   --Linux:清除Linux分区
   --none:不清除分区
   --initlabel:创建标签,对于没有MBR或者GPT的新硬盘,该选项是必须的
   --drivers=sdb:清除指定的分区    所以,clearpart --all --initlabel是常见的方式
18.part:创建分区
   --asprimary:强制指定为主分区
    --grow:使用所有可用空间,即为其分配所有剩余空间。对于根分区至少需要3G空间(即使是--grow,也还是需要指定--size)
        --ondisk:指定在哪块磁盘上创建分区。如果有多块磁盘,则需要指定在哪块磁盘上创建哪个分区,只有一块硬盘时可以省略该选项        如:            part /boot --fstype=ext4 --asprimary --size=200                part swap --fstype=swap --asprimary --size=2048                        part / --fstype=ext4 --grow --asprimary  --size=2000
  logvol(可选):使用以下语法来为逻辑卷管理(LVM)创建逻辑卷:
  logvol --vgname= --size= --name=
  选项如下所示:
               --noformat,使用一个现存的逻辑卷,不进行格式化.
               --useexisting,使用一个现存的逻辑卷,重新格式化它.
               --fstype=,为逻辑卷设置文件系统类型.合法值有:ext2,ext3,swap和vfat.
               --fsoptions=,为逻辑卷设置文件系统类型.合法值有:ext2,ext3,swap和vfat.
               --bytes-per-inode=,指定在逻辑卷上创建的文件系统的节点的大小.因为并不是所有的文件系统都支持这个选项,所以在其他情况下它都被忽略.
               --grow=,告诉逻辑卷使用所有可用空间(若有),或使用设置的最大值.
               --maxsize=,当逻辑卷被设置为可扩充时,以MB为单位的分区最大值.在这里指定一个整数值,不要在数字后加MB.
               --recommended=,自动决定逻辑卷的大小.
               --percent=,用卷组里可用空间的百分比来指定逻辑卷的大小.
   首先创建分区,然后创建逻辑卷组,再创建逻辑卷.
                       例如:         part /boot --fstype ext4 --size=100
        part swap --fstype=swap --size=2048
        part pv26 --size=100 --grow         volgroup VG00 --pesize=32768 pv26         logvol / --fstype ext4 --name=LVroot --vgname=VG00 --size=29984
        logvol /data --fstype ext4 --name=LVdata --vgname=VG00 --size=100 --grow
19.repo:指定除自带的yum源外的其他yum源,可以指定多行yum源(既然是第一次装系统,基本都不会去加这项)    如:repo --name="CentOS"  --baseurl=cdrom:sr0 --cost=100
20.services:设置默认运行级别下开机自启动的服务
   --disable    --enable        disable先处理enable后处理        如services --disable auditd,cups,atd
21.timezone:指定时区    如:Asia/Shanghai
22.user:在系统中生成一个新用户
   --name:指定用户名
   --groups:指定辅助组,非默认组
   --homedir:用户家目录,如果不指定则默认为/home/    --password:该用户的密码,如果不指定或省略则创建后该用户处于锁定状态
   --shell:用户的shell,不指定则默认
   --uid:用户UID,不指定则自动分配一个非系统用户的UID
23.key:输入序列号,只在RedHat中有,CentOS系统没有该项,--skip  跳过key选项

三、kickstart软件包或包组选项:

使用"%packages"表示该段内容,@表示选择的包组,最前面使用横杠表示取反,即不选择的包或包组。
@base和@core两个包组总是被默认选择,所以不必在%packages中指定它们%packages
@base @core @debugging @development @dial
-up @hardware-monitoring @performance @server-policy @workstation-policy sgpio device-mapper-persistent-data systemtap-client
lrzsz
tree

%end

 以下是CentOS 6.6下的ks文件示例。

install
text
nfs --server=192.168.100.100 --dir=/install
url --url=http://192.168.100.100/centos6.6
bootloader --location=mbr --driveorder=sda --append="crashkernel=auto quiet"
lang en_US.UTF-8
keyboard us
network --onboot=yes --device=eth0 --bootproto=dhcp --noipv6
rootpw  --iscrypted $6$x4u9sIfSQsO7ddk5$/.0Xe6tFBY0uUmFFtyvAeY9YVPtcn8zl21fFNgmAoYtepQHRYDthQ4T1ZE12kDfAT6O3oXfRb7uv214t3Bb3K1
firewall --service=ssh
authconfig --enableshadow --passalgo=sha512
selinux --disabled
timezone Asia/Shanghai
reboot      


zerombr
clearpart --all --initlabel
part    /boot   --fstype=ext4   --asprimary     --size=250
part    /       --fstype=ext4   --asprimary     --grow     --size=2000
part    swap    --fstype=swap   --size=2000%packages

@base
@core
@debugging
@development
@dial-up
@hardware-monitoring
@performance
@server-policy
@workstation-policy
sgpio
device-mapper-persistent-data
systemtap-client
%end


%post    
cat >>/etc/yum.repos.d/base.repo<[base]
name=sohu
baseurl=http://mirrors.sohu.com/centos/$releasever/os/$basearch/
gpgcheck=0
enable=1[epel]
name=epel
baseurl=http://mirrors.sohu.com/Fedora-epel/6Server/x86_64/
enable=1
gpgcheck=0
eof
sed -i "s/ONBOOT.*$/ONBOOT=yes/" /etc/sysconfig/network-scripts/ifcfg-eth0   设置网卡为启动
sed -i "s/rhgb //" /boot/grub/grub.conf    设置启动系统时不使用图形进度条方式
sed -i "s/HOSTNAME=.*$/HOSTNAME=xuexi.longshuai.com/" /etc/sysconfig/network  设置主机名%end