title: 使用Kickstart实现半自动化系统批量部署
category: 系统部署
date: 2019-04-13 20:45
---
阅读导览:
- 借助Xmanager图形转发代理,快速上手Kickstart工具
- 借助Kickstart工具,为CentOS6.9和CentOS7.4分别制作对应的
Anaconda应答文件模板
- 模块化拆分
RESET.sh系统初始化脚本
,优化生成更适合自动化部署的Post-Installation-Script安装后脚本
- 根据应答文件模板、安装后脚本、以及上一篇博文总结得到的“分区策略”和“软件包列表”,组装出适用于两版系统的四种安装方式的
系统部署应答文件
- 对适用于两版系统的四种安装方式的
系统部署应答文件
进行测试
马上开吃!
借助Kickstart制作Anaconda应答文件模板
- 借助Xmanager图形转发代理,快速上手Kickstart工具
- 借助Kickstart工具,为CentOS6.9和CentOS7.4分别制作对应的
Anaconda应答文件模板
- 模块化拆分
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图形转发代理
第四步:在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
#
第五步:启动Kickstart工具并在本地显示其图形界面
#!/bin/bash
system-config-kickstart
CentOS6.9上通过光盘RPM包安装的Kickstart版本如下:
system-config-kickstart 2.8.6.6
CentOS7.4上通过光盘RPM包安装的Kickstart版本如下:
system-config-kickstart 2.9.6
借助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 |
安装过程使用文本模式,减少资源消耗 |
# 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源” |
# 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上的完整路径 |
# 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
第三步:BootLoader Options 引导选项
Kickstart图形选项 | 应答文件书写格式 | 具体含义解释 |
---|---|---|
Install new boot loader | 不书写 | 默认安装新的BootLoader |
Install boot loader on Master Boot Record (MBR) | bootloader --location=mbr |
默认将BootLoader安装在MBR上 |
# 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逻辑卷分区,请参考后续步骤
# 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网卡做详细的配置
第六步:Authentication 认证加密方式
Kickstart图形选项 | 应答文件书写格式 | 具体含义解释 |
---|---|---|
Use Shadow Passwords: SHA512 | auth --useshadow --passalgo=sha512 |
加密方式保持默认即可 |
# System authorization information
auth --useshadow --passalgo=sha512
第七步:Firewall Configuration 防火墙设置
Kickstart图形选项 | 应答文件书写格式 | 具体含义解释 |
---|---|---|
SELinux: Disabled | selinux --disabled |
强烈建议“禁用SELinux” |
Security level: Disable firewall | firewall --disabled |
建议“禁用防火墙”,防火墙可以在后续场景中按需开启 |
# SELinux configuration
selinux --disabled
# Firewall configuration
firewall --disabled
第八步:Display Configuration 显示设置
Kickstart图形选项 | 应答文件书写格式 | 具体含义解释 |
---|---|---|
(DoNot) Install a graphical environment | skipx |
取消此处的勾选,“不安装图形环境” |
# 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]
%packages
@base
%end
第十步:Pre Installation Script 安装前脚本
安装前脚本,一般情况下不使用,比较鸡肋,果断抛弃!(滑稽)
第十一步:Post Installation Script 安装后脚本
安装后脚本,极其常用!此处放置RESET.sh
系统初始化脚本,用于深度定制系统初始化配置
%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 |
安装过程使用文本模式,减少资源消耗 |
# 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源” |
# 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上的完整路径 |
# 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
第三步: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,方便后续的批量管理 |
# 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逻辑卷分区,请参考后续步骤
# 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网卡做详细的配置
第六步:Authentication 认证加密方式
Kickstart图形选项 | 应答文件书写格式 | 具体含义解释 |
---|---|---|
Use Shadow Passwords: SHA512 | auth --useshadow --passalgo=sha512 |
加密方式保持默认即可 |
# System authorization information
auth --useshadow --passalgo=sha512
第七步:Firewall Configuration 防火墙设置
Kickstart图形选项 | 应答文件书写格式 | 具体含义解释 |
---|---|---|
SELinux: Disabled | selinux --disabled |
强烈建议“禁用SELinux” |
Security level: Disable firewall | firewall --disabled |
建议“禁用防火墙”,防火墙可以在后续场景中按需开启 |
# SELinux configuration
selinux --disabled
# Firewall configuration
firewall --disabled
第八步:Display Configuration 显示设置
Kickstart图形选项 | 应答文件书写格式 | 具体含义解释 |
---|---|---|
(DoNot) Install a graphical environment | skipx |
取消此处的勾选,“不安装图形环境” |
# 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]
%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 安装前脚本
安装前脚本,一般情况下不使用,比较鸡肋,果断抛弃!(滑稽)
第十一步:Post Installation Script 安装后脚本
安装后脚本,极其常用!此处放置RESET.sh
系统初始化脚本,用于深度定制系统初始化配置
%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/
2、测试能否正常匿名访问CentOS6.9光盘挂载目录
访问 ftp://172.16.0.100/centos/6
2、测试能否正常匿名访问CentOS7.4光盘挂载目录
访问 ftp://172.16.0.100/centos/7
测试最小化安装CentOS6.9
第一步:光盘引导界面
第二步:手动键入启动选项
按ESC键,输入 linux ip=172.16.0.61 netmask=255.255.0.0 ks=ftp://172.16.0.100/ksdir/CentOS69-Minimal-ks.cfg
第三步:开始安装的标志性画面
第四步:安装的软件包数量
测试桌面化安装CentOS6.9
第一步:光盘引导界面
第二步:手动键入启动选项
按ESC键,输入 linux ip=172.16.0.62 netmask=255.255.0.0 ks=ftp://172.16.0.100/ksdir/CentOS69-Desktop-ks.cfg
第三步:开始安装的标志性画面
第四步:安装的软件包数量
测试最小化安装CentOS7.4
第一步:光盘引导界面
第二步:手动键入启动选项
按ESC键,输入 linux ip=172.16.0.71 netmask=255.255.0.0 ks=ftp://172.16.0.100/ksdir/CentOS74-Minimal-ks.cfg
第三步:开始安装的标志性画面
第四步:安装的软件包数量
测试桌面化安装CentOS7.4
第一步:光盘引导界面
第二步:手动键入启动选项
按ESC键,输入 linux ip=172.16.0.72 netmask=255.255.0.0 ks=ftp://172.16.0.100/ksdir/CentOS74-Desktop-ks.cfg
第三步:开始安装的标志性画面
第四步:安装的软件包数量
附录
文件共享服务器 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
- FTP挂载目录为:
# 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