Kickstart 无人值守安装

导言:

做为中小公司的运维,常常会遇到一些机械式的重复工做。例如:有时公司同时上线几十甚至上百台服务器,并且须要咱们在短期内完成系统安装。

常规的安装方法以下所示:
① 光盘安装系统:
一个的服务器 DVD 内置光驱百千块,百台服务器都配光驱就浪费了,由于一台服务器也就开始装系统能用的上,之后用的机会屈指可数。用 USB 外置光驱,插来插去也是十分繁琐。
② U盘安装系统:
仍是一样的问题,要一台一台服务器插 U 盘,重复而又繁琐。
③ 网络安装系统(ftp,http,nfs) :
这个方法不错,只要服务器能联网就能够安装系统了,可是还须要一台台服务器去敲键盘点鼠标。
高逼格的安装方法:
① Kickstart
② Cobbler
什么是PXE:
① PXE,全名 Pre-boot Execution Environment,预启动执行环境;
② 经过网络接口启动计算机,不依赖本地存储设备(如硬盘)或本地已安装的操做系统;
③ 由 Intel 和 Systemsoft 公司于 1999 年 9 月 20 日公布的技术;
④ Client/Server 的工做模式;
⑤ PXE 客户端会调用网际协议(IP)、用户数据报协议(UDP)、动态主机设定协议(DHCP)、小型文件传输协议(TFTP)等网络协议;
⑥ PXE 客户端(Client)这个术语是指机器在 PXE 启动过程当中的角色。一个 PXE 客户端可使一台服务器、笔记本电脑或者其余装有 PXE 启动代码的机器(咱们电脑的网卡)。
严格来讲,PXE 并非一种安装方式,而是一种引导方式。进行 PXE 安装的必要条件是在要安装的计算机中必须包含一个 PXE 支持的网卡(NIC),即网卡中必需要有 PXE Client。PXE(Pre-boot Execution Environment) 协议可使计算机经过网络启动。此协议分为 Client 端和 Server 端,而PXE Client 则在网卡的 ROM 中。当计算机引导时,BIOS 把 PXE Client 调入内存中执行,而后由PXE Client 将放置在远端的文件经过网络下载到本地运行。运行 PXE 协议须要设置 DHCP 服务器和TFTP 服务器。DHCP 服务器会给 PXE Client (将要安装系统的主机) 分配一个 IP 地址,因为是给PXE Client 分配 IP 地址,因此在配置 DHCP 服务器时须要增长 PXE 设置。此外,在 PXE Client的 ROM 中,已经存在了 TFTP Client,那么它就能够经过 TFTP 协议到 TFTP Server 上下载所需的文件了。
什么是 KickStart:
KickStart 是一种无人值守的安装方法。它的工做原理是在安装过程当中记录典型的须要人工干预填写的各类参数,并生成一个名为 ks.cfg 的文件。若是在安装过程当中(不仅局限于生成 KickStart 安装文件的机器)出现要填写参数的状况,安装程序首选会去查找 KickStart 生成的文件,若是找到合适的参数,就采用所找到的参数;若是没有找到合适的参数,便须要安装着手工干预了。因此若是KickStart 文件涵盖了安装过程当中可能出现的全部须要填写的参数,那么安装者彻底能够只告诉安装程序从何处取 ks.cfg 文件,而后就去忙本身的事情。等安装完毕,安装程序会根据 ks.cfg 中的设置重启系统,并结束安装。
什么是 Cobbler:
Cobbler 集中和简化了经过网络安装操做系统须要使用到的 DHCP/TFTP 和 DNS 服务的配置。Cobbler 不只有一个命令行界面,还提供了一个 Web 界面,大大下降了使用者的入门水平。Cobbler 内置了一个轻量级配置管理系统,但它也支持和其余配置管理系统集成,如 Puppet,暂时还不支持 SaltStack。
简单来讲,Cobbler 是对 Kickstart 的封装,简化安装步骤、使用流程,下降使用者的门槛。
PXE + Kickstart 无人值守安装操做系统完整过程:
Kickstart 无人值守安装
① PXE Client 向 DHCP 发送请求:
PXE Client 从本身的 PXE 网卡启动,经过 PXE BootROM(自启动芯片)会以 UDP(简单用户数据报协议)发送一个广播请求,向本网络中的 DHCP 服务器索取 IP。
② DHCP服务器提供信息:
DHCP服务器收到客户端的请求,验证是否来至合法的 PXE Client 的请求,验证经过它将给客户端一个"提供"响应,这个"提供"响应中包含了为客户端分配的 IP 地址、pxelinux 启动程序 (TFTP) 位置,以及配置文件所在位置。
③ PXE客户端请求下载启动文件:
客户端收到服务器的"回应"后,会回应一个帧,以请求传送启动所需文件。这些启动文件包括:pxelinux.0、pxelinux.cfg/default、vmlinuz、initrd.img 等文件。
④ Boot Server响应客户端请求并传送文件:
当服务器收到客户端的请求后,他们之间以后将有更多的信息在客户端与服务器之间做应答, 用以决定启动参数。BootROM 由 TFTP 通信协议从 Boot Server 下载启动安装程序所必须的文件(pxelinux.0、pxelinux.cfg/default)。default 文件下载完成后,会根据该文件中定义的引导顺序,启动Linux 安装程序的引导内核。
⑤ 请求下载自动应答文件:
客户端经过 pxelinux.cfg/default 文件成功的引导 Linux 安装内核后,安装程序首先必须肯定你经过什么安装介质来安装 linux,若是是经过网络安装 (NFS, FTP, HTTP),则会在这个时候初始化网络,并定位安装源位置。接着会读取 default 文件中指定的自动应答文件 ks.cfg 所在位置,根据该位置请求下载该文件。
提示:这里有个问题,在第2步和第5步初始化2次网络了,这是因为PXE获取的是安装用的内核以及安装程序等,而安装程序要获取的是安装系统所需的二进制包以及配置文件。所以PXE模块和安装程序是相对独立的,PXE的网络配置并不能传递给安装程序,从而进行两次获取IP地址过程,但IP地址在DHCP的租期内是同样的。
⑥ 客户端安装操做系统:
将 ks.cfg 文件下载回来后,经过该文件找到 OS Server,并按照该文件的配置请求下载安装过程须要的软件包。OS Server和客户端创建链接后,将开始传输软件包,客户端将开始安装操做系统。安装完成后,将提示从新引导计算机。
系统环境准备:html

[root@nfs-server ~]# cat //etc/redhat-release 
CentOS release 6.8 (Final)
[root@nfs-server ~]# uname -r
2.6.32-642.el6.x86_64
[root@nfs-server ~]# getenforce
Disabled
[root@nfs-server ~]# /etc/init.d/iptables status
iptables:未运行防火墙。
[root@nfs-server ~]# hostname -I
192.168.24.130 
[root@nfs-server ~]# ifconfig eth0|awk -F "[ :]+" 'NR==2 {print $4}'
192.168.24.130

关掉本地默认开启的 DHCP 服务,避免干扰:
Kickstart 无人值守安装python

安装 DHCP 服务:

DHCP 简介:
DHCP (Dynamic Host Configuration Protocol,动态主机配置协议)一般被应用在大型的局域网络环境中,主要做用是集中的管理、分配 IP 地址,使网络环境中的主机动态的得到 IP 地址、网关地址、DNS 服务器地址等信息,并可以提高地址的使用率。
DHCP 工做流程的六个主要步骤:
Kickstart 无人值守安装
DHCP 服务安装配置:linux

[root@centos ~]#  yum install dhcp -y 
[root@centos ~]#  rpm -ql dhcp|grep "dhcpd.conf"  #  查看配置文件的位置。
/etc/dhcp/dhcpd.conf
/usr/share/doc/dhcp-4.1.1/dhcpd-conf-to-ldap
/usr/share/doc/dhcp-4.1.1/dhcpd.conf.sample
/usr/share/man/man5/dhcpd.conf.5.gz
[root@centos ~]# cat /etc/dhcp/dhcpd.conf 
#
# DHCP Server Configuration file.
#   see /usr/share/doc/dhcp*/dhcpd.conf.sample  #  能够查看配置文件模板。
#   see 'man 5 dhcpd.conf'
[root@centos ~]# vim /usr/share/doc/dhcp-4.1.1/dhcpd.conf.sample  #  查看模板。
[root@centos ~]# vim /etc/dhcp/dhcpd.conf   #  编辑配置文件。
[root@centos ~]# cat /etc/dhcp/dhcpd.conf    #  内容以下所示。
#
# DHCP Server Configuration file.
#   see /usr/share/doc/dhcp*/dhcpd.conf.sample
#   see 'man 5 dhcpd.conf'
#
subnet 192.168.24.0 netmask 255.255.255.0 {
        range 192.168.24.100 192.168.24.200;  #  可分配的 IP 范围。
        option subnet-mask 255.255.255.0;  #  子网掩码。
        default-lease-time 21600;   #  设置默认的 IP 租用期限。
        max-lease-time 43200;  #  设置最大的 IP 租用期限。
        next-server 192.168.24.130;  #  告知客户端 TFTP 服务的 IP。
        filename "/pxelinux.0";   #  告知客户端从 TFTP 根目录下载 pxelinux.0 文件。
}
[root@centos ~]# /etc/init.d/dhcpd start   #  启动 DHCP 服务。
Starting dhcpd:                                            [  OK  ]
[root@centos ~]# netstat -lntup|grep dhcp   #  查看 DHCP 服务端口。
udp        0      0 0.0.0.0:67          0.0.0.0:*         1325/dhcpd

提示:
① 原本软件装完后都要加入开机自启动,但这个 Kickstart 系统就不能开机自启动,并且用完后服务都要关闭,防止将来重启服务器自动重装系统了。
② 若是机器数量过多的话,注意 dhcp 服务器的 IP 地址池,不要由于耗尽 IP 而致使dhcpd 服务器没有 IP 地址 release 的状况。 web

安装 TFTP 服务:

TFTP 服务简介:
TFTP(Trivial File Transfer Protocol,简单文件传输协议)是 TCP/IP 协议族中的一个用来在客户机与服务器之间进行简单文件传输的协议,提供不复杂、开销不大的文件传输协议。端口号为 69。
TFTP 安装配置:express

[root@centos ~]# yum -y install tftp-server
[root@centos ~]# vim /etc/xinetd.d/tftp
service tftp
{
        socket_type             = dgram
        protocol                = udp
        wait                    = yes
        user                    = root
        server                  = /usr/sbin/in.tftpd
        server_args             = -s /var/lib/tftpboot  # 指定目录,保持默认,不用修改。
        disable                 = no    # 由原来的 yes 改成 no。
        per_source              = 11
        cps                     = 100 2
        flags                   = IPv4
}

这里修改配置文件能够用一条命令完成:bootstrap

[root@nfs-server ~]# sed -i '14s#yes#no#g' /etc/xinetd.d/tftp
[root@centos ~]# /etc/init.d/xinetd start   #  启动服务。
Starting xinetd:                                           [  OK  ]
[root@centos ~]# netstat -tunlp|grep 69
udp        0      0 0.0.0.0:69             0.0.0.0:*        1821/xinetd

配置 HTTP 服务:

[root@centos ~]# yum -y install httpd
[root@centos ~]# sed -i "277i ServerName 127.0.0.1:80" /etc/httpd/conf/httpd.conf
[root@centos ~]# /etc/init.d/httpd start
Starting httpd:                          [  OK  ]
[root@centos ~]# mkdir /var/www/html/CentOS-6.8

此时须要肯定虚拟机已链接镜像文件:
Kickstart 无人值守安装
挂载到站点目录上:vim

[root@centos ~]# mount /dev/cdrom /var/www/html/CentOS-6.8/
mount: block device /dev/sr0 is write-protected, mounting read-only
[root@centos ~]# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda3       7.1G  1.5G  5.3G  21% /
tmpfs           491M     0  491M   0% /dev/shm
/dev/sda1       190M   33M  147M  19% /boot
/dev/sr0        3.7G  3.7G     0 100% /var/www/html/CentOS-6.8

提示:无论怎么弄,只要把安装光盘内容能经过 web 发布便可。由于是演示,若是复制镜像就有点浪费时间。但生产环境就必定要复制了,光盘读取速度有限。
此时,经过访问 http://192.168.132.151/CentOS-6.8/ 可获得以下界面:
Kickstart 无人值守安装centos

配置支持 PXE 的启动程序:

PXE 引导配置(bootstrap):
Syslinux 是一个功能强大的引导加载程序,并且兼容各类介质。Syslinux 是一个小型的 linux 操做系统,它的目的是简化首次安装 linux 的时间,并创建维护或其余特殊用途的启动盘。若是没有找到 pxelinux.0 这个文件,能够安装一下。bash

[root@centos ~]# yum -y install syslinux
[root@centos ~]# cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/
#  复制启动菜单程序文件。
[root@centos ~]# cp -a /var/www/html/CentOS-6.8/isolinux/* /var/lib/tftpboot/
[root@centos ~]# ls /var/lib/tftpboot/   #  服务器启动菜单目录。
boot.cat   initrd.img    memtest     TRANS.TBL
boot.msg   isolinux.bin  pxelinux.0  vesamenu.c32
grub.conf  isolinux.cfg  splash.jpg  vmlinuz
[root@centos ~]# mkdir -p /var/lib/tftpboot/pxelinux.cfg  #  新建目录存放客户端配置文件。
[root@centos ~]# cp /var/www/html/CentOS-6.8/isolinux/isolinux.cfg /var/lib/tftpboot/pxelinux.cfg/default

PXE 配置文件 default 解析:
配合虚拟机演示了解 default 文件(新建一个虚拟机,注意内存至少给 1G),打开电源后显示以下界面:
Kickstart 无人值守安装
接下来的画面就是咱们熟悉的界面,输入ESC能够进入命令行界面:
Kickstart 无人值守安装服务器

[root@centos ~]# cat /var/lib/tftpboot/pxelinux.cfg/default  #  查看 default 文件。
default vesamenu.c32   #  默认加载一个菜单。
#prompt 1   # 开启会显示命令行 'boot: '提示符。prompt 值为 0 时则不提示,将会直接启动 'default' 参数中指定的内容。
timeout 600 # timeout 时间是引导时等待用户手动选择的时间,设为  1可直接引导,单位为 1/10 秒。
display boot.msg
menu background splash.jpg      # 菜单背景图片、标题、颜色。
menu title Welcome to CentOS 6.8!
menu color border 0 #ffffffff #00000000
menu color sel 7 #ffffffff #ff000000
menu color title 0 #ffffffff #00000000
menu color tabmsg 0 #ffffffff #00000000
menu color unsel 0 #ffffffff #00000000
menu color hotsel 0 #ff000000 #ffffffff
menu color hotkey 7 #ffffffff #ff000000
menu color scrollbar 0 #ffffffff #00000000
# label 指定在 boot: 提示符下输入的关键字,好比 boot:linux[ENTER],这个会启动 label linux 下标记的 kernel 和 initrd.img 文件。
label linux  # 一个标签就是前面图片的一行选项。
  menu label ^Install or upgrade an existing system
  menu default
  kernel vmlinuz  # 指定要启动的内核。一样要注意路径,默认是/tftpboot目录。
  append initrd=initrd.img  # 指定追加给内核的参数,initrd.img 是一个最小的 linux 系统。
label vesa
  menu label Install system with ^basic video driver
  kernel vmlinuz
  append initrd=initrd.img nomodeset
label rescue
  menu label ^Rescue installed system
  kernel vmlinuz
  append initrd=initrd.img rescue
label local
  menu label Boot from ^local drive
  localboot 0xffff
label memtest86
  menu label ^Memory test
  kernel memtest
  append -

预热之手动网络安装:
① 新建一台空白虚拟机,也不要挂载ISO镜像,打开电源,选择第一个选项。
Kickstart 无人值守安装
② 选择英语;
③ 选择美式键盘;
④ 选择 URL 安装;
⑤ 输入 http://192.168.24.130/CentOS-6.8/ 地址:
⑥ 出现此页面后面的步骤就和光盘安装同样了:
Kickstart 无人值守安装

建立 ks.cfg 文件:

一般,咱们在安装操做系统的过程当中,须要大量的和服务器交互操做,为了减小这个交互过程,Kickstart 就诞生了。使用这种 Kickstart,只需事先定义好一个 Kickstart 自动应答配置文件 ks.cfg(一般存放在安装服务器上),并让安装程序知道该配置文件的位置,在安装过程当中安装程序就能够本身从该文件中读取安装配置,这样就避免了在安装过程当中屡次的人机交互,从而实现无人值守的自动化安装。
生成 Kickstart 配置文件的三种方法:
① 每安装好一台 Centos 机器,Centos 安装程序都会建立一个 kickstart 配置文件,记录你的真实安装配置。若是你但愿实现和某系统相似的安装,能够基于该系统的 kickstart 配置文件来生成你本身的kickstart 配置文件(生成的文件名字叫 anaconda-ks.cfg,位于 /root/anaconda-ks.cfg)。
② Centos 提供了一个图形化的 kickstart 配置工具。在任何一个安装好的 Linux 系统上运行该工具,就能够很容易地建立你本身的 kickstart 配置文件。kickstart 配置工具命令为 redhat-config-kickstart(RHEL3)或 system-config-kickstart(RHEL4,RHEL5)。网上有不少用 CentOS 桌面版生成 ks文件的文章,若是有现成的系统就没什么可说。但没有现成的,也没有必要去用桌面版,命令行也很简单。
③ 阅读 kickstart 配置文件的手册。用任何一个文本编辑器均可以建立你本身的 kickstart 配置文件。
查看anaconda-ks.cfg 文件:

[root@centos ~]# cat anaconda-ks.cfg
# Kickstart file automatically generated by anaconda.
#version=DEVEL
install    #  告知安装程序,这是一次全新安装,而不是升级 upgrade。
cdrom
lang en_US.UTF-8
keyboard us
network --onboot no --device eth0 --bootproto dhcp --noipv6
rootpw  --iscrypted $6$IgStnuEDwKSvfbm8$nCvzA6Lt/79248rswzLTAudxVb3JhwUpBid7qcoFeduQ8iphWxcu1tom.rdH5ynBGhc0KhF/h5yeAuFL7iReS0
firewall --service=ssh
authconfig --enableshadow --passalgo=sha512
selinux --enforcing
timezone Asia/Shanghai
bootloader --location=mbr --driveorder=sda --append="crashkernel=auto rhgb quiet"
# The following is the partition information you requested
# Note that any partitions you deleted are not expressed
# here so unless you clear all partitions first, this is
# not guaranteed to work
#clearpart --none
#part /boot --fstype=ext4 --asprimary --size=200
#part swap --asprimary --size=512
#part / --fstype=ext4 --grow --asprimary --size=200
repo --name="CentOS"  --baseurl=cdrom:sr0 --cost=100
%packages
@base
@compat-libraries
@core
@debugging
@development
@server-policy
@workstation-policy
python-dmidecode
sgpio
device-mapper-persistent-data
systemtap-client
%end

详解 ks.cfg 文件:
官网文档 :
CentOS6 : https://access.redhat.com/knowledge/docs/en-US/Red_Hat_Enterprise_Linux/6/html/Installation_Guide/s1-kickstart2-options.html
提示:官网自带中文版,选一下语言便可。
该文件组成大体分为 3 段:
① 命令段 :
键盘类型,语言,安装方式等系统的配置,有必选项和可选项,若是缺乏某项必选项,安装时会中断并提示用户选择此项的选项。
② 软件包段 :
%packages
@groupname: 指定安装的包组。
package_name: 指定安装的包。
-package_name:指定不安装的包。
在安装过程当中默认安装的软件包,安装软件时会自动分析依赖关系。
③ 脚本段(可选) :
%pre:安装系统前执行的命令或脚本 (因为只依赖于启动镜像,支持的命令不多)。
%post:安装系统后执行的命令或脚本 (基本支持全部命令)。
编写 ks.cfg 文件:

[root@centos ~]# grub-crypt   #  先生成一个密码备用。
Password: 123456
Retype password: 123456
$6$uUftrH0Z80ZruqFa$AWKZm9TeFwzabt/IKF25hgxyfYYYGuDTxL.ev4ZV21irLhpgcH11VWe822w995Lf4TbktAGhELTx1dU32LkYM.
[root@centos ~]# vim /var/www/html/ks_config/CentOS-6.8-ks.cfg
[root@centos ~]# cat /var/www/html/ks_config/CentOS-6.8-ks.cfg  
# Kickstart Configurator for CentOS 6.7 by yao zhang
install
url --url="http://192.168.132.151/CentOS-6.8/"
text
lang en_US.UTF-8
keyboard us
zerombr
bootloader --location=mbr --driveorder=sda --append="crashkernel=auto rhgb quiet"
network --bootproto=dhcp --device=eth0 --onboot=yes --noipv6 --hostname=CentOS6
timezone --utc Asia/Shanghai
authconfig --enableshadow --passalgo=sha512
rootpw  --iscrypted $6$uUftrH0Z80ZruqFa$AWKZm9TeFwzabt/IKF25hgxyfYYYGuDTxL.ev4ZV21irLhpgcH11VWe822w995Lf4TbktAGhELTx1dU32LkYM.
clearpart --all --initlabel
part /boot --fstype=ext4 --asprimary --size=200
part swap --size=1024
part / --fstype=ext4 --grow --asprimary --size=200
firstboot --disable
selinux --disabled
firewall --disabled
logging --level=info
reboot
%packages
@base
@compat-libraries
@debugging
@development
tree
nmap
sysstat
lrzsz
dos2unix
telnet
%post
wget -O /tmp/optimization.sh http://192.168.136.151/ks_config/optimization.sh &>/dev/null
/bin/sh /tmp/optimization.sh
%end

开机优化脚本:

[root@centos ~]# vim /var/www/html/ks_config/optimization.sh
[root@centos ~]# cat /var/www/html/ks_config/optimization.sh 
#!/bin/bash
##############################################################
# File Name: /var/www/html/ks_config/optimization.sh
# Version: V1.0
# Author: yao zhang
# Organization: www.zyops.com
# Created Time : 2015-12-03 15:23:08
# Description: Linux system initialization
##############################################################
. /etc/init.d/functions
Ip=10.0.0.7
Port=80
ConfigDir=ks_config
# Judge Http server is ok?
PortNum=`nmap $Ip  -p $Port 2>/dev/null|grep open|wc -l`
[ $PortNum -lt 1 ] && {
        echo "Http server is bad!"
        exit 1
}
# Defined result function
function Msg(){
        if [ $? -eq 0 ];then
          action "$1" /bin/true
        else
          action "$1" /bin/false
        fi
}
# Defined IP function
function ConfigIP(){
        Suffix=`ifconfig eth0|awk -F "[ .]+" 'NR==2 {print $6}'`
        cat >/etc/sysconfig/network-scripts/ifcfg-eth0 <<-END
        DEVICE=eth0
        TYPE=Ethernet
        ONBOOT=yes
        NM_CONTROLLED=yes
        BOOTPROTO=none
        IPADDR=10.0.0.$Suffix
        PREFIX=24
        GATEWAY=10.0.0.2
        DNS1=10.0.0.2
        DEFROUTE=yes
        IPV4_FAILURE_FATAL=yes
        IPV6INIT=no
        NAME="System eth0"
        END
        Msg "config eth0"
}
# Defined Yum source Functions
function yum(){
        YumDir=/etc/yum.repos.d
        [ -f "$YumDir/CentOS-Base.repo" ] && cp $YumDir/CentOS-Base.repo{,.ori} 
        wget -O $YumDir/CentOS-Base.repo http://$Ip:$Port/$ConfigDir/CentOS-Base.repo &>/dev/null &&\
        wget -O $YumDir/epel.repo http://$Ip:$Port/$ConfigDir/epel.repo &>/dev/null &&\
        Msg "YUM source"
}
# Defined Hide the system version number Functions
function HideVersion(){
        [ -f "/etc/issue" ] && >/etc/issue
        Msg "Hide issue" 
        [ -f "/etc/issue.net" ] && > /etc/issue.net
        Msg "Hide issue.net"
}
# Defined OPEN FILES Functions
function openfiles(){
        [ -f "/etc/security/limits.conf" ] && {
        echo '*  -  nofile  65535' >> /etc/security/limits.conf
        Msg "open files"
        }
}
# Defined Kernel parameters Functions
function kernel(){
        KernelDir=/etc
        [ -f "$KernelDir/sysctl.conf" ] && /bin/mv $KernelDir/sysctl.conf{,.ori}
        wget -O $KernelDir/sysctl.conf http://$Ip:$Port/$ConfigDir/sysctl.conf &>/dev/null
        Msg "Kernel config"
}
# Defined System Startup Services Functions
function boot(){
        for oldboy in `chkconfig --list|grep "3:on"|awk '{print $1}'|grep -vE "crond|network|rsyslog|sshd|sysstat"` 
          do 
           chkconfig $oldboy off
        done
        Msg "BOOT config"
}
# Defined Time Synchronization Functions
function Time(){
        echo "#time sync by zhangyao at $(date +%F)" >>/var/spool/cron/root
        echo '*/5 * * * * /usr/sbin/ntpdate time.nist.gov &>/dev/null' >>/var/spool/cron/root
        Msg "Time Synchronization"
}
# Defined main Functions
function main(){
        ConfigIP    
        yum
        HideVersion
        openfiles
        kernel
        boot
        Time
}
main

整合编辑 default 配置文件:

[root@centos ~]# vim /var/lib/tftpboot/pxelinux.cfg/default
[root@centos ~]# cat /var/lib/tftpboot/pxelinux.cfg/default
default ks
prompt 0
label ks
  kernel vmlinuz
  append initrd=initrd.img ks=http://192.168.24.130/ks_config/CentOS-6.8-ks.cfg

无人值守自动安装:

打开系统电源,出去喝杯水。过会回来,系统就以经装好了。
安装完成后验证:

[root@CentOS6 ~]# df -h   #  自动分区。
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda2       6.6G  1.4G  4.9G  22% /
tmpfs           491M     0  491M   0% /dev/shm
/dev/sda1       190M   34M  147M  19% /boot
[root@CentOS6 ~]# /etc/init.d/iptables status   #  自动优化。
iptables: Firewall is not running.
[root@CentOS6 ~]# getenforce  #  自动优化。
Disabled
[root@CentOS6 ~]# ifconfig eth0|awk -F "[ :]+" 'NR==2 {print $4}'
192.168.132.153
[root@CentOS6 ~]# chkconfig --list|grep "3:on" #  自动优化。
crond           0:off   1:off   2:on    3:on    4:on    5:on    6:off
network         0:off   1:off   2:on    3:on    4:on    5:on    6:off
rsyslog         0:off   1:off   2:on    3:on    4:on    5:on    6:off
sshd            0:off   1:off   2:on    3:on    4:on    5:on    6:off
sysstat         0:off   1:on    2:on    3:on    4:on    5:on    6:off