上回分享了CentOS7.X基于Kickstart批量系统部署,今天分享kickstart自动化部署代码。

Kickstart使用背景介绍

随着公司业务不断增加,经常需要采购新服务器,并要求安装Linux系统,并且要求Linux版本要一致,方便以后的维护和管理,每次人工安装linux系统会浪费掉更多时间,如果我们有办法能节省一次一次的时间岂不更好呢?

大中型互联网公司一次采购服务器上百台,如果采用人工手动一台一台的安装,一个人得搞坏N张光盘,得多少个加班加点才能完成这项"艰巨"的任务呢,我们可以看到全人工来完成这样的工作太浪费人力了,有没有自动化安装平台呢,通过一台已存在的系统然后克隆或者复制到新的服务器呢。Kickstart可以毫不费力的完成这项工作。

什么是PXE?

PXE(Pre-boot Execution Environment,预启动执行环境)是由Intel公司开发的最新技术,工作于Client/Server的网络模式,支持工作站通过网络从远端服务器下载映像,并由此支持通过网络启动操作系统,在启动过程中,终端要求服务器分配IP地址,再用TFTP(trivial file transfer protocol)或MTFTP(multicast trivial file transfer protocol)协议下载一个启动软件包到本机内存中执行,由这个启动软件包完成终端基本软件设置,从而引导预先安装在服务器中的终端操作系统。

严格来说,PXE 并不是一种安装方式,而是一种引导方式。进行 PXE 安装的必要条件是在要安装的计算机中必须包含一个 PXE 支持的网卡(NIC),即网卡中必须要有 PXE Client。PXE 协议可以使计算机通过网络启动。此协议分为 Client端和 Server 端,而PXE Client则在网卡的 ROM 中。当计算机引导时,BIOS 把 PXE Client 调入内存中执行,然后由 PXE Client 将放置在远端的文件通过网络下载到本地运行。运行 PXE 协议需要设置 DHCP 服务器和 TFTP 服务器。DHCP 服务器会给 PXE Client(将要安装系统的主机)分配一个 IP 地址,由于是给 PXE Client 分配 IP 地址,所以在配置 DHCP 服务器时需要增加相应的 PXE 设置。此外,在 PXE Client 的 ROM 中,已经存在了 TFTP Client,那么它就可以通过 TFTP 协议到 TFTP Server 上下载所需的文件了。

PXE的工作过程:

1、PXE Client 从自己的PXE网卡启动,向本网络中的DHCP服务器索取IP;

2、 DHCP 服务器返回分配给客户机的IP 以及PXE文件的放置位置(该文件一般是放在一台TFTP服务器上) ;

3、PXE Client 向本网络中的TFTP服务器索取pxelinux.0 文件;

4、PXE Client 取得pxelinux.0 文件后之执行该文件;

5、根据pxelinux.0 的执行结果,通过TFTP服务器加载内核和文件系统 ;

6、进入安装画面, 此时可以通过选择HTTP、FTP、NFS 方式之一进行安装;

详细工作流程,请参考下面这幅图:

1

什么是Kickstart?

Kickstart是一种无人值守的安装方式。它的工作原理是在安装过程中记录典型的需要人工干预填写的各种参数,并生成一个名为ks.cfg的文件。如果在安装过程中(不只局限于生成Kickstart安装文件的机器)出现要填写参数的情况,安装程序首先会去查找Kickstart生成的文件,如果找到合适的参数,就采用所找到的参数;如果没有找到合适的参数,便需要安装者手工干预了。所以,如果Kickstart文件涵盖了安装过程中可能出现的所有需要填写的参数,那么安装者完全可以只告诉安装程序从何处取ks.cfg文件,然后就去忙自己的事情。等安装完毕,安装程序会根据ks.cfg中的设置重启系统,并结束安装。

PXE+Kickstart 无人值守安装操作系统完整过程如下:

2

要使用kickstart安装平台,包括的完整架构为:Kickstart+DHCP+NFS(http)+TFTP+PXE,从架构可以看出,大致需要安装的服务,例如dhcp、tftp、nfs、kickstart/pxe等。

测试环境:Centos6.9,理论支持Centos(Redhat)6.x系统

!/bin/bash
2019-5-1 20:35:26
by author feiyu
Auto Install deploy kickstart
IP_ADDR=`ifconfig | grep 'Bcast' | awk -F: '{print $2}' | awk '{print $1}'`
INSTALL_SOFT="dhcp* tftp* nfs* syslinux syslinux-devel"
NETWORK_NAME=`ifconfig | grep 'Ethernet' | awk '{print $1}'`
IP_V1=`echo $IP_ADDR | awk -F. '{print $1}'`
IP_V2=`echo $IP_ADDR | awk -F. '{print $2}'`
IP_V3=`echo $IP_ADDR | awk -F. '{print $3}'`
BOOT_DIR="/tftpboot"
NFS_DIR="/centos"
yum -y install $INSTALL_SOFT
sed -i '/disable/s/yes/no/' /etc/xinetd.d/tftp
mkdir -p $NFS_DIR
nohup cp -rf /mnt/* $NFS_DIR
echo "$NFS_DIR * (rw,sync)" >> /etc/exports
cat >>/etc/dhcp/dhcpd.conf <<EOF
ddns-update-style interim;
ignore client-updates;
next-server $IP_ADDR;
filename "pxelinux.0";
allow booting;
allow bootp;
subnet $IP_V1.$IP_V2.$IP_V3.0 netmask 255.255.255.0 {
--- default gateway
option routers $IP_V1.$IP_V2.$IP_V3.1;
option subnet-mask 255.255.255.0;
range dynamic-bootp $IP_V1.$IP_V2.$IP_V3.10 $IP_V1.$IP_V2.$IP_V3.250;
host ns {
hardware ethernet 00:1a:a0:2b:38:81;
fixed-address $IP_V1.$IP_V2.$IP_V3.111;}
}
EOF
mount /dev/cdrom /mnt
ln -s /var/lib/tftpboot/ /
cp /usr/share/syslinux/pxelinux.0 $BOOT_DIR
cp /mnt/images/pxeboot/{vmlinuz,initrd.img} $BOOT_DIR
mkdir -p $BOOT_DIR/pxelinux.cfg
cp /mnt/isolinux/isolinux.cfg $BOOT_DIR/pxelinux.cfg/default
cat >$BOOT_DIR/pxelinux.cfg/default <<EOF
default linux
prompt 1
timeout 10
display boot.msg
F1 boot.msg
F2 options.msg
F3 general.msg
F4 param.msg
F5 rescue.msg
label linux
kernel vmlinuz
append ks=nfs:$IP_ADDR:$NFS_DIR/ks.cfg ksdevice=$NETWORK_NAME initrd=initrd.img
label text
kernel vmlinuz
append initrd=initrd.img text
label ks
kernel vmlinuz
append ks initrd=initrd.img
label local
localboot 1
label memtest86
kernel memtest
append –
EOF
mv /root/anaconda-ks.cfg $NFS_DIR/ks.cfg
cat >$NFS_DIR/ks.cfg <<EOF
install
text
nfs --server=$IP_ADDR --dir=$NFS_DIR
lang en_US.UTF-8
keyboard us
network --onboot yes --device $NETWORK_NAME --bootproto dhcp --noipv6
rootpw 123456
firewall --disabled
authconfig --enableshadow --enablemd5
selinux --disabled
timezone Asia/Shanghai
bootloader --location=mbr --driveorder=sda --append="crashkernel=auto rhgb quiet"
zerombr
clearpart --all --initlabel
part /boot --fstype=ext4 --size=200
part swap --size=2000
part / --fstype=ext4 --grow --size=200
reboot
%packages
@base
@core
@chinese-support
EOF
chmod 777 $NFS_DIR/ks.cfg
service xinetd restart
service rpcbind start
service nfs start
service dhcpd restart
service iptables stop
setenforce 0
chkconfig rpcbind on
chkconfig nfs on
chkconfig xinetd on
chkconfig dhcpd on

分享完成,谢谢支持,多评多转

对Linux感兴趣的小伙伴私信Linux资料”,免费获取视频文档资料。