003-Automanual-System-Deployment-With-Kickstart


title: 使用Kickstart实现半自动化系统批量部署
category: 系统部署
date: 2019-04-13 20:45
---

Kickstart-Logo

阅读导览:

  1. 借助Xmanager图形转发代理,快速上手Kickstart工具
  2. 借助Kickstart工具,为CentOS6.9和CentOS7.4分别制作对应的Anaconda应答文件模板
  3. 模块化拆分RESET.sh系统初始化脚本,优化生成更适合自动化部署的Post-Installation-Script安装后脚本
  4. 根据应答文件模板、安装后脚本、以及上一篇博文总结得到的“分区策略”和“软件包列表”,组装出适用于两版系统的四种安装方式的系统部署应答文件
  5. 对适用于两版系统的四种安装方式的系统部署应答文件进行测试

马上开吃

借助Kickstart制作Anaconda应答文件模板

  1. 借助Xmanager图形转发代理,快速上手Kickstart工具
  2. 借助Kickstart工具,为CentOS6.9和CentOS7.4分别制作对应的Anaconda应答文件模板
  3. 模块化拆分RESET.sh系统初始化脚本,优化生成更适合自动化部署的Post-Installation-Script安装后脚本

安装使用Kickstart

第一步:安装图形桌面包组

#!/bin/bash
# 定义一个变量,用来判断当前CentOS发行版的主版本号
SYSVER=`cat /etc/redhat-release | awk -F. '{print $1}' | awk '{print $NF}'`
if [ $SYSVER == 6 ]; then
    # 针对CentOS6需要安装的图形桌面包组:Desktop
    yum -y groupinstall "Desktop"
elif [ $SYSVER == 7 ]; then
    # 针对CentOS7需要安装的图形桌面包组:Server with GUI
    yum -y groupinstall "Server with GUI"
fi

第二步:安装Kickstart工具软件包

#!/bin/bash
# CentOS6和CentOS7安装相同的软件包:system-config-kickstart
yum -y install system-config-kickstart

第三步:开启Xmanager图形转发代理

Xmanager-X11-GUI-Proxy-Demon

第四步:在Xshell远程连接窗口中开启远程图形界面重定向到本地

#!/bin/bash
# 在Xshell远程连接窗口中执行,不区分系统版本
# 172.16.0.1:本地VMnet8网卡IP地址
# 0.0:任意端口
export DISPLAY=172.16.0.1:0.0; xhost +
# 看到下面的提示信息,表示图形转发成功开启
# 
# access control disabled, clients can connect from any host
# 

GUI-Proxy-Success-On-CentOS6

GUI-Proxy-Success-On-CentOS7

第五步:启动Kickstart工具并在本地显示其图形界面

#!/bin/bash
system-config-kickstart

CentOS6.9上通过光盘RPM包安装的Kickstart版本如下:

system-config-kickstart 2.8.6.6

Kickstart-On-CentOS6

CentOS7.4上通过光盘RPM包安装的Kickstart版本如下:

system-config-kickstart 2.9.6

Kickstart-On-CentOS7

借助Kickstart生成CentOS6.9应答文件模板

第一步:Basic Configuration 基本设置

Kickstart图形选项 应答文件书写格式 具体含义解释
Default Laguage: English(USA) lang en_US 目标系统使用的默认语言,建议使用英语
Keyboard: U.S.English keyboard us 目标系统使用的键盘布局,建议使用默认
Time Zone: Asia/Shanghai timezone Asia/Shanghai 下拉选择时区: 亚洲/上海 ,并且不要将本地时间设置为UTC时间
Root Password: Encrypt root password rootpw --iscrypted $1$j3xr2/Pu$lVt5kaUUmJ6yTARABzvJG0 目标系统的root口令,建议设置的足够复杂 此处使用的加密算法是MD5
Target Architecture: x86,AMD64,or Intel EM64T #platform=x86, AMD64, or Intel EM64T 目标系统使用的CPU架构:x86
Reboot system after installation reboot 安装完系统自动重启,减少人工的干预
Perform installation in text mode (graphical is default) text 安装过程使用文本模式,减少资源消耗

CentOS6-Kickstart-Step1-Basic-Configuration

# System language
lang en_US
# System keyboard
keyboard us
# System timezone
timezone  Asia/Shanghai
# Root password
rootpw --iscrypted $1$j3xr2/Pu$lVt5kaUUmJ6yTARABzvJG0
#platform=x86, AMD64, or Intel EM64T
# Reboot after installation
reboot
# Use text mode install
text

第二步:Installation Method 安装方法

Kickstart图形选项 应答文件书写格式 具体含义解释
Perform new installation install 默认使用“全新安装”,保持默认即可
CD-ROM cdrom 默认使用“光盘上的YUM源”

CentOS6-Kickstart-Step2_1-Installation-Method-CDROM

# Install OS instead of upgrade
install
# Use CDROM installation media
cdrom
Kickstart图形选项 应答文件书写格式 具体含义解释
Perform new installation install 默认使用“全新安装”,保持默认即可
FTP url --url="ftp://172.16.0.100/centos/6" 使用“FTP上的YUM源”
FTP Server: 172.16.0.100 与FTP完整访问路径写在一块【--url="ftp://172.16.0.100/centos/7"】 填写服务器的IP地址
FTP Directory: /centos/6 与FTP完整访问路径写在一块【--url="ftp://172.16.0.100/centos/7"】 填写文件资源在FTP上的完整路径

CentOS6-Kickstart-Step2_2-Installation-Method-FTP

# Install OS instead of upgrade
install
# Use network installation
url --url="ftp://172.16.0.100/centos/6"

下面是FTP上的YUM源

地址栏是FTP完整访问路径 ftp://172.16.0.100/centos/6

CentOS6-Kickstart-Step2_3-FTP-Directory-Full-Path

第三步:BootLoader Options 引导选项

Kickstart图形选项 应答文件书写格式 具体含义解释
Install new boot loader 不书写 默认安装新的BootLoader
Install boot loader on Master Boot Record (MBR) bootloader --location=mbr 默认将BootLoader安装在MBR上

CentOS6-Kickstart-Step3-BootLoader-Options

# System bootloader configuration
bootloader --location=mbr

第四步:Partition Informations 磁盘分区策略

Kickstart图形选项 应答文件书写格式 具体含义解释
Clear Master Boot Record zerombr 建议“清空MBR”
Remove all existing partitions clearpart --all --initlabel 建议“删除所有已存在的分区”
Initialize the disk label 作为上条命令的参数【--initlabel】 建议“初始化磁盘标签”
/boot ext4 Yes 1024 part /boot --asprimary --fstype="ext4" --size=1024 启动分区:1GiB
/ ext4 Yes 51200 part / --fstype="ext4" --size=51200 根目录分区:50GiB
/opt ext4 Yes 20480 part /opt --fstype="ext4" --size=20480 /opt目录分区:20GiB
swap swap Yes 2048 part swap --fstype="swap" --size=2048 交换分区:2GiB

此处有坑:磁盘分区策略无法使用LVM逻辑卷

如果想在目标系统上实现LVM逻辑卷分区,请参考后续步骤

CentOS6-Kickstart-Step4-Partition-Information

# Clear the Master Boot Record
zerombr
# Partition clearing information
clearpart --all --initlabel 
# Disk partitioning information
part /boot --asprimary --fstype="ext4" --size=1024
part / --fstype="ext4" --size=51200
part /opt --fstype="ext4" --size=20480
part swap --fstype="swap" --size=2048

第五步:Network Configuration 网卡配置

  • 此处的网卡设置如果设置为DHCP,则会干扰自动化安装的进行,垃圾!直接留空!(滑稽)

  • 后续的安装后脚本会对eth0网卡做详细的配置

CentOS6-Kickstart-Step5-Network-Configuration

第六步:Authentication 认证加密方式

Kickstart图形选项 应答文件书写格式 具体含义解释
Use Shadow Passwords: SHA512 auth --useshadow --passalgo=sha512 加密方式保持默认即可

CentOS6-Kickstart-Step6-Authentication

# System authorization information
auth  --useshadow  --passalgo=sha512

第七步:Firewall Configuration 防火墙设置

Kickstart图形选项 应答文件书写格式 具体含义解释
SELinux: Disabled selinux --disabled 强烈建议“禁用SELinux”
Security level: Disable firewall firewall --disabled 建议“禁用防火墙”,防火墙可以在后续场景中按需开启

CentOS6-Kickstart-Step7-Firewall-Configuration

# SELinux configuration
selinux --disabled
# Firewall configuration
firewall --disabled

第八步:Display Configuration 显示设置

Kickstart图形选项 应答文件书写格式 具体含义解释
(DoNot) Install a graphical environment skipx 取消此处的勾选,“不安装图形环境”

CentOS6-Kickstart-Step8-Display-Configuration

# Do not configure the X Window System
skipx

第九步:Package Selections 安装包组选择

Kickstart图形选项 应答文件书写格式 具体含义解释
Base System: Base %packages<br/>@base<br/>%end 建议仅安装一个软件包组:Base (代码中的<br/>需要替换为回车换行)

此处有坑:当前系统的YUM源配置文件的书写格式必须符合下面这种规范:

/etc/yum.repos.d/base.repo

[base]
name=……
baseurl=……
gpgcheck=……
enable=1

即YUM源配置文件的名称必须为: [base]

CentOS6-Kickstart-Step9-Package-Selection

%packages
@base
%end

第十步:Pre Installation Script 安装前脚本

安装前脚本,一般情况下不使用,比较鸡肋,果断抛弃!(滑稽)

CentOS6-Kickstart-Step10-Pre-Installation-Script

第十一步:Post Installation Script 安装后脚本

安装后脚本,极其常用!此处放置RESET.sh系统初始化脚本,用于深度定制系统初始化配置

CentOS6-Kickstart-Step11-Post-Installation-Script

%post
mkdir -pv /etc/yum.repos.d/bak
mv /etc/yum.repos.d/{*.repo,bak/}
cat > /etc/yum.repos.d/base.repo <<EOF
[base]
name=CentOS 6.9 Base
baseurl=ftp://172.16.0.100/centos/6
gpgcheck=0
enable=1
EOF
yum clean all && yum repolist
%end

借助Kickstart生成CentOS7.4应答文件模板

第一步:Basic Configuration 基本设置

Kickstart图形选项 应答文件书写格式 具体含义解释
Default Laguage: English(USA) lang en_US 目标系统使用的默认语言,建议使用英语
Keyboard: U.S.English keyboard 'us' 目标系统使用的键盘布局,建议使用默认
Time Zone: Asia/Shanghai timezone Asia/Shanghai 下拉选择时区: 亚洲/上海 ,并且不要将本地时间设置为UTC时间
Root Password: Encrypt root password rootpw --iscrypted $1$j3xr2/Pu$lVt5kaUUmJ6yTARABzvJG0 目标系统的root口令,建议设置的足够复杂 此处使用的加密算法是MD5
Target Architecture: x86,AMD64,or Intel EM64T #platform=x86, AMD64, or Intel EM64T 目标系统使用的CPU架构:x86
Reboot system after installation reboot 安装完系统自动重启,减少人工的干预
Perform installation in text mode (graphical is default) text 安装过程使用文本模式,减少资源消耗

CentOS7-Kickstart-Step1-Basic-Configuration

# System language
lang en_US
# Keyboard layouts
keyboard 'us'
# System timezone
timezone Asia/Shanghai
# Root password
rootpw --iscrypted $1$j3xr2/Pu$lVt5kaUUmJ6yTARABzvJG0
#platform=x86, AMD64, or Intel EM64T
# Reboot after installation
reboot
# Use text mode install
text

第二步:Installation Method 安装方法

Kickstart图形选项 应答文件书写格式 具体含义解释
Perform new installation install 默认使用“全新安装”,保持默认即可
CD-ROM cdrom 默认使用“光盘上的YUM源”

CentOS7-Kickstart-Step2_1-Installation-Method-CDROM

# Install OS instead of upgrade
install
# Use CDROM installation media
cdrom
Kickstart图形选项 应答文件书写格式 具体含义解释
Perform new installation install 默认使用“全新安装”,保持默认即可
FTP url --url="ftp://172.16.0.100/centos/7" 使用“FTP上的YUM源”
FTP Server: 172.16.0.100 与FTP完整访问路径写在一块【--url="ftp://172.16.0.100/centos/7"】 填写服务器的IP地址
FTP Directory: /centos/7 与FTP完整访问路径写在一块【--url="ftp://172.16.0.100/centos/7"】 填写文件资源在FTP上的完整路径

CentOS7-Kickstart-Step2_2-Installation-Method-FTP

# Install OS instead of upgrade
install
# Use network installation
url --url="ftp://172.16.0.100/centos/7"

下面是FTP上的YUM源

地址栏是FTP完整访问路径 ftp://172.16.0.100/centos/7

CentOS7-Kickstart-Step2_3-FTP-Directory-Full-Path

第三步:BootLoader Options 引导选项

Kickstart图形选项 应答文件书写格式 具体含义解释
Install new boot loader 不书写 默认安装新的BootLoader
Install boot loader on Master Boot Record (MBR) bootloader --append="net.ifnames=0 biosdevname=0" --location=mbr 默认将BootLoader安装在MBR上
Kernel parameters: net.ifnames=0 biosdevname=0 作为上条命令的参数【--append="net.ifnames=0 biosdevname=0"】 目的:使目标系统的网卡命名回归传统的eth0,方便后续的批量管理

CentOS7-Kickstart-Step3-BootLoader-Options

# System bootloader configuration
bootloader --append="net.ifnames=0 biosdevname=0" --location=mbr

第四步:Partition Informations 磁盘分区策略

Kickstart图形选项 应答文件书写格式 具体含义解释
Clear Master Boot Record zerombr 建议“清空MBR”
Remove all existing partitions clearpart --all --initlabel 建议“删除所有已存在的分区”
Initialize the disk label 作为上条命令的参数【--initlabel】 建议“初始化磁盘标签”
/boot xfs Yes 1024 part /boot --asprimary --fstype="xfs" --size=1024 启动分区:1GiB
/ xfs Yes 51200 part / --fstype="xfs" --size=51200 根目录分区:50GiB
/opt xfs Yes 20480 part /opt --fstype="xfs" --size=20480 /opt目录分区:20GiB
swap swap Yes 2048 part swap --fstype="swap" --size=2048 交换分区:2GiB

此处有坑:磁盘分区策略无法使用LVM逻辑卷

如果想在目标系统上实现LVM逻辑卷分区,请参考后续步骤

CentOS7-Kickstart-Step4-Partition-Information

# Clear the Master Boot Record
zerombr
# Partition clearing information
clearpart --all --initlabel
# Disk partitioning information
part /boot --asprimary --fstype="xfs" --size=1024
part / --fstype="xfs" --size=51200
part /opt --fstype="xfs" --size=20480
part swap --fstype="swap" --size=2048

第五步:Network Configuration 网卡配置

  • 此处的网卡设置对目标系统无效,直接留空,可以减少应答文件的代码量~(滑稽)

  • 后续的安装后脚本会对eth0网卡做详细的配置

CentOS7-Kickstart-Step5-Network-Configuration

第六步:Authentication 认证加密方式

Kickstart图形选项 应答文件书写格式 具体含义解释
Use Shadow Passwords: SHA512 auth --useshadow --passalgo=sha512 加密方式保持默认即可

CentOS7-Kickstart-Step6-Authentication

# System authorization information
auth  --useshadow  --passalgo=sha512

第七步:Firewall Configuration 防火墙设置

Kickstart图形选项 应答文件书写格式 具体含义解释
SELinux: Disabled selinux --disabled 强烈建议“禁用SELinux”
Security level: Disable firewall firewall --disabled 建议“禁用防火墙”,防火墙可以在后续场景中按需开启

CentOS7-Kickstart-Step7-Firewall-Configuration

# SELinux configuration
selinux --disabled
# Firewall configuration
firewall --disabled

第八步:Display Configuration 显示设置

Kickstart图形选项 应答文件书写格式 具体含义解释
(DoNot) Install a graphical environment skipx 取消此处的勾选,“不安装图形环境”

CentOS7-Kickstart-Step8-Display-Configuration

# Do not configure the X Window System
skipx

第九步:Package Selections 安装包组选择

Kickstart图形选项 应答文件书写格式 具体含义解释
System: Base %packages<br/>@base<br/>%end 建议仅安装一个软件包组:Base (代码中的<br/>需要替换为回车换行)

此处有坑:当前系统的YUM源配置文件的书写格式必须符合下面这种规范:

/etc/yum.repos.d/base.repo

[development]
name=……
baseurl=……
gpgcheck=……
enable=1

即YUM源配置文件的名称必须为: [development]

CentOS7-Kickstart-Step9-Package-Selection

%packages
@base
-abrt-addon-ccpp
-abrt-addon-python
-abrt-cli
-abrt-console-notification
-bash-completion
-blktrace
-bridge-utils
-bzip2
-chrony
-cryptsetup
-dmraid
-dosfstools
-ethtool
-fprintd-pam
-gnupg2
-hunspell
-hunspell-en
-kpatch
-ledmon
-libaio
-libreport-plugin-mailx
-libstoragemgmt
-lvm2
-man-pages
-man-pages-overrides
-mdadm
-mlocate
-mtr
-nano
-ntpdate
-pinfo
-plymouth
-pm-utils
-rdate
-rfkill
-rng-tools
-rsync
-scl-utils
-setuptool
-smartmontools
-sos
-sssd-client
-strace
-sysstat
-systemtap-runtime
-tcpdump
-tcsh
-teamd
-time
-unzip
-usbutils
-vim-enhanced
-virt-what
-wget
-which
-words
-xfsdump
-xz
-yum-langpacks
-yum-utils
-zip

%end

第十步:Pre Installation Script 安装前脚本

安装前脚本,一般情况下不使用,比较鸡肋,果断抛弃!(滑稽)

CentOS7-Kickstart-Step10-Pre-Installation-Script

第十一步:Post Installation Script 安装后脚本

安装后脚本,极其常用!此处放置RESET.sh系统初始化脚本,用于深度定制系统初始化配置

CentOS7-Kickstart-Step11-Post-Installation-Script

%post
mkdir -pv /etc/yum.repos.d/bak
mv /etc/yum.repos.d/{*.repo,bak/}
cat > /etc/yum.repos.d/base.repo <<EOF
[development]
name=CentOS 7.4 Base
baseurl=ftp://172.16.0.100/centos/7
gpgcheck=0
enable=1
EOF
yum clean all && yum repolist
%end

适用于CentOS两版系统的 Post-Installation-Script

模块一:创建基于FTP上YUM源的仓库配置文件

# 定义一个变量,用来判断当前CentOS发行版的主版本号
SYSVER=`cat /etc/redhat-release | awk -F. '{print $1}' | awk '{print $NF}'`
# 将系统自带的YUM仓库配置文件转移到备份目录里面
mkdir -pv /etc/yum.repos.d/bak
mv /etc/yum.repos.d/{*.repo,bak/}
# 针对CentOS6系统版本,新建一个基于FTP上YUM源的仓库配置文件
[ $SYSVER == 6 ] && cat > /etc/yum.repos.d/base.repo <<EOF
[base]
name=CentOS 6.9 DVD
baseurl=ftp://172.16.0.100/centos/6
gpgcheck=0
enable=1
EOF
echo $?
# 针对CentOS7系统版本,新建一个基于FTP上YUM源的仓库配置文件
[ $SYSVER == 7 ] && cat > /etc/yum.repos.d/base.repo <<EOF
[development]
name=CentOS 7.4 DVD
baseurl=ftp://172.16.0.100/centos/7
gpgcheck=0
enable=1
EOF
echo $?
# 刷新本地YUM源缓存
yum clean all && yum repolist

模块二:安装功能扩展软件包

# 定义一个变量,用来判断当前CentOS发行版的主版本号
SYSVER=`cat /etc/redhat-release | awk -F. '{print $1}' | awk '{print $NF}'`
# 针对CentOS6系统版本,安装适用于CentOS6的功能扩展软件包
[ $SYSVER == 6 ] && yum -y install autofs vim tree ntp
# 针对CentOS7系统版本,安装适用于CentOS7的功能扩展软件包
[ $SYSVER == 7 ] && yum -y install autofs vim tree chrony

模块三:启用时间同步服务

# 定义一个变量,用来判断当前CentOS发行版的主版本号
SYSVER=`cat /etc/redhat-release | awk -F. '{print $1}' | awk '{print $NF}'`
# 针对不同的系统版本,对应修改不同的配置文件
if [ $SYSVER == 6 ]; then
    # 针对CentOS6系统版本,修改NTP配置文件
    sed -ri 's/(server.*iburst)/\#\1/' /etc/ntp.conf
elif [ $SYSVER == 7 ]; then
    # 针对CentOS7系统版本,修改chrony配置文件
    sed -ri 's/(server.*iburst)/\#\1/' /etc/chrony.conf
fi
# 针对CentOS6系统版本,将新的配置项追加写入NTP配置文件
[ $SYSVER == 6 ] && cat >> /etc/ntp.conf <<EOF
server ntp1.aliyun.com iburst
server ntp2.aliyun.com iburst
server ntp3.aliyun.com iburst
server ntp4.aliyun.com iburst
server ntp5.aliyun.com iburst
server ntp6.aliyun.com iburst
server ntp7.aliyun.com iburst
EOF
echo $?
# 针对CentOS7系统版本,将新的配置项追加写入chrony配置文件
[ $SYSVER == 7 ] && cat >> /etc/chrony.conf <<EOF
server ntp1.aliyun.com iburst
server ntp2.aliyun.com iburst
server ntp3.aliyun.com iburst
server ntp4.aliyun.com iburst
server ntp5.aliyun.com iburst
server ntp6.aliyun.com iburst
server ntp7.aliyun.com iburst
EOF
echo $?
# 针对不同的系统版本,对应修改不同的配置文件
if [ $SYSVER == 6 ]; then
    # 针对CentOS6系统版本,设置ntpd服务开机自启动
    chkconfig ntpd on
elif [ $SYSVER == 7 ]; then
    # 针对CentOS7系统版本,设置chrony服务开机自启动
    systemctl enable chronyd.service
fi

模块四:确认当前系统时区

# 定义一个变量,用来判断当前CentOS发行版的主版本号
SYSVER=`cat /etc/redhat-release | awk -F. '{print $1}' | awk '{print $NF}'`
# 针对不同的系统版本,使用不同的方法
if [ $SYSVER == 6 ]; then
    # 针对CentOS6系统版本,使用Bash的Profile脚本来修改目标系统的时区
    echo 'TZ="Asia/Shanghai"; export TZ' > /etc/profile.d/TZ.sh
elif [ $SYSVER == 7 ]; then
    # 针对CentOS7系统版本,使用特有的设置命令来设置时区
    timedatectl set-timezone Asia/Shanghai
fi

模块五:重写目标系统的IP配置文件

# 定义一个变量,用来判断当前CentOS发行版的主版本号
SYSVER=`cat /etc/redhat-release | awk -F. '{print $1}' | awk '{print $NF}'`
# 针对不同的系统版本,清除对应的干扰源
if [ $SYSVER == 6 ]; then
    # 针对CentOS6系统版本,每次开机自动清空一个“自动把eth0变成eth1”的干扰源
    echo '> /etc/udev/rules.d/70-persistent-net.rules' >> /etc/rc.local
elif [ $SYSVER == 7 ]; then
    # 针对CentOS7系统版本,将自动生成的 ens* 配置文件移动到系统临时目录下
    mv /etc/sysconfig/network-scripts/ifcfg-ens* /tmp/
fi
# 针对CentOS6系统版本,将新的配置项覆盖写入eth0网卡配置文件
[ $SYSVER == 6 ] && cat > /etc/sysconfig/network-scripts/ifcfg-eth0 <<EOF
DEVICE=eth0
BOOTPROTO=none
ONBOOT=YES
IPADDR=172.16.0.60
PREFIX=16
GATEWAY=172.16.0.254
DNS=114.114.114.114
EOF
echo $?
# 针对CentOS7系统版本,将新的配置项覆盖写入eth0网卡配置文件
[ $SYSVER == 7 ] && cat > /etc/sysconfig/network-scripts/ifcfg-eth0 <<EOF
DEVICE=eth0
BOOTPROTO=none
ONBOOT=YES
IPADDR=172.16.0.70
PREFIX=16
GATEWAY=172.16.0.254
DNS=114.114.114.114
EOF
echo $?

模块六:修改目标系统的DNS解析配置文件

# 定义一个变量,用来判断当前CentOS发行版的主版本号
SYSVER=`cat /etc/redhat-release | awk -F. '{print $1}' | awk '{print $NF}'`
# 针对CentOS6系统版本,将NetworkManager服务设置为开机禁用,清除对目标系统DNS解析的干扰
[ $SYSVER == 6 ] && chkconfig NetworkManager off && service NetworkManager stop
echo $?
# 将DNS解析配置项覆盖写入resolv.conf配置文件
echo 'nameserver 114.114.114.114' > /etc/resolv.conf

模块七:修改目标系统的主机名配置文件

# 定义一个变量,用来判断当前CentOS发行版的主版本号
SYSVER=`cat /etc/redhat-release | awk -F. '{print $1}' | awk '{print $NF}'`
# 针对不同的系统版本,使用不同的方法
if [ $SYSVER == 6 ]; then
    # 针对CentOS6系统版本,修改配置文件的HOSTNAME值
    sed -ri 's@(HOSTNAME=).*@\1CentOS69.uman-tech.cn@' /etc/sysconfig/network
elif [ $SYSVER == 7 ]; then
    # 针对CentOS7系统版本,将主机名覆盖写入配置文件
    echo 'CentOS74.uman-tech.cn' > /etc/hostname
fi

模块八:定制目标系统的命令提示符PS1样式

# 定义一个变量,用来判断当前CentOS发行版的主版本号
SYSVER=`cat /etc/redhat-release | awk -F. '{print $1}' | awk '{print $NF}'`
# 针对不同的系统版本,设置不同的命令提示符PS1样式
if [ $SYSVER == 6 ]; then
    # 针对CentOS6系统版本,将命令提示符PS1样式修改为32绿色
    echo 'export PS1="\[\e[1;32m\][\u@\h \W]\\$\[\e[0m\]"' > /etc/profile.d/env.sh
elif [ $SYSVER == 7 ]; then
    # 针对CentOS7系统版本,将命令提示符PS1样式修改为34蓝色
    echo 'export PS1="\[\e[1;34m\][\u@\h \W]\\$\[\e[0m\]"' > /etc/profile.d/env.sh
fi
cat /etc/profile.d/env.sh

模块九:加速目标主机的SSH访问

# 禁止在SSH建立连接时检查GSSAPI验证,不区分CentOS系统版本
sed -ri 's@^(GSSAPIAuthentication )yes@\1no@' /etc/ssh/sshd_config
# 禁止在SSH建立连接时检查DNS解析,不区分CentOS系统版本
sed -ri 's@#(UseDNS ).*@\1no@' /etc/ssh/sshd_config

模块十:为root用户提供辅助的命令别名

# 以下命令别名仅对root用户生效,不区分CentOS系统版本
cat >> /root/.bashrc <<EOF
alias cdnet='cd /etc/sysconfig/network-scripts/'
alias vie0='vim /etc/sysconfig/network-scripts/ifcfg-eth0'
EOF

模块十一:启用本地的光盘自动挂载服务

# 定义一个变量,用来判断当前CentOS发行版的主版本号
SYSVER=`cat /etc/redhat-release | awk -F. '{print $1}' | awk '{print $NF}'`
# 针对不同的系统版本,使用不同的方法
if [ $SYSVER == 6 ]; then
    # 针对CentOS6系统版本,将autofs服务设置为开机自启动
    chkconfig autofs on
elif [ $SYSVER == 7 ]; then
    # 针对CentOS7系统版本,将autofs服务设置为开机自启动
    systemctl enable autofs.service
fi

模块十二:CentOS7阻止初始化程序询问是否同意License

# 定义一个变量,用来判断当前CentOS发行版的主版本号
SYSVER=`cat /etc/redhat-release | awk -F. '{print $1}' | awk '{print $NF}'`
# 针对CentOS7系统版本,阻止初始化程序询问是否同意License
if [ $SYSVER  == 7 ]; then
    systemctl disable initial-setup.service
    systemctl disable initial-setup-graphical.service
fi

模块十三:(可选)CentOS精简开机服务

# 定义一个变量,用来判断当前CentOS发行版的主版本号
SYSVER=`cat /etc/redhat-release | awk -F. '{print $1}' | awk '{print $NF}'`
# 针对不同的系统版本,使用不同的方法
if [ $SYSVER == 6 ]; then
    # 针对CentOS6系统版本,将postfix服务设置为开机禁用
    chkconfig postfix off
elif [ $SYSVER == 7 ]; then
    # 针对CentOS7系统版本,将postfix服务设置为开机禁用
    systemctl disable postfix
fi

模块十四:(可选)桌面化安装CentOS后的首次启动使用图形界面

# 定义一个变量,用来判断当前CentOS发行版的主版本号
SYSVER=`cat /etc/redhat-release | awk -F. '{print $1}' | awk '{print $NF}'`
# 针对不同的系统版本,使用不同的方法
if [ $SYSVER == 6 ]; then
    # 针对CentOS6系统版本,下一次开机默认使用图形界面
    sed -ri 's@id:3:initdefault:@id:5:initdefault:@' /etc/inittab
elif [ $SYSVER == 7 ]; then
    # 针对CentOS7系统版本,下一次开机默认使用图形界面
    systemctl set-default graphical.target
    # 为图形化界面创建一个假的用户
    useradd -M test && echo centos|passwd --stdin test
fi

修改完善:系统部署应答文件

  • 根据应答文件模板、安装后脚本、以及上一篇博文总结得到的“分区策略”和“软件包列表”,组装出适用于两版系统的四种安装方式的系统部署应答文件

适用于最小化安装的CentOS6.9应答文件

模块一:CentOS6应答控制命令

# Part1. Basic Configuration 基本设置
# System language
lang en_US
# System keyboard
keyboard us
# System timezone
timezone  Asia/Shanghai
# Root password
rootpw --iscrypted $1$j3xr2/Pu$lVt5kaUUmJ6yTARABzvJG0
#platform=x86, AMD64, or Intel EM64T
# Reboot after installation
reboot
# Use text mode install
text

# Part2. Installation Method 安装方法
# Install OS instead of upgrade
install
# Use network installation
url --url="ftp://172.16.0.100/centos/6"
# Use CDROM installation media
#cdrom

# Part3. BootLoader Options 引导选项
# System bootloader configuration
bootloader --location=mbr

# Part4. Partition Informations 磁盘分区策略(LVM)
# Clear the Master Boot Record
zerombr
# Partition clearing information
clearpart --all --initlabel 
# Disk partitioning information
part /boot --fstype=ext4 --size=1024
part pv.008002 --grow --size=200
# LVM partitioning information
volgroup vg0 --pesize=4096 pv.008002
logvol /opt --fstype=ext4 --name=opt --vgname=vg0 --size=20480
logvol / --fstype=ext4 --name=root --vgname=vg0 --size=51200
logvol swap --name=swap --vgname=vg0 --size=2048

# Part6. Authentication 认证加密方式
# System authorization information
auth  --useshadow  --passalgo=sha512

# Part7. Firewall Configuration 防火墙设置
# SELinux configuration
selinux --disabled
# Firewall configuration
firewall --disabled

# Part8. Display Configuration 显示设置
# Do not configure the X Window System
skipx

模块二:CentOS6最小化软件包列表

# Part9. Package Selections 安装包组选择
%packages
@core
@server-policy
@workstation-policy
%end

模块三:CentOS6最小化安装后脚本

# Part11. Post Installation Script 安装后脚本
%post
#!/bin/bash
# CentOS6最小化安装后脚本
# IP地址:172.16.0.61/16

# 模块一:创建基于FTP上YUM源的仓库配置文件
# 定义一个变量,用来判断当前CentOS发行版的主版本号
SYSVER=`cat /etc/redhat-release | awk -F. '{print $1}' | awk '{print $NF}'`
# 将系统自带的YUM仓库配置文件转移到备份目录里面
mkdir -pv /etc/yum.repos.d/bak
mv /etc/yum.repos.d/{*.repo,bak/}
# 针对CentOS6系统版本,新建一个基于FTP上YUM源的仓库配置文件
[ $SYSVER == 6 ] && cat > /etc/yum.repos.d/base.repo <<EOF
[base]
name=CentOS 6.9 DVD
baseurl=ftp://172.16.0.100/centos/6
gpgcheck=0
enable=1
EOF
echo $?
# 针对CentOS7系统版本,新建一个基于FTP上YUM源的仓库配置文件
[ $SYSVER == 7 ] && cat > /etc/yum.repos.d/base.repo <<EOF
[development]
name=CentOS 7.4 DVD
baseurl=ftp://172.16.0.100/centos/7
gpgcheck=0
enable=1
EOF
echo $?
# 刷新本地YUM源缓存
yum clean all && yum repolist


# 模块二:安装功能扩展软件包
# 定义一个变量,用来判断当前CentOS发行版的主版本号
SYSVER=`cat /etc/redhat-release | awk -F. '{print $1}' | awk '{print $NF}'`
# 针对CentOS6系统版本,安装适用于CentOS6的功能扩展软件包
[ $SYSVER == 6 ] && yum -y install autofs vim tree ntp
# 针对CentOS7系统版本,安装适用于CentOS7的功能扩展软件包
[ $SYSVER == 7 ] && yum -y install autofs vim tree chrony


# 模块三:启用时间同步服务
# 定义一个变量,用来判断当前CentOS发行版的主版本号
SYSVER=`cat /etc/redhat-release | awk -F. '{print $1}' | awk '{print $NF}'`
# 针对不同的系统版本,对应修改不同的配置文件
if [ $SYSVER == 6 ]; then
    # 针对CentOS6系统版本,修改NTP配置文件
    sed -ri 's/(server.*iburst)/\#\1/' /etc/ntp.conf
elif [ $SYSVER == 7 ]; then
    # 针对CentOS7系统版本,修改chrony配置文件
    sed -ri 's/(server.*iburst)/\#\1/' /etc/chrony.conf
fi
# 针对CentOS6系统版本,将新的配置项追加写入NTP配置文件
[ $SYSVER == 6 ] && cat >> /etc/ntp.conf <<EOF
server ntp1.aliyun.com iburst
server ntp2.aliyun.com iburst
server ntp3.aliyun.com iburst
server ntp4.aliyun.com iburst
server ntp5.aliyun.com iburst
server ntp6.aliyun.com iburst
server ntp7.aliyun.com iburst
EOF
echo $?
# 针对CentOS7系统版本,将新的配置项追加写入chrony配置文件
[ $SYSVER == 7 ] && cat >> /etc/chrony.conf <<EOF
server ntp1.aliyun.com iburst
server ntp2.aliyun.com iburst
server ntp3.aliyun.com iburst
server ntp4.aliyun.com iburst
server ntp5.aliyun.com iburst
server ntp6.aliyun.com iburst
server ntp7.aliyun.com iburst
EOF
echo $?
# 针对不同的系统版本,对应修改不同的配置文件
if [ $SYSVER == 6 ]; then
    # 针对CentOS6系统版本,设置ntpd服务开机自启动
    chkconfig ntpd on
elif [ $SYSVER == 7 ]; then
    # 针对CentOS7系统版本,设置chrony服务开机自启动
    systemctl enable chronyd.service
fi


# 模块四:确认当前系统时区
# 定义一个变量,用来判断当前CentOS发行版的主版本号
SYSVER=`cat /etc/redhat-release | awk -F. '{print $1}' | awk '{print $NF}'`
# 针对不同的系统版本,使用不同的方法
if [ $SYSVER == 6 ]; then
    # 针对CentOS6系统版本,使用Bash的Profile脚本来修改目标系统的时区
    echo 'TZ="Asia/Shanghai"; export TZ' > /etc/profile.d/TZ.sh
elif [ $SYSVER == 7 ]; then
    # 针对CentOS7系统版本,使用特有的设置命令来设置时区
    timedatectl set-timezone Asia/Shanghai
fi


# 模块五:重写目标系统的IP配置文件
# 定义一个变量,用来判断当前CentOS发行版的主版本号
SYSVER=`cat /etc/redhat-release | awk -F. '{print $1}' | awk '{print $NF}'`
# 针对不同的系统版本,清除对应的干扰源
if [ $SYSVER == 6 ]; then
    # 针对CentOS6系统版本,每次开机自动清空一个“自动把eth0变成eth1”的干扰源
    echo '> /etc/udev/rules.d/70-persistent-net.rules' >> /etc/rc.local
elif [ $SYSVER == 7 ]; then
    # 针对CentOS7系统版本,将自动生成的 ens* 配置文件移动到系统临时目录下
    mv /etc/sysconfig/network-scripts/ifcfg-ens* /tmp/
fi
# 针对CentOS6系统版本,将新的配置项覆盖写入eth0网卡配置文件
[ $SYSVER == 6 ] && cat > /etc/sysconfig/network-scripts/ifcfg-eth0 <<EOF
DEVICE=eth0
BOOTPROTO=none
ONBOOT=YES
IPADDR=172.16.0.61
PREFIX=16
GATEWAY=172.16.0.254
DNS=114.114.114.114
EOF
echo $?
# 针对CentOS7系统版本,将新的配置项覆盖写入eth0网卡配置文件
[ $SYSVER == 7 ] && cat > /etc/sysconfig/network-scripts/ifcfg-eth0 <<EOF
DEVICE=eth0
BOOTPROTO=none
ONBOOT=YES
IPADDR=172.16.0.71
PREFIX=16
GATEWAY=172.16.0.254
DNS=114.114.114.114
EOF
echo $?


# 模块六:修改目标系统的DNS解析配置文件
# 定义一个变量,用来判断当前CentOS发行版的主版本号
SYSVER=`cat /etc/redhat-release | awk -F. '{print $1}' | awk '{print $NF}'`
# 针对CentOS6系统版本,将NetworkManager服务设置为开机禁用,清除对目标系统DNS解析的干扰
[ $SYSVER == 6 ] && chkconfig NetworkManager off && service NetworkManager stop
echo $?
# 将DNS解析配置项覆盖写入resolv.conf配置文件
echo 'nameserver 114.114.114.114' > /etc/resolv.conf


# 模块七:修改目标系统的主机名配置文件
# 定义一个变量,用来判断当前CentOS发行版的主版本号
SYSVER=`cat /etc/redhat-release | awk -F. '{print $1}' | awk '{print $NF}'`
# 针对不同的系统版本,使用不同的方法
if [ $SYSVER == 6 ]; then
    # 针对CentOS6系统版本,修改配置文件的HOSTNAME值
    sed -ri 's@(HOSTNAME=).*@\1CentOS69.uman-tech.cn@' /etc/sysconfig/network
elif [ $SYSVER == 7 ]; then
    # 针对CentOS7系统版本,将主机名覆盖写入配置文件
    echo 'CentOS74.uman-tech.cn' > /etc/hostname
fi


# 模块八:定制目标系统的命令提示符PS1样式
# 定义一个变量,用来判断当前CentOS发行版的主版本号
SYSVER=`cat /etc/redhat-release | awk -F. '{print $1}' | awk '{print $NF}'`
# 针对不同的系统版本,设置不同的命令提示符PS1样式
if [ $SYSVER == 6 ]; then
    # 针对CentOS6系统版本,将命令提示符PS1样式修改为32绿色
    echo 'export PS1="\[\e[1;32m\][\u@\h \W]\\$\[\e[0m\]"' > /etc/profile.d/env.sh
elif [ $SYSVER == 7 ]; then
    # 针对CentOS7系统版本,将命令提示符PS1样式修改为34蓝色
    echo 'export PS1="\[\e[1;34m\][\u@\h \W]\\$\[\e[0m\]"' > /etc/profile.d/env.sh
fi
cat /etc/profile.d/env.sh


# 模块九:加速目标主机的SSH访问
# 禁止在SSH建立连接时检查GSSAPI验证,不区分CentOS系统版本
sed -ri 's@^(GSSAPIAuthentication )yes@\1no@' /etc/ssh/sshd_config
# 禁止在SSH建立连接时检查DNS解析,不区分CentOS系统版本
sed -ri 's@#(UseDNS ).*@\1no@' /etc/ssh/sshd_config


# 模块十:为root用户提供辅助的命令别名
# 以下命令别名仅对root用户生效,不区分CentOS系统版本
cat >> /root/.bashrc <<EOF
alias cdnet='cd /etc/sysconfig/network-scripts/'
alias vie0='vim /etc/sysconfig/network-scripts/ifcfg-eth0'
EOF


# 模块十一:启用本地的光盘自动挂载服务
# 定义一个变量,用来判断当前CentOS发行版的主版本号
SYSVER=`cat /etc/redhat-release | awk -F. '{print $1}' | awk '{print $NF}'`
# 针对不同的系统版本,使用不同的方法
if [ $SYSVER == 6 ]; then
    # 针对CentOS6系统版本,将autofs服务设置为开机自启动
    chkconfig autofs on
elif [ $SYSVER == 7 ]; then
    # 针对CentOS7系统版本,将autofs服务设置为开机自启动
    systemctl enable autofs.service
fi


# 模块十三:(可选)CentOS精简开机服务
# 定义一个变量,用来判断当前CentOS发行版的主版本号
SYSVER=`cat /etc/redhat-release | awk -F. '{print $1}' | awk '{print $NF}'`
# 针对不同的系统版本,使用不同的方法
if [ $SYSVER == 6 ]; then
    # 针对CentOS6系统版本,将postfix服务设置为开机禁用
    chkconfig postfix off
elif [ $SYSVER == 7 ]; then
    # 针对CentOS7系统版本,将postfix服务设置为开机禁用
    systemctl disable postfix
fi
%end

完整版本:CentOS69-Minimal-ks.cfg

# CentOS69-Minimal-ks.cfg

# Part1. Basic Configuration 基本设置
# System language
lang en_US
# System keyboard
keyboard us
# System timezone
timezone  Asia/Shanghai
# Root password
rootpw --iscrypted $1$j3xr2/Pu$lVt5kaUUmJ6yTARABzvJG0
#platform=x86, AMD64, or Intel EM64T
# Reboot after installation
reboot
# Use text mode install
text

# Part2. Installation Method 安装方法
# Install OS instead of upgrade
install
# Use network installation
url --url="ftp://172.16.0.100/centos/6"
# Use CDROM installation media
#cdrom

# Part3. BootLoader Options 引导选项
# System bootloader configuration
bootloader --location=mbr

# Part4. Partition Informations 磁盘分区策略(LVM)
# Clear the Master Boot Record
zerombr
# Partition clearing information
clearpart --all --initlabel 
# Disk partitioning information
part /boot --fstype=ext4 --size=1024
part pv.008002 --grow --size=200
# LVM partitioning information
volgroup vg0 --pesize=4096 pv.008002
logvol /opt --fstype=ext4 --name=opt --vgname=vg0 --size=20480
logvol / --fstype=ext4 --name=root --vgname=vg0 --size=51200
logvol swap --name=swap --vgname=vg0 --size=2048

# Part6. Authentication 认证加密方式
# System authorization information
auth  --useshadow  --passalgo=sha512

# Part7. Firewall Configuration 防火墙设置
# SELinux configuration
selinux --disabled
# Firewall configuration
firewall --disabled

# Part8. Display Configuration 显示设置
# Do not configure the X Window System
skipx

# Part9. Package Selections 安装包组选择
%packages
@core
@server-policy
@workstation-policy
%end

# Part11. Post Installation Script 安装后脚本
%post
#!/bin/bash
# CentOS6最小化安装后脚本
# IP地址:172.16.0.61/16

# 模块一:创建基于FTP上YUM源的仓库配置文件
# 定义一个变量,用来判断当前CentOS发行版的主版本号
SYSVER=`cat /etc/redhat-release | awk -F. '{print $1}' | awk '{print $NF}'`
# 将系统自带的YUM仓库配置文件转移到备份目录里面
mkdir -pv /etc/yum.repos.d/bak
mv /etc/yum.repos.d/{*.repo,bak/}
# 针对CentOS6系统版本,新建一个基于FTP上YUM源的仓库配置文件
[ $SYSVER == 6 ] && cat > /etc/yum.repos.d/base.repo <<EOF
[base]
name=CentOS 6.9 DVD
baseurl=ftp://172.16.0.100/centos/6
gpgcheck=0
enable=1
EOF
echo $?
# 针对CentOS7系统版本,新建一个基于FTP上YUM源的仓库配置文件
[ $SYSVER == 7 ] && cat > /etc/yum.repos.d/base.repo <<EOF
[development]
name=CentOS 7.4 DVD
baseurl=ftp://172.16.0.100/centos/7
gpgcheck=0
enable=1
EOF
echo $?
# 刷新本地YUM源缓存
yum clean all && yum repolist


# 模块二:安装功能扩展软件包
# 定义一个变量,用来判断当前CentOS发行版的主版本号
SYSVER=`cat /etc/redhat-release | awk -F. '{print $1}' | awk '{print $NF}'`
# 针对CentOS6系统版本,安装适用于CentOS6的功能扩展软件包
[ $SYSVER == 6 ] && yum -y install autofs vim tree ntp
# 针对CentOS7系统版本,安装适用于CentOS7的功能扩展软件包
[ $SYSVER == 7 ] && yum -y install autofs vim tree chrony


# 模块三:启用时间同步服务
# 定义一个变量,用来判断当前CentOS发行版的主版本号
SYSVER=`cat /etc/redhat-release | awk -F. '{print $1}' | awk '{print $NF}'`
# 针对不同的系统版本,对应修改不同的配置文件
if [ $SYSVER == 6 ]; then
    # 针对CentOS6系统版本,修改NTP配置文件
    sed -ri 's/(server.*iburst)/\#\1/' /etc/ntp.conf
elif [ $SYSVER == 7 ]; then
    # 针对CentOS7系统版本,修改chrony配置文件
    sed -ri 's/(server.*iburst)/\#\1/' /etc/chrony.conf
fi
# 针对CentOS6系统版本,将新的配置项追加写入NTP配置文件
[ $SYSVER == 6 ] && cat >> /etc/ntp.conf <<EOF
server ntp1.aliyun.com iburst
server ntp2.aliyun.com iburst
server ntp3.aliyun.com iburst
server ntp4.aliyun.com iburst
server ntp5.aliyun.com iburst
server ntp6.aliyun.com iburst
server ntp7.aliyun.com iburst
EOF
echo $?
# 针对CentOS7系统版本,将新的配置项追加写入chrony配置文件
[ $SYSVER == 7 ] && cat >> /etc/chrony.conf <<EOF
server ntp1.aliyun.com iburst
server ntp2.aliyun.com iburst
server ntp3.aliyun.com iburst
server ntp4.aliyun.com iburst
server ntp5.aliyun.com iburst
server ntp6.aliyun.com iburst
server ntp7.aliyun.com iburst
EOF
echo $?
# 针对不同的系统版本,对应修改不同的配置文件
if [ $SYSVER == 6 ]; then
    # 针对CentOS6系统版本,设置ntpd服务开机自启动
    chkconfig ntpd on
elif [ $SYSVER == 7 ]; then
    # 针对CentOS7系统版本,设置chrony服务开机自启动
    systemctl enable chronyd.service
fi


# 模块四:确认当前系统时区
# 定义一个变量,用来判断当前CentOS发行版的主版本号
SYSVER=`cat /etc/redhat-release | awk -F. '{print $1}' | awk '{print $NF}'`
# 针对不同的系统版本,使用不同的方法
if [ $SYSVER == 6 ]; then
    # 针对CentOS6系统版本,使用Bash的Profile脚本来修改目标系统的时区
    echo 'TZ="Asia/Shanghai"; export TZ' > /etc/profile.d/TZ.sh
elif [ $SYSVER == 7 ]; then
    # 针对CentOS7系统版本,使用特有的设置命令来设置时区
    timedatectl set-timezone Asia/Shanghai
fi


# 模块五:重写目标系统的IP配置文件
# 定义一个变量,用来判断当前CentOS发行版的主版本号
SYSVER=`cat /etc/redhat-release | awk -F. '{print $1}' | awk '{print $NF}'`
# 针对不同的系统版本,清除对应的干扰源
if [ $SYSVER == 6 ]; then
    # 针对CentOS6系统版本,每次开机自动清空一个“自动把eth0变成eth1”的干扰源
    echo '> /etc/udev/rules.d/70-persistent-net.rules' >> /etc/rc.local
elif [ $SYSVER == 7 ]; then
    # 针对CentOS7系统版本,将自动生成的 ens* 配置文件移动到系统临时目录下
    mv /etc/sysconfig/network-scripts/ifcfg-ens* /tmp/
fi
# 针对CentOS6系统版本,将新的配置项覆盖写入eth0网卡配置文件
[ $SYSVER == 6 ] && cat > /etc/sysconfig/network-scripts/ifcfg-eth0 <<EOF
DEVICE=eth0
BOOTPROTO=none
ONBOOT=YES
IPADDR=172.16.0.61
PREFIX=16
GATEWAY=172.16.0.254
DNS=114.114.114.114
EOF
echo $?
# 针对CentOS7系统版本,将新的配置项覆盖写入eth0网卡配置文件
[ $SYSVER == 7 ] && cat > /etc/sysconfig/network-scripts/ifcfg-eth0 <<EOF
DEVICE=eth0
BOOTPROTO=none
ONBOOT=YES
IPADDR=172.16.0.71
PREFIX=16
GATEWAY=172.16.0.254
DNS=114.114.114.114
EOF
echo $?


# 模块六:修改目标系统的DNS解析配置文件
# 定义一个变量,用来判断当前CentOS发行版的主版本号
SYSVER=`cat /etc/redhat-release | awk -F. '{print $1}' | awk '{print $NF}'`
# 针对CentOS6系统版本,将NetworkManager服务设置为开机禁用,清除对目标系统DNS解析的干扰
[ $SYSVER == 6 ] && chkconfig NetworkManager off && service NetworkManager stop
echo $?
# 将DNS解析配置项覆盖写入resolv.conf配置文件
echo 'nameserver 114.114.114.114' > /etc/resolv.conf


# 模块七:修改目标系统的主机名配置文件
# 定义一个变量,用来判断当前CentOS发行版的主版本号
SYSVER=`cat /etc/redhat-release | awk -F. '{print $1}' | awk '{print $NF}'`
# 针对不同的系统版本,使用不同的方法
if [ $SYSVER == 6 ]; then
    # 针对CentOS6系统版本,修改配置文件的HOSTNAME值
    sed -ri 's@(HOSTNAME=).*@\1CentOS69.uman-tech.cn@' /etc/sysconfig/network
elif [ $SYSVER == 7 ]; then
    # 针对CentOS7系统版本,将主机名覆盖写入配置文件
    echo 'CentOS74.uman-tech.cn' > /etc/hostname
fi


# 模块八:定制目标系统的命令提示符PS1样式
# 定义一个变量,用来判断当前CentOS发行版的主版本号
SYSVER=`cat /etc/redhat-release | awk -F. '{print $1}' | awk '{print $NF}'`
# 针对不同的系统版本,设置不同的命令提示符PS1样式
if [ $SYSVER == 6 ]; then
    # 针对CentOS6系统版本,将命令提示符PS1样式修改为32绿色
    echo 'export PS1="\[\e[1;32m\][\u@\h \W]\\$\[\e[0m\]"' > /etc/profile.d/env.sh
elif [ $SYSVER == 7 ]; then
    # 针对CentOS7系统版本,将命令提示符PS1样式修改为34蓝色
    echo 'export PS1="\[\e[1;34m\][\u@\h \W]\\$\[\e[0m\]"' > /etc/profile.d/env.sh
fi
cat /etc/profile.d/env.sh


# 模块九:加速目标主机的SSH访问
# 禁止在SSH建立连接时检查GSSAPI验证,不区分CentOS系统版本
sed -ri 's@^(GSSAPIAuthentication )yes@\1no@' /etc/ssh/sshd_config
# 禁止在SSH建立连接时检查DNS解析,不区分CentOS系统版本
sed -ri 's@#(UseDNS ).*@\1no@' /etc/ssh/sshd_config


# 模块十:为root用户提供辅助的命令别名
# 以下命令别名仅对root用户生效,不区分CentOS系统版本
cat >> /root/.bashrc <<EOF
alias cdnet='cd /etc/sysconfig/network-scripts/'
alias vie0='vim /etc/sysconfig/network-scripts/ifcfg-eth0'
EOF


# 模块十一:启用本地的光盘自动挂载服务
# 定义一个变量,用来判断当前CentOS发行版的主版本号
SYSVER=`cat /etc/redhat-release | awk -F. '{print $1}' | awk '{print $NF}'`
# 针对不同的系统版本,使用不同的方法
if [ $SYSVER == 6 ]; then
    # 针对CentOS6系统版本,将autofs服务设置为开机自启动
    chkconfig autofs on
elif [ $SYSVER == 7 ]; then
    # 针对CentOS7系统版本,将autofs服务设置为开机自启动
    systemctl enable autofs.service
fi


# 模块十三:(可选)CentOS精简开机服务
# 定义一个变量,用来判断当前CentOS发行版的主版本号
SYSVER=`cat /etc/redhat-release | awk -F. '{print $1}' | awk '{print $NF}'`
# 针对不同的系统版本,使用不同的方法
if [ $SYSVER == 6 ]; then
    # 针对CentOS6系统版本,将postfix服务设置为开机禁用
    chkconfig postfix off
elif [ $SYSVER == 7 ]; then
    # 针对CentOS7系统版本,将postfix服务设置为开机禁用
    systemctl disable postfix
fi
%end

适用于桌面化安装的CentOS6.9应答文件

模块一:CentOS6应答控制命令

# Part1. Basic Configuration 基本设置
# System language
lang en_US
# System keyboard
keyboard us
# System timezone
timezone  Asia/Shanghai
# Root password
rootpw --iscrypted $1$j3xr2/Pu$lVt5kaUUmJ6yTARABzvJG0
#platform=x86, AMD64, or Intel EM64T
# Reboot after installation
reboot
# Use text mode install
text

# Part2. Installation Method 安装方法
# Install OS instead of upgrade
install
# Use network installation
url --url="ftp://172.16.0.100/centos/6"
# Use CDROM installation media
#cdrom

# Part3. BootLoader Options 引导选项
# System bootloader configuration
bootloader --location=mbr

# Part4. Partition Informations 磁盘分区策略(LVM)
# Clear the Master Boot Record
zerombr
# Partition clearing information
clearpart --all --initlabel 
# Disk partitioning information
part /boot --fstype=ext4 --size=1024
part pv.008002 --grow --size=200
# LVM partitioning information
volgroup vg0 --pesize=4096 pv.008002
logvol /opt --fstype=ext4 --name=opt --vgname=vg0 --size=20480
logvol / --fstype=ext4 --name=root --vgname=vg0 --size=51200
logvol swap --name=swap --vgname=vg0 --size=2048

# Part6. Authentication 认证加密方式
# System authorization information
auth  --useshadow  --passalgo=sha512

# Part7. Firewall Configuration 防火墙设置
# SELinux configuration
selinux --disabled
# Firewall configuration
firewall --disabled

# Part8. Display Configuration 显示设置
# Do not configure the X Window System
skipx

模块二:CentOS6桌面化软件包列表

# Part9. Package Selections 安装包组选择
%packages
@base
@core
@debugging
@basic-desktop
@desktop-debugging
@desktop-platform
@directory-client
@fonts
@general-desktop
@graphical-admin-tools
@input-methods
@internet-applications
@internet-browser
@java-platform
@legacy-x
@network-file-system-client
@office-suite
@print-client
@remote-desktop-clients
@server-platform
@server-policy
@workstation-policy
@x11
mtools
pax
python-dmidecode
oddjob
wodim
sgpio
genisoimage
device-mapper-persistent-data
abrt-gui
samba-winbind
certmonger
pam_krb5
krb5-workstation
libXmu
%end

模块三:CentOS6桌面化安装后脚本

# Part11. Post Installation Script 安装后脚本
%post
#!/bin/bash
# CentOS6桌面化安装后脚本
# IP地址:172.16.0.62/16

# 模块一:创建基于FTP上YUM源的仓库配置文件
# 定义一个变量,用来判断当前CentOS发行版的主版本号
SYSVER=`cat /etc/redhat-release | awk -F. '{print $1}' | awk '{print $NF}'`
# 将系统自带的YUM仓库配置文件转移到备份目录里面
mkdir -pv /etc/yum.repos.d/bak
mv /etc/yum.repos.d/{*.repo,bak/}
# 针对CentOS6系统版本,新建一个基于FTP上YUM源的仓库配置文件
[ $SYSVER == 6 ] && cat > /etc/yum.repos.d/base.repo <<EOF
[base]
name=CentOS 6.9 DVD
baseurl=ftp://172.16.0.100/centos/6
gpgcheck=0
enable=1
EOF
echo $?
# 针对CentOS7系统版本,新建一个基于FTP上YUM源的仓库配置文件
[ $SYSVER == 7 ] && cat > /etc/yum.repos.d/base.repo <<EOF
[development]
name=CentOS 7.4 DVD
baseurl=ftp://172.16.0.100/centos/7
gpgcheck=0
enable=1
EOF
echo $?
# 刷新本地YUM源缓存
yum clean all && yum repolist


# 模块二:安装功能扩展软件包
# 定义一个变量,用来判断当前CentOS发行版的主版本号
SYSVER=`cat /etc/redhat-release | awk -F. '{print $1}' | awk '{print $NF}'`
# 针对CentOS6系统版本,安装适用于CentOS6的功能扩展软件包
[ $SYSVER == 6 ] && yum -y install autofs vim tree ntp
# 针对CentOS7系统版本,安装适用于CentOS7的功能扩展软件包
[ $SYSVER == 7 ] && yum -y install autofs vim tree chrony


# 模块三:启用时间同步服务
# 定义一个变量,用来判断当前CentOS发行版的主版本号
SYSVER=`cat /etc/redhat-release | awk -F. '{print $1}' | awk '{print $NF}'`
# 针对不同的系统版本,对应修改不同的配置文件
if [ $SYSVER == 6 ]; then
    # 针对CentOS6系统版本,修改NTP配置文件
    sed -ri 's/(server.*iburst)/\#\1/' /etc/ntp.conf
elif [ $SYSVER == 7 ]; then
    # 针对CentOS7系统版本,修改chrony配置文件
    sed -ri 's/(server.*iburst)/\#\1/' /etc/chrony.conf
fi
# 针对CentOS6系统版本,将新的配置项追加写入NTP配置文件
[ $SYSVER == 6 ] && cat >> /etc/ntp.conf <<EOF
server ntp1.aliyun.com iburst
server ntp2.aliyun.com iburst
server ntp3.aliyun.com iburst
server ntp4.aliyun.com iburst
server ntp5.aliyun.com iburst
server ntp6.aliyun.com iburst
server ntp7.aliyun.com iburst
EOF
echo $?
# 针对CentOS7系统版本,将新的配置项追加写入chrony配置文件
[ $SYSVER == 7 ] && cat >> /etc/chrony.conf <<EOF
server ntp1.aliyun.com iburst
server ntp2.aliyun.com iburst
server ntp3.aliyun.com iburst
server ntp4.aliyun.com iburst
server ntp5.aliyun.com iburst
server ntp6.aliyun.com iburst
server ntp7.aliyun.com iburst
EOF
echo $?
# 针对不同的系统版本,对应修改不同的配置文件
if [ $SYSVER == 6 ]; then
    # 针对CentOS6系统版本,设置ntpd服务开机自启动
    chkconfig ntpd on
elif [ $SYSVER == 7 ]; then
    # 针对CentOS7系统版本,设置chrony服务开机自启动
    systemctl enable chronyd.service
fi


# 模块四:确认当前系统时区
# 定义一个变量,用来判断当前CentOS发行版的主版本号
SYSVER=`cat /etc/redhat-release | awk -F. '{print $1}' | awk '{print $NF}'`
# 针对不同的系统版本,使用不同的方法
if [ $SYSVER == 6 ]; then
    # 针对CentOS6系统版本,使用Bash的Profile脚本来修改目标系统的时区
    echo 'TZ="Asia/Shanghai"; export TZ' > /etc/profile.d/TZ.sh
elif [ $SYSVER == 7 ]; then
    # 针对CentOS7系统版本,使用特有的设置命令来设置时区
    timedatectl set-timezone Asia/Shanghai
fi


# 模块五:重写目标系统的IP配置文件
# 定义一个变量,用来判断当前CentOS发行版的主版本号
SYSVER=`cat /etc/redhat-release | awk -F. '{print $1}' | awk '{print $NF}'`
# 针对不同的系统版本,清除对应的干扰源
if [ $SYSVER == 6 ]; then
    # 针对CentOS6系统版本,每次开机自动清空一个“自动把eth0变成eth1”的干扰源
    echo '> /etc/udev/rules.d/70-persistent-net.rules' >> /etc/rc.local
elif [ $SYSVER == 7 ]; then
    # 针对CentOS7系统版本,将自动生成的 ens* 配置文件移动到系统临时目录下
    mv /etc/sysconfig/network-scripts/ifcfg-ens* /tmp/
fi
# 针对CentOS6系统版本,将新的配置项覆盖写入eth0网卡配置文件
[ $SYSVER == 6 ] && cat > /etc/sysconfig/network-scripts/ifcfg-eth0 <<EOF
DEVICE=eth0
BOOTPROTO=none
ONBOOT=YES
IPADDR=172.16.0.62
PREFIX=16
GATEWAY=172.16.0.254
DNS=114.114.114.114
EOF
echo $?
# 针对CentOS7系统版本,将新的配置项覆盖写入eth0网卡配置文件
[ $SYSVER == 7 ] && cat > /etc/sysconfig/network-scripts/ifcfg-eth0 <<EOF
DEVICE=eth0
BOOTPROTO=none
ONBOOT=YES
IPADDR=172.16.0.72
PREFIX=16
GATEWAY=172.16.0.254
DNS=114.114.114.114
EOF
echo $?


# 模块六:修改目标系统的DNS解析配置文件
# 定义一个变量,用来判断当前CentOS发行版的主版本号
SYSVER=`cat /etc/redhat-release | awk -F. '{print $1}' | awk '{print $NF}'`
# 针对CentOS6系统版本,将NetworkManager服务设置为开机禁用,清除对目标系统DNS解析的干扰
[ $SYSVER == 6 ] && chkconfig NetworkManager off && service NetworkManager stop
echo $?
# 将DNS解析配置项覆盖写入resolv.conf配置文件
echo 'nameserver 114.114.114.114' > /etc/resolv.conf


# 模块七:修改目标系统的主机名配置文件
# 定义一个变量,用来判断当前CentOS发行版的主版本号
SYSVER=`cat /etc/redhat-release | awk -F. '{print $1}' | awk '{print $NF}'`
# 针对不同的系统版本,使用不同的方法
if [ $SYSVER == 6 ]; then
    # 针对CentOS6系统版本,修改配置文件的HOSTNAME值
    sed -ri 's@(HOSTNAME=).*@\1CentOS69.uman-tech.cn@' /etc/sysconfig/network
elif [ $SYSVER == 7 ]; then
    # 针对CentOS7系统版本,将主机名覆盖写入配置文件
    echo 'CentOS74.uman-tech.cn' > /etc/hostname
fi


# 模块八:定制目标系统的命令提示符PS1样式
# 定义一个变量,用来判断当前CentOS发行版的主版本号
SYSVER=`cat /etc/redhat-release | awk -F. '{print $1}' | awk '{print $NF}'`
# 针对不同的系统版本,设置不同的命令提示符PS1样式
if [ $SYSVER == 6 ]; then
    # 针对CentOS6系统版本,将命令提示符PS1样式修改为32绿色
    echo 'export PS1="\[\e[1;32m\][\u@\h \W]\\$\[\e[0m\]"' > /etc/profile.d/env.sh
elif [ $SYSVER == 7 ]; then
    # 针对CentOS7系统版本,将命令提示符PS1样式修改为34蓝色
    echo 'export PS1="\[\e[1;34m\][\u@\h \W]\\$\[\e[0m\]"' > /etc/profile.d/env.sh
fi
cat /etc/profile.d/env.sh


# 模块九:加速目标主机的SSH访问
# 禁止在SSH建立连接时检查GSSAPI验证,不区分CentOS系统版本
sed -ri 's@^(GSSAPIAuthentication )yes@\1no@' /etc/ssh/sshd_config
# 禁止在SSH建立连接时检查DNS解析,不区分CentOS系统版本
sed -ri 's@#(UseDNS ).*@\1no@' /etc/ssh/sshd_config


# 模块十:为root用户提供辅助的命令别名
# 以下命令别名仅对root用户生效,不区分CentOS系统版本
cat >> /root/.bashrc <<EOF
alias cdnet='cd /etc/sysconfig/network-scripts/'
alias vie0='vim /etc/sysconfig/network-scripts/ifcfg-eth0'
EOF


# 模块十一:启用本地的光盘自动挂载服务
# 定义一个变量,用来判断当前CentOS发行版的主版本号
SYSVER=`cat /etc/redhat-release | awk -F. '{print $1}' | awk '{print $NF}'`
# 针对不同的系统版本,使用不同的方法
if [ $SYSVER == 6 ]; then
    # 针对CentOS6系统版本,将autofs服务设置为开机自启动
    chkconfig autofs on
elif [ $SYSVER == 7 ]; then
    # 针对CentOS7系统版本,将autofs服务设置为开机自启动
    systemctl enable autofs.service
fi


# 模块十三:(可选)CentOS精简开机服务
# 定义一个变量,用来判断当前CentOS发行版的主版本号
SYSVER=`cat /etc/redhat-release | awk -F. '{print $1}' | awk '{print $NF}'`
# 针对不同的系统版本,使用不同的方法
if [ $SYSVER == 6 ]; then
    # 针对CentOS6系统版本,将postfix服务设置为开机禁用
    chkconfig postfix off
elif [ $SYSVER == 7 ]; then
    # 针对CentOS7系统版本,将postfix服务设置为开机禁用
    systemctl disable postfix
fi


# 模块十四:(可选)桌面化安装CentOS后的首次启动使用图形界面
# 定义一个变量,用来判断当前CentOS发行版的主版本号
SYSVER=`cat /etc/redhat-release | awk -F. '{print $1}' | awk '{print $NF}'`
# 针对不同的系统版本,使用不同的方法
if [ $SYSVER == 6 ]; then
    # 针对CentOS6系统版本,下一次开机默认使用图形界面
    sed -ri 's@id:3:initdefault:@id:5:initdefault:@' /etc/inittab
elif [ $SYSVER == 7 ]; then
    # 针对CentOS7系统版本,下一次开机默认使用图形界面
    systemctl set-default graphical.target
    # 为图形化界面创建一个假的用户
    useradd -M test && echo centos|passwd --stdin test
fi
%end

完整版本:CentOS69-Desktop-ks.cfg

# CentOS69-Desktop-ks.cfg

# Part1. Basic Configuration 基本设置
# System language
lang en_US
# System keyboard
keyboard us
# System timezone
timezone  Asia/Shanghai
# Root password
rootpw --iscrypted $1$j3xr2/Pu$lVt5kaUUmJ6yTARABzvJG0
#platform=x86, AMD64, or Intel EM64T
# Reboot after installation
reboot
# Use text mode install
text

# Part2. Installation Method 安装方法
# Install OS instead of upgrade
install
# Use network installation
url --url="ftp://172.16.0.100/centos/6"
# Use CDROM installation media
#cdrom

# Part3. BootLoader Options 引导选项
# System bootloader configuration
bootloader --location=mbr

# Part4. Partition Informations 磁盘分区策略(LVM)
# Clear the Master Boot Record
zerombr
# Partition clearing information
clearpart --all --initlabel 
# Disk partitioning information
part /boot --fstype=ext4 --size=1024
part pv.008002 --grow --size=200
# LVM partitioning information
volgroup vg0 --pesize=4096 pv.008002
logvol /opt --fstype=ext4 --name=opt --vgname=vg0 --size=20480
logvol / --fstype=ext4 --name=root --vgname=vg0 --size=51200
logvol swap --name=swap --vgname=vg0 --size=2048

# Part6. Authentication 认证加密方式
# System authorization information
auth  --useshadow  --passalgo=sha512

# Part7. Firewall Configuration 防火墙设置
# SELinux configuration
selinux --disabled
# Firewall configuration
firewall --disabled

# Part8. Display Configuration 显示设置
# Do not configure the X Window System
skipx

# Part9. Package Selections 安装包组选择
%packages
@base
@core
@debugging
@basic-desktop
@desktop-debugging
@desktop-platform
@directory-client
@fonts
@general-desktop
@graphical-admin-tools
@input-methods
@internet-applications
@internet-browser
@java-platform
@legacy-x
@network-file-system-client
@office-suite
@print-client
@remote-desktop-clients
@server-platform
@server-policy
@workstation-policy
@x11
mtools
pax
python-dmidecode
oddjob
wodim
sgpio
genisoimage
device-mapper-persistent-data
abrt-gui
samba-winbind
certmonger
pam_krb5
krb5-workstation
libXmu
%end

# Part11. Post Installation Script 安装后脚本
%post
#!/bin/bash
# CentOS6桌面化安装后脚本
# IP地址:172.16.0.62/16

# 模块一:创建基于FTP上YUM源的仓库配置文件
# 定义一个变量,用来判断当前CentOS发行版的主版本号
SYSVER=`cat /etc/redhat-release | awk -F. '{print $1}' | awk '{print $NF}'`
# 将系统自带的YUM仓库配置文件转移到备份目录里面
mkdir -pv /etc/yum.repos.d/bak
mv /etc/yum.repos.d/{*.repo,bak/}
# 针对CentOS6系统版本,新建一个基于FTP上YUM源的仓库配置文件
[ $SYSVER == 6 ] && cat > /etc/yum.repos.d/base.repo <<EOF
[base]
name=CentOS 6.9 DVD
baseurl=ftp://172.16.0.100/centos/6
gpgcheck=0
enable=1
EOF
echo $?
# 针对CentOS7系统版本,新建一个基于FTP上YUM源的仓库配置文件
[ $SYSVER == 7 ] && cat > /etc/yum.repos.d/base.repo <<EOF
[development]
name=CentOS 7.4 DVD
baseurl=ftp://172.16.0.100/centos/7
gpgcheck=0
enable=1
EOF
echo $?
# 刷新本地YUM源缓存
yum clean all && yum repolist


# 模块二:安装功能扩展软件包
# 定义一个变量,用来判断当前CentOS发行版的主版本号
SYSVER=`cat /etc/redhat-release | awk -F. '{print $1}' | awk '{print $NF}'`
# 针对CentOS6系统版本,安装适用于CentOS6的功能扩展软件包
[ $SYSVER == 6 ] && yum -y install autofs vim tree ntp
# 针对CentOS7系统版本,安装适用于CentOS7的功能扩展软件包
[ $SYSVER == 7 ] && yum -y install autofs vim tree chrony


# 模块三:启用时间同步服务
# 定义一个变量,用来判断当前CentOS发行版的主版本号
SYSVER=`cat /etc/redhat-release | awk -F. '{print $1}' | awk '{print $NF}'`
# 针对不同的系统版本,对应修改不同的配置文件
if [ $SYSVER == 6 ]; then
    # 针对CentOS6系统版本,修改NTP配置文件
    sed -ri 's/(server.*iburst)/\#\1/' /etc/ntp.conf
elif [ $SYSVER == 7 ]; then
    # 针对CentOS7系统版本,修改chrony配置文件
    sed -ri 's/(server.*iburst)/\#\1/' /etc/chrony.conf
fi
# 针对CentOS6系统版本,将新的配置项追加写入NTP配置文件
[ $SYSVER == 6 ] && cat >> /etc/ntp.conf <<EOF
server ntp1.aliyun.com iburst
server ntp2.aliyun.com iburst
server ntp3.aliyun.com iburst
server ntp4.aliyun.com iburst
server ntp5.aliyun.com iburst
server ntp6.aliyun.com iburst
server ntp7.aliyun.com iburst
EOF
echo $?
# 针对CentOS7系统版本,将新的配置项追加写入chrony配置文件
[ $SYSVER == 7 ] && cat >> /etc/chrony.conf <<EOF
server ntp1.aliyun.com iburst
server ntp2.aliyun.com iburst
server ntp3.aliyun.com iburst
server ntp4.aliyun.com iburst
server ntp5.aliyun.com iburst
server ntp6.aliyun.com iburst
server ntp7.aliyun.com iburst
EOF
echo $?
# 针对不同的系统版本,对应修改不同的配置文件
if [ $SYSVER == 6 ]; then
    # 针对CentOS6系统版本,设置ntpd服务开机自启动
    chkconfig ntpd on
elif [ $SYSVER == 7 ]; then
    # 针对CentOS7系统版本,设置chrony服务开机自启动
    systemctl enable chronyd.service
fi


# 模块四:确认当前系统时区
# 定义一个变量,用来判断当前CentOS发行版的主版本号
SYSVER=`cat /etc/redhat-release | awk -F. '{print $1}' | awk '{print $NF}'`
# 针对不同的系统版本,使用不同的方法
if [ $SYSVER == 6 ]; then
    # 针对CentOS6系统版本,使用Bash的Profile脚本来修改目标系统的时区
    echo 'TZ="Asia/Shanghai"; export TZ' > /etc/profile.d/TZ.sh
elif [ $SYSVER == 7 ]; then
    # 针对CentOS7系统版本,使用特有的设置命令来设置时区
    timedatectl set-timezone Asia/Shanghai
fi


# 模块五:重写目标系统的IP配置文件
# 定义一个变量,用来判断当前CentOS发行版的主版本号
SYSVER=`cat /etc/redhat-release | awk -F. '{print $1}' | awk '{print $NF}'`
# 针对不同的系统版本,清除对应的干扰源
if [ $SYSVER == 6 ]; then
    # 针对CentOS6系统版本,每次开机自动清空一个“自动把eth0变成eth1”的干扰源
    echo '> /etc/udev/rules.d/70-persistent-net.rules' >> /etc/rc.local
elif [ $SYSVER == 7 ]; then
    # 针对CentOS7系统版本,将自动生成的 ens* 配置文件移动到系统临时目录下
    mv /etc/sysconfig/network-scripts/ifcfg-ens* /tmp/
fi
# 针对CentOS6系统版本,将新的配置项覆盖写入eth0网卡配置文件
[ $SYSVER == 6 ] && cat > /etc/sysconfig/network-scripts/ifcfg-eth0 <<EOF
DEVICE=eth0
BOOTPROTO=none
ONBOOT=YES
IPADDR=172.16.0.62
PREFIX=16
GATEWAY=172.16.0.254
DNS=114.114.114.114
EOF
echo $?
# 针对CentOS7系统版本,将新的配置项覆盖写入eth0网卡配置文件
[ $SYSVER == 7 ] && cat > /etc/sysconfig/network-scripts/ifcfg-eth0 <<EOF
DEVICE=eth0
BOOTPROTO=none
ONBOOT=YES
IPADDR=172.16.0.72
PREFIX=16
GATEWAY=172.16.0.254
DNS=114.114.114.114
EOF
echo $?


# 模块六:修改目标系统的DNS解析配置文件
# 定义一个变量,用来判断当前CentOS发行版的主版本号
SYSVER=`cat /etc/redhat-release | awk -F. '{print $1}' | awk '{print $NF}'`
# 针对CentOS6系统版本,将NetworkManager服务设置为开机禁用,清除对目标系统DNS解析的干扰
[ $SYSVER == 6 ] && chkconfig NetworkManager off && service NetworkManager stop
echo $?
# 将DNS解析配置项覆盖写入resolv.conf配置文件
echo 'nameserver 114.114.114.114' > /etc/resolv.conf


# 模块七:修改目标系统的主机名配置文件
# 定义一个变量,用来判断当前CentOS发行版的主版本号
SYSVER=`cat /etc/redhat-release | awk -F. '{print $1}' | awk '{print $NF}'`
# 针对不同的系统版本,使用不同的方法
if [ $SYSVER == 6 ]; then
    # 针对CentOS6系统版本,修改配置文件的HOSTNAME值
    sed -ri 's@(HOSTNAME=).*@\1CentOS69.uman-tech.cn@' /etc/sysconfig/network
elif [ $SYSVER == 7 ]; then
    # 针对CentOS7系统版本,将主机名覆盖写入配置文件
    echo 'CentOS74.uman-tech.cn' > /etc/hostname
fi


# 模块八:定制目标系统的命令提示符PS1样式
# 定义一个变量,用来判断当前CentOS发行版的主版本号
SYSVER=`cat /etc/redhat-release | awk -F. '{print $1}' | awk '{print $NF}'`
# 针对不同的系统版本,设置不同的命令提示符PS1样式
if [ $SYSVER == 6 ]; then
    # 针对CentOS6系统版本,将命令提示符PS1样式修改为32绿色
    echo 'export PS1="\[\e[1;32m\][\u@\h \W]\\$\[\e[0m\]"' > /etc/profile.d/env.sh
elif [ $SYSVER == 7 ]; then
    # 针对CentOS7系统版本,将命令提示符PS1样式修改为34蓝色
    echo 'export PS1="\[\e[1;34m\][\u@\h \W]\\$\[\e[0m\]"' > /etc/profile.d/env.sh
fi
cat /etc/profile.d/env.sh


# 模块九:加速目标主机的SSH访问
# 禁止在SSH建立连接时检查GSSAPI验证,不区分CentOS系统版本
sed -ri 's@^(GSSAPIAuthentication )yes@\1no@' /etc/ssh/sshd_config
# 禁止在SSH建立连接时检查DNS解析,不区分CentOS系统版本
sed -ri 's@#(UseDNS ).*@\1no@' /etc/ssh/sshd_config


# 模块十:为root用户提供辅助的命令别名
# 以下命令别名仅对root用户生效,不区分CentOS系统版本
cat >> /root/.bashrc <<EOF
alias cdnet='cd /etc/sysconfig/network-scripts/'
alias vie0='vim /etc/sysconfig/network-scripts/ifcfg-eth0'
EOF


# 模块十一:启用本地的光盘自动挂载服务
# 定义一个变量,用来判断当前CentOS发行版的主版本号
SYSVER=`cat /etc/redhat-release | awk -F. '{print $1}' | awk '{print $NF}'`
# 针对不同的系统版本,使用不同的方法
if [ $SYSVER == 6 ]; then
    # 针对CentOS6系统版本,将autofs服务设置为开机自启动
    chkconfig autofs on
elif [ $SYSVER == 7 ]; then
    # 针对CentOS7系统版本,将autofs服务设置为开机自启动
    systemctl enable autofs.service
fi


# 模块十三:(可选)CentOS精简开机服务
# 定义一个变量,用来判断当前CentOS发行版的主版本号
SYSVER=`cat /etc/redhat-release | awk -F. '{print $1}' | awk '{print $NF}'`
# 针对不同的系统版本,使用不同的方法
if [ $SYSVER == 6 ]; then
    # 针对CentOS6系统版本,将postfix服务设置为开机禁用
    chkconfig postfix off
elif [ $SYSVER == 7 ]; then
    # 针对CentOS7系统版本,将postfix服务设置为开机禁用
    systemctl disable postfix
fi


# 模块十四:(可选)桌面化安装CentOS后的首次启动使用图形界面
# 定义一个变量,用来判断当前CentOS发行版的主版本号
SYSVER=`cat /etc/redhat-release | awk -F. '{print $1}' | awk '{print $NF}'`
# 针对不同的系统版本,使用不同的方法
if [ $SYSVER == 6 ]; then
    # 针对CentOS6系统版本,下一次开机默认使用图形界面
    sed -ri 's@id:3:initdefault:@id:5:initdefault:@' /etc/inittab
elif [ $SYSVER == 7 ]; then
    # 针对CentOS7系统版本,下一次开机默认使用图形界面
    systemctl set-default graphical.target
    # 为图形化界面创建一个假的用户
    useradd -M test && echo centos|passwd --stdin test
fi
%end

适用于最小化安装的CentOS7.4应答文件

模块一:CentOS7应答控制命令

# Part1. Basic Configuration 基本设置
# System language
lang en_US
# Keyboard layouts
keyboard 'us'
# System timezone
timezone Asia/Shanghai
# Root password
rootpw --iscrypted $1$j3xr2/Pu$lVt5kaUUmJ6yTARABzvJG0
#platform=x86, AMD64, or Intel EM64T
# Reboot after installation
reboot
# Use text mode install
text

# Part2. Installation Method 安装方法
# Install OS instead of upgrade
install
# Use network installation
url --url="ftp://172.16.0.100/centos/7"
# Use CDROM installation media
#cdrom

# Part3. BootLoader Options 引导选项
# System bootloader configuration
bootloader --append="net.ifnames=0 biosdevname=0" --location=mbr

# Part4. Partition Informations 磁盘分区策略(LVM)
# Clear the Master Boot Record
zerombr
# Partition clearing information
clearpart --all --initlabel
# Disk partitioning information
part pv.253 --fstype="lvmpv" --ondisk=sda --size=73736
part /boot --fstype="xfs" --ondisk=sda --size=1024
volgroup vg0 --pesize=4096 pv.253
logvol /  --fstype="xfs" --size=51200 --name=root --vgname=vg0
logvol swap  --fstype="swap" --size=2048 --name=swap --vgname=vg0
logvol /opt  --fstype="xfs" --size=20480 --name=opt --vgname=vg0

# Part6. Authentication 认证加密方式
# System authorization information
auth  --useshadow  --passalgo=sha512

# Part7. Firewall Configuration 防火墙设置
# SELinux configuration
selinux --disabled
# Firewall configuration
firewall --disabled

# Part8. Display Configuration 显示设置
# Do not configure the X Window System
skipx

模块二:CentOS7最小化软件包列表

# Part9. Package Selections 安装包组选择
%packages
@^minimal
@core

%end

模块三:CentOS7最小化安装后脚本

# Part11. Post Installation Script 安装后脚本
%post
#!/bin/bash
# CentOS7最小化安装后脚本
# IP地址:172.16.0.71/16

# 模块一:创建基于FTP上YUM源的仓库配置文件
# 定义一个变量,用来判断当前CentOS发行版的主版本号
SYSVER=`cat /etc/redhat-release | awk -F. '{print $1}' | awk '{print $NF}'`
# 将系统自带的YUM仓库配置文件转移到备份目录里面
mkdir -pv /etc/yum.repos.d/bak
mv /etc/yum.repos.d/{*.repo,bak/}
# 针对CentOS6系统版本,新建一个基于FTP上YUM源的仓库配置文件
[ $SYSVER == 6 ] && cat > /etc/yum.repos.d/base.repo <<EOF
[base]
name=CentOS 6.9 DVD
baseurl=ftp://172.16.0.100/centos/6
gpgcheck=0
enable=1
EOF
echo $?
# 针对CentOS7系统版本,新建一个基于FTP上YUM源的仓库配置文件
[ $SYSVER == 7 ] && cat > /etc/yum.repos.d/base.repo <<EOF
[development]
name=CentOS 7.4 DVD
baseurl=ftp://172.16.0.100/centos/7
gpgcheck=0
enable=1
EOF
echo $?
# 刷新本地YUM源缓存
yum clean all && yum repolist


# 模块二:安装功能扩展软件包
# 定义一个变量,用来判断当前CentOS发行版的主版本号
SYSVER=`cat /etc/redhat-release | awk -F. '{print $1}' | awk '{print $NF}'`
# 针对CentOS6系统版本,安装适用于CentOS6的功能扩展软件包
[ $SYSVER == 6 ] && yum -y install autofs vim tree ntp
# 针对CentOS7系统版本,安装适用于CentOS7的功能扩展软件包
[ $SYSVER == 7 ] && yum -y install autofs vim tree chrony


# 模块三:启用时间同步服务
# 定义一个变量,用来判断当前CentOS发行版的主版本号
SYSVER=`cat /etc/redhat-release | awk -F. '{print $1}' | awk '{print $NF}'`
# 针对不同的系统版本,对应修改不同的配置文件
if [ $SYSVER == 6 ]; then
    # 针对CentOS6系统版本,修改NTP配置文件
    sed -ri 's/(server.*iburst)/\#\1/' /etc/ntp.conf
elif [ $SYSVER == 7 ]; then
    # 针对CentOS7系统版本,修改chrony配置文件
    sed -ri 's/(server.*iburst)/\#\1/' /etc/chrony.conf
fi
# 针对CentOS6系统版本,将新的配置项追加写入NTP配置文件
[ $SYSVER == 6 ] && cat >> /etc/ntp.conf <<EOF
server ntp1.aliyun.com iburst
server ntp2.aliyun.com iburst
server ntp3.aliyun.com iburst
server ntp4.aliyun.com iburst
server ntp5.aliyun.com iburst
server ntp6.aliyun.com iburst
server ntp7.aliyun.com iburst
EOF
echo $?
# 针对CentOS7系统版本,将新的配置项追加写入chrony配置文件
[ $SYSVER == 7 ] && cat >> /etc/chrony.conf <<EOF
server ntp1.aliyun.com iburst
server ntp2.aliyun.com iburst
server ntp3.aliyun.com iburst
server ntp4.aliyun.com iburst
server ntp5.aliyun.com iburst
server ntp6.aliyun.com iburst
server ntp7.aliyun.com iburst
EOF
echo $?
# 针对不同的系统版本,对应修改不同的配置文件
if [ $SYSVER == 6 ]; then
    # 针对CentOS6系统版本,设置ntpd服务开机自启动
    chkconfig ntpd on
elif [ $SYSVER == 7 ]; then
    # 针对CentOS7系统版本,设置chrony服务开机自启动
    systemctl enable chronyd.service
fi


# 模块四:确认当前系统时区
# 定义一个变量,用来判断当前CentOS发行版的主版本号
SYSVER=`cat /etc/redhat-release | awk -F. '{print $1}' | awk '{print $NF}'`
# 针对不同的系统版本,使用不同的方法
if [ $SYSVER == 6 ]; then
    # 针对CentOS6系统版本,使用Bash的Profile脚本来修改目标系统的时区
    echo 'TZ="Asia/Shanghai"; export TZ' > /etc/profile.d/TZ.sh
elif [ $SYSVER == 7 ]; then
    # 针对CentOS7系统版本,使用特有的设置命令来设置时区
    timedatectl set-timezone Asia/Shanghai
fi


# 模块五:重写目标系统的IP配置文件
# 定义一个变量,用来判断当前CentOS发行版的主版本号
SYSVER=`cat /etc/redhat-release | awk -F. '{print $1}' | awk '{print $NF}'`
# 针对不同的系统版本,清除对应的干扰源
if [ $SYSVER == 6 ]; then
    # 针对CentOS6系统版本,每次开机自动清空一个“自动把eth0变成eth1”的干扰源
    echo '> /etc/udev/rules.d/70-persistent-net.rules' >> /etc/rc.local
elif [ $SYSVER == 7 ]; then
    # 针对CentOS7系统版本,将自动生成的 ens* 配置文件移动到系统临时目录下
    mv /etc/sysconfig/network-scripts/ifcfg-ens* /tmp/
fi
# 针对CentOS6系统版本,将新的配置项覆盖写入eth0网卡配置文件
[ $SYSVER == 6 ] && cat > /etc/sysconfig/network-scripts/ifcfg-eth0 <<EOF
DEVICE=eth0
BOOTPROTO=none
ONBOOT=YES
IPADDR=172.16.0.61
PREFIX=16
GATEWAY=172.16.0.254
DNS=114.114.114.114
EOF
echo $?
# 针对CentOS7系统版本,将新的配置项覆盖写入eth0网卡配置文件
[ $SYSVER == 7 ] && cat > /etc/sysconfig/network-scripts/ifcfg-eth0 <<EOF
DEVICE=eth0
BOOTPROTO=none
ONBOOT=YES
IPADDR=172.16.0.71
PREFIX=16
GATEWAY=172.16.0.254
DNS=114.114.114.114
EOF
echo $?


# 模块六:修改目标系统的DNS解析配置文件
# 定义一个变量,用来判断当前CentOS发行版的主版本号
SYSVER=`cat /etc/redhat-release | awk -F. '{print $1}' | awk '{print $NF}'`
# 针对CentOS6系统版本,将NetworkManager服务设置为开机禁用,清除对目标系统DNS解析的干扰
[ $SYSVER == 6 ] && chkconfig NetworkManager off && service NetworkManager stop
echo $?
# 将DNS解析配置项覆盖写入resolv.conf配置文件
echo 'nameserver 114.114.114.114' > /etc/resolv.conf


# 模块七:修改目标系统的主机名配置文件
# 定义一个变量,用来判断当前CentOS发行版的主版本号
SYSVER=`cat /etc/redhat-release | awk -F. '{print $1}' | awk '{print $NF}'`
# 针对不同的系统版本,使用不同的方法
if [ $SYSVER == 6 ]; then
    # 针对CentOS6系统版本,修改配置文件的HOSTNAME值
    sed -ri 's@(HOSTNAME=).*@\1CentOS69.uman-tech.cn@' /etc/sysconfig/network
elif [ $SYSVER == 7 ]; then
    # 针对CentOS7系统版本,将主机名覆盖写入配置文件
    echo 'CentOS74.uman-tech.cn' > /etc/hostname
fi


# 模块八:定制目标系统的命令提示符PS1样式
# 定义一个变量,用来判断当前CentOS发行版的主版本号
SYSVER=`cat /etc/redhat-release | awk -F. '{print $1}' | awk '{print $NF}'`
# 针对不同的系统版本,设置不同的命令提示符PS1样式
if [ $SYSVER == 6 ]; then
    # 针对CentOS6系统版本,将命令提示符PS1样式修改为32绿色
    echo 'export PS1="\[\e[1;32m\][\u@\h \W]\\$\[\e[0m\]"' > /etc/profile.d/env.sh
elif [ $SYSVER == 7 ]; then
    # 针对CentOS7系统版本,将命令提示符PS1样式修改为34蓝色
    echo 'export PS1="\[\e[1;34m\][\u@\h \W]\\$\[\e[0m\]"' > /etc/profile.d/env.sh
fi
cat /etc/profile.d/env.sh


# 模块九:加速目标主机的SSH访问
# 禁止在SSH建立连接时检查GSSAPI验证,不区分CentOS系统版本
sed -ri 's@^(GSSAPIAuthentication )yes@\1no@' /etc/ssh/sshd_config
# 禁止在SSH建立连接时检查DNS解析,不区分CentOS系统版本
sed -ri 's@#(UseDNS ).*@\1no@' /etc/ssh/sshd_config


# 模块十:为root用户提供辅助的命令别名
# 以下命令别名仅对root用户生效,不区分CentOS系统版本
cat >> /root/.bashrc <<EOF
alias cdnet='cd /etc/sysconfig/network-scripts/'
alias vie0='vim /etc/sysconfig/network-scripts/ifcfg-eth0'
EOF


# 模块十一:启用本地的光盘自动挂载服务
# 定义一个变量,用来判断当前CentOS发行版的主版本号
SYSVER=`cat /etc/redhat-release | awk -F. '{print $1}' | awk '{print $NF}'`
# 针对不同的系统版本,使用不同的方法
if [ $SYSVER == 6 ]; then
    # 针对CentOS6系统版本,将autofs服务设置为开机自启动
    chkconfig autofs on
elif [ $SYSVER == 7 ]; then
    # 针对CentOS7系统版本,将autofs服务设置为开机自启动
    systemctl enable autofs.service
fi


# 模块十三:(可选)CentOS精简开机服务
# 定义一个变量,用来判断当前CentOS发行版的主版本号
SYSVER=`cat /etc/redhat-release | awk -F. '{print $1}' | awk '{print $NF}'`
# 针对不同的系统版本,使用不同的方法
if [ $SYSVER == 6 ]; then
    # 针对CentOS6系统版本,将postfix服务设置为开机禁用
    chkconfig postfix off
elif [ $SYSVER == 7 ]; then
    # 针对CentOS7系统版本,将postfix服务设置为开机禁用
    systemctl disable postfix
fi
%end

完整版本:CentOS74-Minimal-ks.cfg

# CentOS74-Minimal-ks.cfg

# Part1. Basic Configuration 基本设置
# System language
lang en_US
# Keyboard layouts
keyboard 'us'
# System timezone
timezone Asia/Shanghai
# Root password
rootpw --iscrypted $1$j3xr2/Pu$lVt5kaUUmJ6yTARABzvJG0
#platform=x86, AMD64, or Intel EM64T
# Reboot after installation
reboot
# Use text mode install
text

# Part2. Installation Method 安装方法
# Install OS instead of upgrade
install
# Use network installation
url --url="ftp://172.16.0.100/centos/7"
# Use CDROM installation media
#cdrom

# Part3. BootLoader Options 引导选项
# System bootloader configuration
bootloader --append="net.ifnames=0 biosdevname=0" --location=mbr

# Part4. Partition Informations 磁盘分区策略(LVM)
# Clear the Master Boot Record
zerombr
# Partition clearing information
clearpart --all --initlabel
# Disk partitioning information
part pv.253 --fstype="lvmpv" --ondisk=sda --size=73736
part /boot --fstype="xfs" --ondisk=sda --size=1024
volgroup vg0 --pesize=4096 pv.253
logvol /  --fstype="xfs" --size=51200 --name=root --vgname=vg0
logvol swap  --fstype="swap" --size=2048 --name=swap --vgname=vg0
logvol /opt  --fstype="xfs" --size=20480 --name=opt --vgname=vg0

# Part6. Authentication 认证加密方式
# System authorization information
auth  --useshadow  --passalgo=sha512

# Part7. Firewall Configuration 防火墙设置
# SELinux configuration
selinux --disabled
# Firewall configuration
firewall --disabled

# Part8. Display Configuration 显示设置
# Do not configure the X Window System
skipx

# Part9. Package Selections 安装包组选择
%packages
@^minimal
@core

%end

# Part11. Post Installation Script 安装后脚本
%post
#!/bin/bash
# CentOS7最小化安装后脚本
# IP地址:172.16.0.71/16

# 模块一:创建基于FTP上YUM源的仓库配置文件
# 定义一个变量,用来判断当前CentOS发行版的主版本号
SYSVER=`cat /etc/redhat-release | awk -F. '{print $1}' | awk '{print $NF}'`
# 将系统自带的YUM仓库配置文件转移到备份目录里面
mkdir -pv /etc/yum.repos.d/bak
mv /etc/yum.repos.d/{*.repo,bak/}
# 针对CentOS6系统版本,新建一个基于FTP上YUM源的仓库配置文件
[ $SYSVER == 6 ] && cat > /etc/yum.repos.d/base.repo <<EOF
[base]
name=CentOS 6.9 DVD
baseurl=ftp://172.16.0.100/centos/6
gpgcheck=0
enable=1
EOF
echo $?
# 针对CentOS7系统版本,新建一个基于FTP上YUM源的仓库配置文件
[ $SYSVER == 7 ] && cat > /etc/yum.repos.d/base.repo <<EOF
[development]
name=CentOS 7.4 DVD
baseurl=ftp://172.16.0.100/centos/7
gpgcheck=0
enable=1
EOF
echo $?
# 刷新本地YUM源缓存
yum clean all && yum repolist


# 模块二:安装功能扩展软件包
# 定义一个变量,用来判断当前CentOS发行版的主版本号
SYSVER=`cat /etc/redhat-release | awk -F. '{print $1}' | awk '{print $NF}'`
# 针对CentOS6系统版本,安装适用于CentOS6的功能扩展软件包
[ $SYSVER == 6 ] && yum -y install autofs vim tree ntp
# 针对CentOS7系统版本,安装适用于CentOS7的功能扩展软件包
[ $SYSVER == 7 ] && yum -y install autofs vim tree chrony


# 模块三:启用时间同步服务
# 定义一个变量,用来判断当前CentOS发行版的主版本号
SYSVER=`cat /etc/redhat-release | awk -F. '{print $1}' | awk '{print $NF}'`
# 针对不同的系统版本,对应修改不同的配置文件
if [ $SYSVER == 6 ]; then
    # 针对CentOS6系统版本,修改NTP配置文件
    sed -ri 's/(server.*iburst)/\#\1/' /etc/ntp.conf
elif [ $SYSVER == 7 ]; then
    # 针对CentOS7系统版本,修改chrony配置文件
    sed -ri 's/(server.*iburst)/\#\1/' /etc/chrony.conf
fi
# 针对CentOS6系统版本,将新的配置项追加写入NTP配置文件
[ $SYSVER == 6 ] && cat >> /etc/ntp.conf <<EOF
server ntp1.aliyun.com iburst
server ntp2.aliyun.com iburst
server ntp3.aliyun.com iburst
server ntp4.aliyun.com iburst
server ntp5.aliyun.com iburst
server ntp6.aliyun.com iburst
server ntp7.aliyun.com iburst
EOF
echo $?
# 针对CentOS7系统版本,将新的配置项追加写入chrony配置文件
[ $SYSVER == 7 ] && cat >> /etc/chrony.conf <<EOF
server ntp1.aliyun.com iburst
server ntp2.aliyun.com iburst
server ntp3.aliyun.com iburst
server ntp4.aliyun.com iburst
server ntp5.aliyun.com iburst
server ntp6.aliyun.com iburst
server ntp7.aliyun.com iburst
EOF
echo $?
# 针对不同的系统版本,对应修改不同的配置文件
if [ $SYSVER == 6 ]; then
    # 针对CentOS6系统版本,设置ntpd服务开机自启动
    chkconfig ntpd on
elif [ $SYSVER == 7 ]; then
    # 针对CentOS7系统版本,设置chrony服务开机自启动
    systemctl enable chronyd.service
fi


# 模块四:确认当前系统时区
# 定义一个变量,用来判断当前CentOS发行版的主版本号
SYSVER=`cat /etc/redhat-release | awk -F. '{print $1}' | awk '{print $NF}'`
# 针对不同的系统版本,使用不同的方法
if [ $SYSVER == 6 ]; then
    # 针对CentOS6系统版本,使用Bash的Profile脚本来修改目标系统的时区
    echo 'TZ="Asia/Shanghai"; export TZ' > /etc/profile.d/TZ.sh
elif [ $SYSVER == 7 ]; then
    # 针对CentOS7系统版本,使用特有的设置命令来设置时区
    timedatectl set-timezone Asia/Shanghai
fi


# 模块五:重写目标系统的IP配置文件
# 定义一个变量,用来判断当前CentOS发行版的主版本号
SYSVER=`cat /etc/redhat-release | awk -F. '{print $1}' | awk '{print $NF}'`
# 针对不同的系统版本,清除对应的干扰源
if [ $SYSVER == 6 ]; then
    # 针对CentOS6系统版本,每次开机自动清空一个“自动把eth0变成eth1”的干扰源
    echo '> /etc/udev/rules.d/70-persistent-net.rules' >> /etc/rc.local
elif [ $SYSVER == 7 ]; then
    # 针对CentOS7系统版本,将自动生成的 ens* 配置文件移动到系统临时目录下
    mv /etc/sysconfig/network-scripts/ifcfg-ens* /tmp/
fi
# 针对CentOS6系统版本,将新的配置项覆盖写入eth0网卡配置文件
[ $SYSVER == 6 ] && cat > /etc/sysconfig/network-scripts/ifcfg-eth0 <<EOF
DEVICE=eth0
BOOTPROTO=none
ONBOOT=YES
IPADDR=172.16.0.61
PREFIX=16
GATEWAY=172.16.0.254
DNS=114.114.114.114
EOF
echo $?
# 针对CentOS7系统版本,将新的配置项覆盖写入eth0网卡配置文件
[ $SYSVER == 7 ] && cat > /etc/sysconfig/network-scripts/ifcfg-eth0 <<EOF
DEVICE=eth0
BOOTPROTO=none
ONBOOT=YES
IPADDR=172.16.0.71
PREFIX=16
GATEWAY=172.16.0.254
DNS=114.114.114.114
EOF
echo $?


# 模块六:修改目标系统的DNS解析配置文件
# 定义一个变量,用来判断当前CentOS发行版的主版本号
SYSVER=`cat /etc/redhat-release | awk -F. '{print $1}' | awk '{print $NF}'`
# 针对CentOS6系统版本,将NetworkManager服务设置为开机禁用,清除对目标系统DNS解析的干扰
[ $SYSVER == 6 ] && chkconfig NetworkManager off && service NetworkManager stop
echo $?
# 将DNS解析配置项覆盖写入resolv.conf配置文件
echo 'nameserver 114.114.114.114' > /etc/resolv.conf


# 模块七:修改目标系统的主机名配置文件
# 定义一个变量,用来判断当前CentOS发行版的主版本号
SYSVER=`cat /etc/redhat-release | awk -F. '{print $1}' | awk '{print $NF}'`
# 针对不同的系统版本,使用不同的方法
if [ $SYSVER == 6 ]; then
    # 针对CentOS6系统版本,修改配置文件的HOSTNAME值
    sed -ri 's@(HOSTNAME=).*@\1CentOS69.uman-tech.cn@' /etc/sysconfig/network
elif [ $SYSVER == 7 ]; then
    # 针对CentOS7系统版本,将主机名覆盖写入配置文件
    echo 'CentOS74.uman-tech.cn' > /etc/hostname
fi


# 模块八:定制目标系统的命令提示符PS1样式
# 定义一个变量,用来判断当前CentOS发行版的主版本号
SYSVER=`cat /etc/redhat-release | awk -F. '{print $1}' | awk '{print $NF}'`
# 针对不同的系统版本,设置不同的命令提示符PS1样式
if [ $SYSVER == 6 ]; then
    # 针对CentOS6系统版本,将命令提示符PS1样式修改为32绿色
    echo 'export PS1="\[\e[1;32m\][\u@\h \W]\\$\[\e[0m\]"' > /etc/profile.d/env.sh
elif [ $SYSVER == 7 ]; then
    # 针对CentOS7系统版本,将命令提示符PS1样式修改为34蓝色
    echo 'export PS1="\[\e[1;34m\][\u@\h \W]\\$\[\e[0m\]"' > /etc/profile.d/env.sh
fi
cat /etc/profile.d/env.sh


# 模块九:加速目标主机的SSH访问
# 禁止在SSH建立连接时检查GSSAPI验证,不区分CentOS系统版本
sed -ri 's@^(GSSAPIAuthentication )yes@\1no@' /etc/ssh/sshd_config
# 禁止在SSH建立连接时检查DNS解析,不区分CentOS系统版本
sed -ri 's@#(UseDNS ).*@\1no@' /etc/ssh/sshd_config


# 模块十:为root用户提供辅助的命令别名
# 以下命令别名仅对root用户生效,不区分CentOS系统版本
cat >> /root/.bashrc <<EOF
alias cdnet='cd /etc/sysconfig/network-scripts/'
alias vie0='vim /etc/sysconfig/network-scripts/ifcfg-eth0'
EOF


# 模块十一:启用本地的光盘自动挂载服务
# 定义一个变量,用来判断当前CentOS发行版的主版本号
SYSVER=`cat /etc/redhat-release | awk -F. '{print $1}' | awk '{print $NF}'`
# 针对不同的系统版本,使用不同的方法
if [ $SYSVER == 6 ]; then
    # 针对CentOS6系统版本,将autofs服务设置为开机自启动
    chkconfig autofs on
elif [ $SYSVER == 7 ]; then
    # 针对CentOS7系统版本,将autofs服务设置为开机自启动
    systemctl enable autofs.service
fi


# 模块十三:(可选)CentOS精简开机服务
# 定义一个变量,用来判断当前CentOS发行版的主版本号
SYSVER=`cat /etc/redhat-release | awk -F. '{print $1}' | awk '{print $NF}'`
# 针对不同的系统版本,使用不同的方法
if [ $SYSVER == 6 ]; then
    # 针对CentOS6系统版本,将postfix服务设置为开机禁用
    chkconfig postfix off
elif [ $SYSVER == 7 ]; then
    # 针对CentOS7系统版本,将postfix服务设置为开机禁用
    systemctl disable postfix
fi
%end

适用于桌面化安装的CentOS7.4应答文件

模块一:CentOS7应答控制命令

# Part1. Basic Configuration 基本设置
# System language
lang en_US
# Keyboard layouts
keyboard 'us'
# System timezone
timezone Asia/Shanghai
# Root password
rootpw --iscrypted $1$j3xr2/Pu$lVt5kaUUmJ6yTARABzvJG0
#platform=x86, AMD64, or Intel EM64T
# Reboot after installation
reboot
# Use text mode install
text

# Part2. Installation Method 安装方法
# Install OS instead of upgrade
install
# Use network installation
url --url="ftp://172.16.0.100/centos/7"
# Use CDROM installation media
#cdrom

# Part3. BootLoader Options 引导选项
# System bootloader configuration
bootloader --append="net.ifnames=0 biosdevname=0" --location=mbr

# Part4. Partition Informations 磁盘分区策略(LVM)
# Clear the Master Boot Record
zerombr
# Partition clearing information
clearpart --all --initlabel
# Disk partitioning information
part pv.253 --fstype="lvmpv" --ondisk=sda --size=73736
part /boot --fstype="xfs" --ondisk=sda --size=1024
volgroup vg0 --pesize=4096 pv.253
logvol /  --fstype="xfs" --size=51200 --name=root --vgname=vg0
logvol swap  --fstype="swap" --size=2048 --name=swap --vgname=vg0
logvol /opt  --fstype="xfs" --size=20480 --name=opt --vgname=vg0

# Part6. Authentication 认证加密方式
# System authorization information
auth  --useshadow  --passalgo=sha512

# Part7. Firewall Configuration 防火墙设置
# SELinux configuration
selinux --disabled
# Firewall configuration
firewall --disabled

# Part8. Display Configuration 显示设置
# Do not configure the X Window System
skipx

模块二:CentOS7桌面化软件包列表

# Part9. Package Selections 安装包组选择
%packages
@^gnome-desktop-environment
@base
@core
@desktop-debugging
@dial-up
@directory-client
@fonts
@gnome-desktop
@guest-agents
@guest-desktop-agents
@input-methods
@internet-browser
@java-platform
@multimedia
@network-file-system-client
@networkmanager-submodules
@print-client
@x11

%end

模块三:CentOS7桌面化安装后脚本

# Part11. Post Installation Script 安装后脚本
%post
#!/bin/bash
# CentOS7桌面化安装后脚本
# IP地址:172.16.0.72/16

# 模块一:创建基于FTP上YUM源的仓库配置文件
# 定义一个变量,用来判断当前CentOS发行版的主版本号
SYSVER=`cat /etc/redhat-release | awk -F. '{print $1}' | awk '{print $NF}'`
# 将系统自带的YUM仓库配置文件转移到备份目录里面
mkdir -pv /etc/yum.repos.d/bak
mv /etc/yum.repos.d/{*.repo,bak/}
# 针对CentOS6系统版本,新建一个基于FTP上YUM源的仓库配置文件
[ $SYSVER == 6 ] && cat > /etc/yum.repos.d/base.repo <<EOF
[base]
name=CentOS 6.9 DVD
baseurl=ftp://172.16.0.100/centos/6
gpgcheck=0
enable=1
EOF
echo $?
# 针对CentOS7系统版本,新建一个基于FTP上YUM源的仓库配置文件
[ $SYSVER == 7 ] && cat > /etc/yum.repos.d/base.repo <<EOF
[development]
name=CentOS 7.4 DVD
baseurl=ftp://172.16.0.100/centos/7
gpgcheck=0
enable=1
EOF
echo $?
# 刷新本地YUM源缓存
yum clean all && yum repolist


# 模块二:安装功能扩展软件包
# 定义一个变量,用来判断当前CentOS发行版的主版本号
SYSVER=`cat /etc/redhat-release | awk -F. '{print $1}' | awk '{print $NF}'`
# 针对CentOS6系统版本,安装适用于CentOS6的功能扩展软件包
[ $SYSVER == 6 ] && yum -y install autofs vim tree ntp
# 针对CentOS7系统版本,安装适用于CentOS7的功能扩展软件包
[ $SYSVER == 7 ] && yum -y install autofs vim tree chrony


# 模块三:启用时间同步服务
# 定义一个变量,用来判断当前CentOS发行版的主版本号
SYSVER=`cat /etc/redhat-release | awk -F. '{print $1}' | awk '{print $NF}'`
# 针对不同的系统版本,对应修改不同的配置文件
if [ $SYSVER == 6 ]; then
    # 针对CentOS6系统版本,修改NTP配置文件
    sed -ri 's/(server.*iburst)/\#\1/' /etc/ntp.conf
elif [ $SYSVER == 7 ]; then
    # 针对CentOS7系统版本,修改chrony配置文件
    sed -ri 's/(server.*iburst)/\#\1/' /etc/chrony.conf
fi
# 针对CentOS6系统版本,将新的配置项追加写入NTP配置文件
[ $SYSVER == 6 ] && cat >> /etc/ntp.conf <<EOF
server ntp1.aliyun.com iburst
server ntp2.aliyun.com iburst
server ntp3.aliyun.com iburst
server ntp4.aliyun.com iburst
server ntp5.aliyun.com iburst
server ntp6.aliyun.com iburst
server ntp7.aliyun.com iburst
EOF
echo $?
# 针对CentOS7系统版本,将新的配置项追加写入chrony配置文件
[ $SYSVER == 7 ] && cat >> /etc/chrony.conf <<EOF
server ntp1.aliyun.com iburst
server ntp2.aliyun.com iburst
server ntp3.aliyun.com iburst
server ntp4.aliyun.com iburst
server ntp5.aliyun.com iburst
server ntp6.aliyun.com iburst
server ntp7.aliyun.com iburst
EOF
echo $?
# 针对不同的系统版本,对应修改不同的配置文件
if [ $SYSVER == 6 ]; then
    # 针对CentOS6系统版本,设置ntpd服务开机自启动
    chkconfig ntpd on
elif [ $SYSVER == 7 ]; then
    # 针对CentOS7系统版本,设置chrony服务开机自启动
    systemctl enable chronyd.service
fi


# 模块四:确认当前系统时区
# 定义一个变量,用来判断当前CentOS发行版的主版本号
SYSVER=`cat /etc/redhat-release | awk -F. '{print $1}' | awk '{print $NF}'`
# 针对不同的系统版本,使用不同的方法
if [ $SYSVER == 6 ]; then
    # 针对CentOS6系统版本,使用Bash的Profile脚本来修改目标系统的时区
    echo 'TZ="Asia/Shanghai"; export TZ' > /etc/profile.d/TZ.sh
elif [ $SYSVER == 7 ]; then
    # 针对CentOS7系统版本,使用特有的设置命令来设置时区
    timedatectl set-timezone Asia/Shanghai
fi


# 模块五:重写目标系统的IP配置文件
# 定义一个变量,用来判断当前CentOS发行版的主版本号
SYSVER=`cat /etc/redhat-release | awk -F. '{print $1}' | awk '{print $NF}'`
# 针对不同的系统版本,清除对应的干扰源
if [ $SYSVER == 6 ]; then
    # 针对CentOS6系统版本,每次开机自动清空一个“自动把eth0变成eth1”的干扰源
    echo '> /etc/udev/rules.d/70-persistent-net.rules' >> /etc/rc.local
elif [ $SYSVER == 7 ]; then
    # 针对CentOS7系统版本,将自动生成的 ens* 配置文件移动到系统临时目录下
    mv /etc/sysconfig/network-scripts/ifcfg-ens* /tmp/
fi
# 针对CentOS6系统版本,将新的配置项覆盖写入eth0网卡配置文件
[ $SYSVER == 6 ] && cat > /etc/sysconfig/network-scripts/ifcfg-eth0 <<EOF
DEVICE=eth0
BOOTPROTO=none
ONBOOT=YES
IPADDR=172.16.0.62
PREFIX=16
GATEWAY=172.16.0.254
DNS=114.114.114.114
EOF
echo $?
# 针对CentOS7系统版本,将新的配置项覆盖写入eth0网卡配置文件
[ $SYSVER == 7 ] && cat > /etc/sysconfig/network-scripts/ifcfg-eth0 <<EOF
DEVICE=eth0
BOOTPROTO=none
ONBOOT=YES
IPADDR=172.16.0.72
PREFIX=16
GATEWAY=172.16.0.254
DNS=114.114.114.114
EOF
echo $?


# 模块六:修改目标系统的DNS解析配置文件
# 定义一个变量,用来判断当前CentOS发行版的主版本号
SYSVER=`cat /etc/redhat-release | awk -F. '{print $1}' | awk '{print $NF}'`
# 针对CentOS6系统版本,将NetworkManager服务设置为开机禁用,清除对目标系统DNS解析的干扰
[ $SYSVER == 6 ] && chkconfig NetworkManager off && service NetworkManager stop
echo $?
# 将DNS解析配置项覆盖写入resolv.conf配置文件
echo 'nameserver 114.114.114.114' > /etc/resolv.conf


# 模块七:修改目标系统的主机名配置文件
# 定义一个变量,用来判断当前CentOS发行版的主版本号
SYSVER=`cat /etc/redhat-release | awk -F. '{print $1}' | awk '{print $NF}'`
# 针对不同的系统版本,使用不同的方法
if [ $SYSVER == 6 ]; then
    # 针对CentOS6系统版本,修改配置文件的HOSTNAME值
    sed -ri 's@(HOSTNAME=).*@\1CentOS69.uman-tech.cn@' /etc/sysconfig/network
elif [ $SYSVER == 7 ]; then
    # 针对CentOS7系统版本,将主机名覆盖写入配置文件
    echo 'CentOS74.uman-tech.cn' > /etc/hostname
fi


# 模块八:定制目标系统的命令提示符PS1样式
# 定义一个变量,用来判断当前CentOS发行版的主版本号
SYSVER=`cat /etc/redhat-release | awk -F. '{print $1}' | awk '{print $NF}'`
# 针对不同的系统版本,设置不同的命令提示符PS1样式
if [ $SYSVER == 6 ]; then
    # 针对CentOS6系统版本,将命令提示符PS1样式修改为32绿色
    echo 'export PS1="\[\e[1;32m\][\u@\h \W]\\$\[\e[0m\]"' > /etc/profile.d/env.sh
elif [ $SYSVER == 7 ]; then
    # 针对CentOS7系统版本,将命令提示符PS1样式修改为34蓝色
    echo 'export PS1="\[\e[1;34m\][\u@\h \W]\\$\[\e[0m\]"' > /etc/profile.d/env.sh
fi
cat /etc/profile.d/env.sh


# 模块九:加速目标主机的SSH访问
# 禁止在SSH建立连接时检查GSSAPI验证,不区分CentOS系统版本
sed -ri 's@^(GSSAPIAuthentication )yes@\1no@' /etc/ssh/sshd_config
# 禁止在SSH建立连接时检查DNS解析,不区分CentOS系统版本
sed -ri 's@#(UseDNS ).*@\1no@' /etc/ssh/sshd_config


# 模块十:为root用户提供辅助的命令别名
# 以下命令别名仅对root用户生效,不区分CentOS系统版本
cat >> /root/.bashrc <<EOF
alias cdnet='cd /etc/sysconfig/network-scripts/'
alias vie0='vim /etc/sysconfig/network-scripts/ifcfg-eth0'
EOF


# 模块十一:启用本地的光盘自动挂载服务
# 定义一个变量,用来判断当前CentOS发行版的主版本号
SYSVER=`cat /etc/redhat-release | awk -F. '{print $1}' | awk '{print $NF}'`
# 针对不同的系统版本,使用不同的方法
if [ $SYSVER == 6 ]; then
    # 针对CentOS6系统版本,将autofs服务设置为开机自启动
    chkconfig autofs on
elif [ $SYSVER == 7 ]; then
    # 针对CentOS7系统版本,将autofs服务设置为开机自启动
    systemctl enable autofs.service
fi


# 模块十二:CentOS7阻止初始化程序询问是否同意License
# 定义一个变量,用来判断当前CentOS发行版的主版本号
SYSVER=`cat /etc/redhat-release | awk -F. '{print $1}' | awk '{print $NF}'`
# 针对CentOS7系统版本,阻止初始化程序询问是否同意License
if [ $SYSVER  == 7 ]; then
    systemctl disable initial-setup.service
    systemctl disable initial-setup-graphical.service
fi


# 模块十三:(可选)CentOS精简开机服务
# 定义一个变量,用来判断当前CentOS发行版的主版本号
SYSVER=`cat /etc/redhat-release | awk -F. '{print $1}' | awk '{print $NF}'`
# 针对不同的系统版本,使用不同的方法
if [ $SYSVER == 6 ]; then
    # 针对CentOS6系统版本,将postfix服务设置为开机禁用
    chkconfig postfix off
elif [ $SYSVER == 7 ]; then
    # 针对CentOS7系统版本,将postfix服务设置为开机禁用
    systemctl disable postfix
fi


# 模块十四:(可选)桌面化安装CentOS后的首次启动使用图形界面
# 定义一个变量,用来判断当前CentOS发行版的主版本号
SYSVER=`cat /etc/redhat-release | awk -F. '{print $1}' | awk '{print $NF}'`
# 针对不同的系统版本,使用不同的方法
if [ $SYSVER == 6 ]; then
    # 针对CentOS6系统版本,下一次开机默认使用图形界面
    sed -ri 's@id:3:initdefault:@id:5:initdefault:@' /etc/inittab
elif [ $SYSVER == 7 ]; then
    # 针对CentOS7系统版本,下一次开机默认使用图形界面
    systemctl set-default graphical.target
    # 为图形化界面创建一个假的用户
    useradd -M test && echo centos|passwd --stdin test
fi
%end

完整版本:CentOS74-Desktop-ks.cfg

# CentOS74-Desktop-ks.cfg

# Part1. Basic Configuration 基本设置
# System language
lang en_US
# Keyboard layouts
keyboard 'us'
# System timezone
timezone Asia/Shanghai
# Root password
rootpw --iscrypted $1$j3xr2/Pu$lVt5kaUUmJ6yTARABzvJG0
#platform=x86, AMD64, or Intel EM64T
# Reboot after installation
reboot
# Use text mode install
text

# Part2. Installation Method 安装方法
# Install OS instead of upgrade
install
# Use network installation
url --url="ftp://172.16.0.100/centos/7"
# Use CDROM installation media
#cdrom

# Part3. BootLoader Options 引导选项
# System bootloader configuration
bootloader --append="net.ifnames=0 biosdevname=0" --location=mbr

# Part4. Partition Informations 磁盘分区策略(LVM)
# Clear the Master Boot Record
zerombr
# Partition clearing information
clearpart --all --initlabel
# Disk partitioning information
part pv.253 --fstype="lvmpv" --ondisk=sda --size=73736
part /boot --fstype="xfs" --ondisk=sda --size=1024
volgroup vg0 --pesize=4096 pv.253
logvol /  --fstype="xfs" --size=51200 --name=root --vgname=vg0
logvol swap  --fstype="swap" --size=2048 --name=swap --vgname=vg0
logvol /opt  --fstype="xfs" --size=20480 --name=opt --vgname=vg0

# Part6. Authentication 认证加密方式
# System authorization information
auth  --useshadow  --passalgo=sha512

# Part7. Firewall Configuration 防火墙设置
# SELinux configuration
selinux --disabled
# Firewall configuration
firewall --disabled

# Part8. Display Configuration 显示设置
# Do not configure the X Window System
skipx

# Part9. Package Selections 安装包组选择
%packages
@^gnome-desktop-environment
@base
@core
@desktop-debugging
@dial-up
@directory-client
@fonts
@gnome-desktop
@guest-agents
@guest-desktop-agents
@input-methods
@internet-browser
@java-platform
@multimedia
@network-file-system-client
@networkmanager-submodules
@print-client
@x11

%end

# Part11. Post Installation Script 安装后脚本
%post
#!/bin/bash
# CentOS7桌面化安装后脚本
# IP地址:172.16.0.72/16

# 模块一:创建基于FTP上YUM源的仓库配置文件
# 定义一个变量,用来判断当前CentOS发行版的主版本号
SYSVER=`cat /etc/redhat-release | awk -F. '{print $1}' | awk '{print $NF}'`
# 将系统自带的YUM仓库配置文件转移到备份目录里面
mkdir -pv /etc/yum.repos.d/bak
mv /etc/yum.repos.d/{*.repo,bak/}
# 针对CentOS6系统版本,新建一个基于FTP上YUM源的仓库配置文件
[ $SYSVER == 6 ] && cat > /etc/yum.repos.d/base.repo <<EOF
[base]
name=CentOS 6.9 DVD
baseurl=ftp://172.16.0.100/centos/6
gpgcheck=0
enable=1
EOF
echo $?
# 针对CentOS7系统版本,新建一个基于FTP上YUM源的仓库配置文件
[ $SYSVER == 7 ] && cat > /etc/yum.repos.d/base.repo <<EOF
[development]
name=CentOS 7.4 DVD
baseurl=ftp://172.16.0.100/centos/7
gpgcheck=0
enable=1
EOF
echo $?
# 刷新本地YUM源缓存
yum clean all && yum repolist


# 模块二:安装功能扩展软件包
# 定义一个变量,用来判断当前CentOS发行版的主版本号
SYSVER=`cat /etc/redhat-release | awk -F. '{print $1}' | awk '{print $NF}'`
# 针对CentOS6系统版本,安装适用于CentOS6的功能扩展软件包
[ $SYSVER == 6 ] && yum -y install autofs vim tree ntp
# 针对CentOS7系统版本,安装适用于CentOS7的功能扩展软件包
[ $SYSVER == 7 ] && yum -y install autofs vim tree chrony


# 模块三:启用时间同步服务
# 定义一个变量,用来判断当前CentOS发行版的主版本号
SYSVER=`cat /etc/redhat-release | awk -F. '{print $1}' | awk '{print $NF}'`
# 针对不同的系统版本,对应修改不同的配置文件
if [ $SYSVER == 6 ]; then
    # 针对CentOS6系统版本,修改NTP配置文件
    sed -ri 's/(server.*iburst)/\#\1/' /etc/ntp.conf
elif [ $SYSVER == 7 ]; then
    # 针对CentOS7系统版本,修改chrony配置文件
    sed -ri 's/(server.*iburst)/\#\1/' /etc/chrony.conf
fi
# 针对CentOS6系统版本,将新的配置项追加写入NTP配置文件
[ $SYSVER == 6 ] && cat >> /etc/ntp.conf <<EOF
server ntp1.aliyun.com iburst
server ntp2.aliyun.com iburst
server ntp3.aliyun.com iburst
server ntp4.aliyun.com iburst
server ntp5.aliyun.com iburst
server ntp6.aliyun.com iburst
server ntp7.aliyun.com iburst
EOF
echo $?
# 针对CentOS7系统版本,将新的配置项追加写入chrony配置文件
[ $SYSVER == 7 ] && cat >> /etc/chrony.conf <<EOF
server ntp1.aliyun.com iburst
server ntp2.aliyun.com iburst
server ntp3.aliyun.com iburst
server ntp4.aliyun.com iburst
server ntp5.aliyun.com iburst
server ntp6.aliyun.com iburst
server ntp7.aliyun.com iburst
EOF
echo $?
# 针对不同的系统版本,对应修改不同的配置文件
if [ $SYSVER == 6 ]; then
    # 针对CentOS6系统版本,设置ntpd服务开机自启动
    chkconfig ntpd on
elif [ $SYSVER == 7 ]; then
    # 针对CentOS7系统版本,设置chrony服务开机自启动
    systemctl enable chronyd.service
fi


# 模块四:确认当前系统时区
# 定义一个变量,用来判断当前CentOS发行版的主版本号
SYSVER=`cat /etc/redhat-release | awk -F. '{print $1}' | awk '{print $NF}'`
# 针对不同的系统版本,使用不同的方法
if [ $SYSVER == 6 ]; then
    # 针对CentOS6系统版本,使用Bash的Profile脚本来修改目标系统的时区
    echo 'TZ="Asia/Shanghai"; export TZ' > /etc/profile.d/TZ.sh
elif [ $SYSVER == 7 ]; then
    # 针对CentOS7系统版本,使用特有的设置命令来设置时区
    timedatectl set-timezone Asia/Shanghai
fi


# 模块五:重写目标系统的IP配置文件
# 定义一个变量,用来判断当前CentOS发行版的主版本号
SYSVER=`cat /etc/redhat-release | awk -F. '{print $1}' | awk '{print $NF}'`
# 针对不同的系统版本,清除对应的干扰源
if [ $SYSVER == 6 ]; then
    # 针对CentOS6系统版本,每次开机自动清空一个“自动把eth0变成eth1”的干扰源
    echo '> /etc/udev/rules.d/70-persistent-net.rules' >> /etc/rc.local
elif [ $SYSVER == 7 ]; then
    # 针对CentOS7系统版本,将自动生成的 ens* 配置文件移动到系统临时目录下
    mv /etc/sysconfig/network-scripts/ifcfg-ens* /tmp/
fi
# 针对CentOS6系统版本,将新的配置项覆盖写入eth0网卡配置文件
[ $SYSVER == 6 ] && cat > /etc/sysconfig/network-scripts/ifcfg-eth0 <<EOF
DEVICE=eth0
BOOTPROTO=none
ONBOOT=YES
IPADDR=172.16.0.62
PREFIX=16
GATEWAY=172.16.0.254
DNS=114.114.114.114
EOF
echo $?
# 针对CentOS7系统版本,将新的配置项覆盖写入eth0网卡配置文件
[ $SYSVER == 7 ] && cat > /etc/sysconfig/network-scripts/ifcfg-eth0 <<EOF
DEVICE=eth0
BOOTPROTO=none
ONBOOT=YES
IPADDR=172.16.0.72
PREFIX=16
GATEWAY=172.16.0.254
DNS=114.114.114.114
EOF
echo $?


# 模块六:修改目标系统的DNS解析配置文件
# 定义一个变量,用来判断当前CentOS发行版的主版本号
SYSVER=`cat /etc/redhat-release | awk -F. '{print $1}' | awk '{print $NF}'`
# 针对CentOS6系统版本,将NetworkManager服务设置为开机禁用,清除对目标系统DNS解析的干扰
[ $SYSVER == 6 ] && chkconfig NetworkManager off && service NetworkManager stop
echo $?
# 将DNS解析配置项覆盖写入resolv.conf配置文件
echo 'nameserver 114.114.114.114' > /etc/resolv.conf


# 模块七:修改目标系统的主机名配置文件
# 定义一个变量,用来判断当前CentOS发行版的主版本号
SYSVER=`cat /etc/redhat-release | awk -F. '{print $1}' | awk '{print $NF}'`
# 针对不同的系统版本,使用不同的方法
if [ $SYSVER == 6 ]; then
    # 针对CentOS6系统版本,修改配置文件的HOSTNAME值
    sed -ri 's@(HOSTNAME=).*@\1CentOS69.uman-tech.cn@' /etc/sysconfig/network
elif [ $SYSVER == 7 ]; then
    # 针对CentOS7系统版本,将主机名覆盖写入配置文件
    echo 'CentOS74.uman-tech.cn' > /etc/hostname
fi


# 模块八:定制目标系统的命令提示符PS1样式
# 定义一个变量,用来判断当前CentOS发行版的主版本号
SYSVER=`cat /etc/redhat-release | awk -F. '{print $1}' | awk '{print $NF}'`
# 针对不同的系统版本,设置不同的命令提示符PS1样式
if [ $SYSVER == 6 ]; then
    # 针对CentOS6系统版本,将命令提示符PS1样式修改为32绿色
    echo 'export PS1="\[\e[1;32m\][\u@\h \W]\\$\[\e[0m\]"' > /etc/profile.d/env.sh
elif [ $SYSVER == 7 ]; then
    # 针对CentOS7系统版本,将命令提示符PS1样式修改为34蓝色
    echo 'export PS1="\[\e[1;34m\][\u@\h \W]\\$\[\e[0m\]"' > /etc/profile.d/env.sh
fi
cat /etc/profile.d/env.sh


# 模块九:加速目标主机的SSH访问
# 禁止在SSH建立连接时检查GSSAPI验证,不区分CentOS系统版本
sed -ri 's@^(GSSAPIAuthentication )yes@\1no@' /etc/ssh/sshd_config
# 禁止在SSH建立连接时检查DNS解析,不区分CentOS系统版本
sed -ri 's@#(UseDNS ).*@\1no@' /etc/ssh/sshd_config


# 模块十:为root用户提供辅助的命令别名
# 以下命令别名仅对root用户生效,不区分CentOS系统版本
cat >> /root/.bashrc <<EOF
alias cdnet='cd /etc/sysconfig/network-scripts/'
alias vie0='vim /etc/sysconfig/network-scripts/ifcfg-eth0'
EOF


# 模块十一:启用本地的光盘自动挂载服务
# 定义一个变量,用来判断当前CentOS发行版的主版本号
SYSVER=`cat /etc/redhat-release | awk -F. '{print $1}' | awk '{print $NF}'`
# 针对不同的系统版本,使用不同的方法
if [ $SYSVER == 6 ]; then
    # 针对CentOS6系统版本,将autofs服务设置为开机自启动
    chkconfig autofs on
elif [ $SYSVER == 7 ]; then
    # 针对CentOS7系统版本,将autofs服务设置为开机自启动
    systemctl enable autofs.service
fi


# 模块十二:CentOS7阻止初始化程序询问是否同意License
# 定义一个变量,用来判断当前CentOS发行版的主版本号
SYSVER=`cat /etc/redhat-release | awk -F. '{print $1}' | awk '{print $NF}'`
# 针对CentOS7系统版本,阻止初始化程序询问是否同意License
if [ $SYSVER  == 7 ]; then
    systemctl disable initial-setup.service
    systemctl disable initial-setup-graphical.service
fi


# 模块十三:(可选)CentOS精简开机服务
# 定义一个变量,用来判断当前CentOS发行版的主版本号
SYSVER=`cat /etc/redhat-release | awk -F. '{print $1}' | awk '{print $NF}'`
# 针对不同的系统版本,使用不同的方法
if [ $SYSVER == 6 ]; then
    # 针对CentOS6系统版本,将postfix服务设置为开机禁用
    chkconfig postfix off
elif [ $SYSVER == 7 ]; then
    # 针对CentOS7系统版本,将postfix服务设置为开机禁用
    systemctl disable postfix
fi


# 模块十四:(可选)桌面化安装CentOS后的首次启动使用图形界面
# 定义一个变量,用来判断当前CentOS发行版的主版本号
SYSVER=`cat /etc/redhat-release | awk -F. '{print $1}' | awk '{print $NF}'`
# 针对不同的系统版本,使用不同的方法
if [ $SYSVER == 6 ]; then
    # 针对CentOS6系统版本,下一次开机默认使用图形界面
    sed -ri 's@id:3:initdefault:@id:5:initdefault:@' /etc/inittab
elif [ $SYSVER == 7 ]; then
    # 针对CentOS7系统版本,下一次开机默认使用图形界面
    systemctl set-default graphical.target
    # 为图形化界面创建一个假的用户
    useradd -M test && echo centos|passwd --stdin test
fi
%end

测试应答文件是否可用

  • 对适用于两版系统的四种安装方式的系统部署应答文件进行测试

准备FTP共享环境

FTP硬件配置列表

  • 系统:CentOS7.4 最小化安装,已安装autofs和vsftpd
  • 光盘1:CentOS-7-x86_64-Everything-1708.iso
  • 光盘2:CentOS-6.9-x86_64-bin-DVD1.iso
  • 网卡:NAT,关闭DHCP
  • IP:172.16.0.100/16

准备FTP共享环境

#!/bin/bash
# 创建光盘挂载目录
mkdir -pv /var/ftp/centos/{6,7}
# 创建用于存放系统部署应答文件的目录
mkdir -pv /var/ftp/ksdir
# 写入分区自动挂载策略
cat >> /etc/fstab << EOF
/dev/sr0    /var/ftp/centos/7    iso9660    defaults    0    0
/dev/sr1    /var/ftp/centos/6    iso9660    defaults    0    0
EOF
# 使所有的自动挂载策略立即生效
mount -a
# 使vsftpd服务开机启动,并马上启动此服务
systemctl enable vsftpd.service
systemctl start vsftpd.service
# 将系统自带的YUM仓库配置文件转移到备份目录里面
mkdir -pv /etc/yum.repos.d/bak
mv /etc/yum.repos.d/{*.repo,bak/}
# 新建一个YUM仓库配置文件
cat > /etc/yum.repos.d/base.repo <<EOF
[development]
name=CentOS 7.4 DVD
baseurl=file:///var/ftp/centos/7
gpgcheck=0
EOF

测试能否正常被匿名访问

1、测试能否正常匿名访问存放系统部署应答文件的目录

访问 ftp://172.16.0.100/pun/ksdir/

Test-Kickstart-Step1-FTP-Directory-ks_cfg

2、测试能否正常匿名访问CentOS6.9光盘挂载目录

访问 ftp://172.16.0.100/centos/6

Test-Kickstart-Step2-FTP-Directory-CentOS69-DVD

2、测试能否正常匿名访问CentOS7.4光盘挂载目录

访问 ftp://172.16.0.100/centos/7

Test-Kickstart-Step3-FTP-Directory-CentOS74-DVD

测试最小化安装CentOS6.9

第一步:光盘引导界面

Test-Kickstart-Step4-CentOS69-DVD-Boot

第二步:手动键入启动选项

按ESC键,输入 linux ip=172.16.0.61 netmask=255.255.0.0 ks=ftp://172.16.0.100/ksdir/CentOS69-Minimal-ks.cfg

Test-Kickstart-Step6-CentOS69-Boot-Minimal-ks-Options

第三步:开始安装的标志性画面

Test-Kickstart-Step10-CentOS69-Start-Installation

第四步:安装的软件包数量

Test-Kickstart-Step12-CentOS69-Minimal-Packages-Installation

测试桌面化安装CentOS6.9

第一步:光盘引导界面

Test-Kickstart-Step4-CentOS69-DVD-Boot

第二步:手动键入启动选项

按ESC键,输入 linux ip=172.16.0.62 netmask=255.255.0.0 ks=ftp://172.16.0.100/ksdir/CentOS69-Desktop-ks.cfg

Test-Kickstart-Step7-CentOS69-Boot-Desktop-ks-Options

第三步:开始安装的标志性画面

Test-Kickstart-Step10-CentOS69-Start-Installation

第四步:安装的软件包数量

Test-Kickstart-Step13-CentOS69-Desktop-Packages-Installation

测试最小化安装CentOS7.4

第一步:光盘引导界面

Test-Kickstart-Step5-CentOS74-DVD-Boot

第二步:手动键入启动选项

按ESC键,输入 linux ip=172.16.0.71 netmask=255.255.0.0 ks=ftp://172.16.0.100/ksdir/CentOS74-Minimal-ks.cfg

Test-Kickstart-Step8-CentOS74-Boot-Minimal-ks-Options

第三步:开始安装的标志性画面

Test-Kickstart-Step11-CentOS74-Start-Installation

第四步:安装的软件包数量

Test-Kickstart-Step14-CentOS74-Minimal-Packages-Installation

测试桌面化安装CentOS7.4

第一步:光盘引导界面

Test-Kickstart-Step5-CentOS74-DVD-Boot

第二步:手动键入启动选项

按ESC键,输入 linux ip=172.16.0.72 netmask=255.255.0.0 ks=ftp://172.16.0.100/ksdir/CentOS74-Desktop-ks.cfg

Test-Kickstart-Step9-CentOS74-Boot-Desktop-ks-Options

第三步:开始安装的标志性画面

Test-Kickstart-Step11-CentOS74-Start-Installation

第四步:安装的软件包数量

Test-Kickstart-Step15-CentOS74-Desktop-Packages-Installation

附录

文件共享服务器 FileServer74 的系统部署ks应答文件

  • 特性说明
    • 基于“CentOS74最小化安装”的应答文件修改
    • 仅安装vsftpd和chrony两个软件包
  • 关键设置
    • FTP挂载目录为:/var/ftp/centos/{6,7}
    • 本地YUM源目录为:/var/ftp/centos/7
    • 系统部署应答文件存放目录为:/var/ftp/ksdir
    • 开机自动同步时间
    • IP地址:172.16.0.100/16
    • 主机名:FileServer74.uman-tech.cn
    • 修改PS1样式:31红色
    • 加速SSH
    • 命令别名:cdnet、vie0(vim需要后续自行安装)
    • 精简开机服务:禁用postfix
# FileServer74-ks.cfg

# Part1. Basic Configuration 基本设置
# System language
lang en_US
# Keyboard layouts
keyboard 'us'
# System timezone
timezone Asia/Shanghai
# Root password
rootpw --iscrypted $1$j3xr2/Pu$lVt5kaUUmJ6yTARABzvJG0
#platform=x86, AMD64, or Intel EM64T
# Reboot after installation
reboot
# Use text mode install
text

# Part2. Installation Method 安装方法
# Install OS instead of upgrade
install
# Use network installation
#url --url="ftp://172.16.0.100/centos/7"
# Use CDROM installation media
cdrom

# Part3. BootLoader Options 引导选项
# System bootloader configuration
bootloader --append="net.ifnames=0 biosdevname=0" --location=mbr

# Part4. Partition Informations 磁盘分区策略(LVM)
# Clear the Master Boot Record
zerombr
# Partition clearing information
clearpart --all --initlabel
# Disk partitioning information
part pv.253 --fstype="lvmpv" --ondisk=sda --size=73736
part /boot --fstype="xfs" --ondisk=sda --size=1024
volgroup vg0 --pesize=4096 pv.253
logvol /  --fstype="xfs" --size=51200 --name=root --vgname=vg0
logvol swap  --fstype="swap" --size=2048 --name=swap --vgname=vg0
logvol /opt  --fstype="xfs" --size=20480 --name=opt --vgname=vg0

# Part6. Authentication 认证加密方式
# System authorization information
auth  --useshadow  --passalgo=sha512

# Part7. Firewall Configuration 防火墙设置
# SELinux configuration
selinux --disabled
# Firewall configuration
firewall --disabled

# Part8. Display Configuration 显示设置
# Do not configure the X Window System
skipx

# Part9. Package Selections 安装包组选择
%packages
@^minimal
@core
vsftpd
chrony

%end

# Part11. Post Installation Script 安装后脚本
%post
#!/bin/bash
# FileServer74安装后脚本
# IP地址:172.16.0.100/16


# 第一步:文件共享和YUM设置
# 创建本地光盘挂载目录
mkdir -pv /var/ftp/centos/{6,7}
# 创建应答文件存放目录
mkdir -pv /var/ftp/ksdir
# 将挂载关系写入fstab
cat >> /etc/fstab <<EOF
/dev/sr0    /var/ftp/centos/7    iso9660    defaults    0    0
/dev/sr1    /var/ftp/centos/6    iso9660    defaults    0    0
EOF
# 设置vsftpd为开机自启动
systemctl enable vsftpd.service
# 将系统自带的YUM仓库配置文件转移到备份目录里面
mkdir -pv /etc/yum.repos.d/bak
mv /etc/yum.repos.d/{*.repo,bak/}
# 新建一个基于本地光盘上YUM源的仓库配置文件
cat > /etc/yum.repos.d/base.repo <<EOF
[development]
name=CentOS 7.4 DVD
baseurl=file:///var/ftp/centos/7
gpgcheck=0
enable=1
EOF


# 第二步:时间同步设置
# 使用特有的设置命令来设置时区
timedatectl set-timezone Asia/Shanghai
# 修改chrony配置文件
sed -ri 's/(server.*iburst)/\#\1/' /etc/chrony.conf
# 将新的配置项追加写入chrony配置文件
cat >> /etc/chrony.conf <<EOF
server ntp1.aliyun.com iburst
server ntp2.aliyun.com iburst
server ntp3.aliyun.com iburst
server ntp4.aliyun.com iburst
server ntp5.aliyun.com iburst
server ntp6.aliyun.com iburst
server ntp7.aliyun.com iburst
EOF
# 设置chrony服务开机自启动
systemctl enable chronyd.service



# 第三步:IP地址/DNS/主机名设置
# 将自动生成的 ens* 配置文件移动到系统临时目录下
mv /etc/sysconfig/network-scripts/ifcfg-ens* /tmp/
# 针对FileServer74,将新的配置项覆盖写入eth0网卡配置文件
cat > /etc/sysconfig/network-scripts/ifcfg-eth0 <<EOF
DEVICE=eth0
BOOTPROTO=none
ONBOOT=YES
IPADDR=172.16.0.100
PREFIX=16
GATEWAY=172.16.0.254
DNS=114.114.114.114
EOF
# 将DNS解析配置项覆盖写入resolv.conf配置文件
echo 'nameserver 114.114.114.114' > /etc/resolv.conf
# 将主机名覆盖写入配置文件
echo 'FileServer74.uman-tech.cn' > /etc/hostname



# 第四步:其他设置(修改PS1样式、加速SSH、命令别名、精简开机服务)
# 针对FileServer74,将命令提示符PS1样式修改为31红色
echo 'export PS1="\[\e[1;31m\][\u@\h \W]\\$\[\e[0m\]"' > /etc/profile.d/env.sh
# 禁止在SSH建立连接时检查GSSAPI验证
sed -ri 's@^(GSSAPIAuthentication )yes@\1no@' /etc/ssh/sshd_config
# 禁止在SSH建立连接时检查DNS解析
sed -ri 's@#(UseDNS ).*@\1no@' /etc/ssh/sshd_config
# 以下命令别名仅对root用户生效,不区分CentOS系统版本
cat >> /root/.bashrc <<EOF
alias cdnet='cd /etc/sysconfig/network-scripts/'
alias vie0='vim /etc/sysconfig/network-scripts/ifcfg-eth0'
EOF
# 针对CentOS7系统版本,将postfix服务设置为开机禁用
systemctl disable postfix

%end

猜你喜欢

转载自www.cnblogs.com/linyonfeng/p/11102061.html
003