第二十节、kickstart自动化安装

参考文章1
参考文章2
参考文章3

一、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网卡启动,通过PXE BootROM(自启动芯片)会以UDP(简单用户数据报协议)发送一个广播请求,向本网络中的DHCP服务器索取IP;
  2. DHCP 服务器返回分配给客户机的IP 以及PXE文件的放置位置(该文件一般是放在一台TFTP服务器上) ;
  3. 客户端下载启动安装程序所必须的文件(pxelinux.0、pxelinux.cfg/default)。default文件下载完成后,会根据该文件中定义的引导顺序,启动Linux安装程序的引导内核。
  4. 根据pxelinux.0 的执行结果,通过TFTP服务器加载内核和文件系统(pxelinux.cfg/default、vmlinuz、initrd.img);
  5. 客户端通过pxelinux.cfg/default文件成功的引导Linux安装内核后,安装程序首先必须确定你通过什么安装介质来安装linux,如果是通过网络安装(NFS, FTP, HTTP),则会在这个时候初始化网络,并定位安装源位置。接着会读取default文件中指定的自动应答文件ks.cfg所在位置,根据该位置请求下载该文件。
    6.将ks.cfg文件下载回来后,通过该文件找到OS Server,并按照该文件的配置请求下载安装过程需要的软件包。OS Server和客户端建立连接后,将开始传输软件包,客户端将开始安装操作系统。安装完成后,将提示重新引导计算机
    详细工作流程,请参考下面这幅图:


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


    kickstart自动化安装原理.jpg

    这里可以将DHCP/TFTP/NFS全部安装在同一台机器上

二、服务配置安装(分配IP192.168.15.150)

环境准备局域网内已提供yum源(Nginx服务器端口8088)192.168.15.131:8088
登录kickstart服务器备份默认yum源目录,从yum服务器远程拷贝文件到目录

##150服务器
[root@mini ~]# cd /etc/   
[root@mini etc]# cp -R yum.repos.d    yum.repos.d.bak  
#备份原始yum源配置文件
[root@mini yum.repos.d]# rm -rf /etc/yum.repos.d/*
#删除配置目录下所有文件
[root@mini yum.repos.d]#  vim centos.repo
[yum]                               
name=centos6.5                     
baseurl=http://192.168.15.131:8088/CentOS6.5/  
enabled=1                        
gpgcheck=0      
#创建网络源配置文件
[root@mini yum.repos.d]# yum clean all
#清除yum缓存
[root@mini yum.repos.d]# yum repolist
Loaded plugins: aliases, changelog, downloadonly, fastestmirror, kabi, presto, security, tmprepo, verify,
              : versionlock
Loading support for CentOS kernel ABI
Determining fastest mirrors
yum                                                                                        | 4.0 kB     00:00     
yum/primary_db                                                                             | 4.4 MB     00:00     
repo id                                              repo name                                              status
yum                                                  centos6.5                                              6,367
repolist: 6,367
#查看更换yum源成功
  • 安装DHCP/TFTP服务
[root@mini ~]# yum install dhcp* tftp* -y
#开启tftp服务
[root@mini ~]# vim /etc/xinetd.d/tftp 
service tftp
{
        socket_type             = dgram
        protocol                = udp
        wait                    = yes
        user                    = root
        server                  = /usr/sbin/in.tftpd
        server_args             = -s /var/lib/tftpboot
        disable                 = no  #默认yes不开启
        per_source              = 11
        cps                     = 100 2
        flags                   = IPv4
}
#tftp服务是挂载在超级进程xinetd 下的,所以通过启动xinetd 来启动tftp服务。
[root@mini ~]# /etc/init.d/xinetd restart

配置DHCP服务

[root@mini data]#  vim /etc/dhcp/dhcpd.conf 
###################
ddns-update-style interim;    #忽略客户端更新
ignore client-updates;  
next-server 192.168.15.150;  #指定NFS客户端地址
filename "pxelinux.0";   #指定默认查找的文件名
allow booting;  
allow bootp;   #允许启动
subnet 192.168.15.0 netmask 255.255.255.0 {
# --- default gateway
option routers          192.168.15.1;
option subnet-mask      255.255.252.0;
range dynamic-bootp 192.168.15.170 192.168.15.200;

host ns {
        hardware ethernet  00:1a:a0:2b:38:81;
        fixed-address 192.168.15.101;}
}
[root@mini data]# /etc/init.d/dhcpd restart
  • TFTP+PXE配置
    要实现远程安装系统,首先需要在TFTPBOOT目录指定相关PXE内核模块及相关参数。(客户端请求后从服务端下载的一些启动文件)
    配置步骤如下:
[root@mini tftpboot]# ln -s /var/lib/tftpboot  /
[root@mini tftpboot]# cd /
#把tftp的目录软链接到根目录
[root@mini /]# ll  /tftpboot
lrwxrwxrwx    1 root root    17 Dec 11 16:26 tftpboot -> /var/lib/tftpboot
[root@mini ~]# mount /dev/cdrom /mnt
mount: block device /dev/sr0 is write-protected, mounting read-only
#将光驱的系统盘挂载到/mnt目录
[root@mini tftpboot]# find / -name "pxelinux.0"
/usr/share/syslinux/pxelinux.0
#查找启动文件pxelinux.0位置,如果不存在通过下面程序安装
[root@mini syslinux]# yum install syslinux syslinux-devel -y
[root@mini syslinux]# cp /usr/share/syslinux/pxelinux.0  /tftpboot/
#拷贝启动引导文件到tftp根目录
[root@mini tmp]# cp /mnt/images/pxeboot/vmlinuz  /tftpboot/
[root@mini tftpboot]# cp /mnt/images/pxeboot/initrd.img  /tftpboot/
#拷贝光盘中的内核启动文件到tftp根目录
#创建引导菜单文件目录,从光驱拷贝文件并重命名
[root@mini tftpboot]# mkdir pxelinux.cfg
[root@mini tftpboot]# cd pxelinux.cfg/
[root@mini pxelinux.cfg]# cp /mnt/isolinux/isolinux.cfg  /tftpboot/pxelinux.cfg/default
[root@mini tftpboot]# tree
.
├── initrd.img
├── pxelinux.0
├── pxelinux.cfg
│   └── default
└── vmlinuz

修改引导文件/tftpboot/pxelinux.cfg/default

[root@mini tftpboot]# vim /tftpboot/pxelinux.cfg/default 
default linux    # 默认加载一个菜单
#prompt 1 # 开启会显示命令行'boot: '提示符。prompt值为0时则不提示,将会直接启动'default'参数中指定的内容
timeout 10  # timeout时间是引导时等待用户手动选择的时间,设为1可直接引导,单位为1/10秒
display boot.msg   # 菜单背景图片、标题、颜色。
#########
label linux  # label指定在boot:提示符下输入的关键字,比如boot:linux[ENTER],这个会启动label linux下标记的kernel和initrd.img文件。
kernel vmlinuz   # 指定要启动的内核。同样要注意路径,默认是/tftpboot目录
append ks=nfs:192.168.15.150:/data/centosinstall/ks.cfg  ksdevice=eth0 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 –
  • 拷贝光盘文件到/data目录下新建的centosinstall目录,并且利用nfs共享该目录
[root@mini data]# mkdir centosinstall
[root@mini data]# nohup cp /mnt/*  /data/centosinstall/ -a &
#后台拷贝
[root@mini data]# yum install nfs* -y 
#安装NFS
[root@mini data]# vim /etc/exports 
/data/centosinstall/    *(rw,sync)
#共享目录/data/centosinstall/
[root@mini data]#  /etc/init.d/rpcbind restart
[root@mini data]# /etc/init.d/nfs restart   
#依次重启依赖服务rpcbind和nfs
  • 在centosinstall目录下新建ks.cfg文件(定义硬盘分区及安装软件包)
    默认记录系统安装步骤的文件/root/anaconda-ks.cfg
[root@mini data]# vim /data/centosinstall/ks.cfg
# Kickstart file automatically generated by anaconda.   #注释语句这是kickstart自动安装脚本
install      #开始安装
text          #文本模式安装
nfs --server=192.168.15.150 --dir=/data/centosinstall/  #指定nfs服务器目录后面带/号
key --skip   #跳过密钥
lang zh_CN.UTF-8  #字符集
keyboard us
network --device eth0 --bootproto=dhcp --noipv6 #网卡dhcp自动获取
rootpw 123456  #root密码
firewall --disabled  #禁用防火墙
authconfig --enableshadow --enablemd5
selinux --disabled  #禁止selinux
timezone Asia/Shanghai   #时区
bootloader --location=mbr --driveorder=sda --append="rhgb quiet" #引导方式mbr,安装到硬盘sda,打印默认信息
clearpart --all --initlabel  #初始化所有磁盘分区
part /boot --fstype ext3 --size=200  # /boot分配200M
part swap --size=1024     #swap交换分区1G
part / --fstype ext3 --size=80000  #根分区8G
part /data --fstype ext3 --size=200 --grow #data分区占剩余所有空间
reboot  #重启
%packages  #定义安装软件包,可以去/root/anaconda-ks.cfg复制光盘系统安装的包
@base
@core
@chinese-support
@compat-libraries
@core
@debugging
@development
@java-platform
@perl-runtime
@server-policy
@workstation-policy
yum-plugin-aliases
tboot
nss_db
linuxptp
rsyslog-gssapi
udftools
rsyslog-relp
audispd-plugins
mtools
yum-plugin-versionlock
sox
dumpet
gpm
yum-plugin-tmprepo
pax
python-dmidecode
uuidd
yum-presto
oddjob
wodim
volume_key
squashfs-tools
star
kernel-doc
tunctl
yum-plugin-downloadonly
sgpio
yum-plugin-changelog
genisoimage
brltty
yum-plugin-verify
x86info
dos2unix
cpupowerutils
unix2dos
kabi-yum-plugins
edac-utils
device-mapper-persistent-data
logwatch
rsyslog-gnutls
PyPAM
mkbootdisk
ecryptfs-utils
python-volume_key
zsh
ncurses-term
cjkuni-fonts-ghostscript
glibc-utils
systemtap-client
memtest86+
gdb-gdbserver
ps_mem
lslk
flightrecorder
systemtap-initscript
systemtap-sdt-devel
dejagnu
ElectricFence
ant
libstdc++-docs
gcc-gnat
expect
mod_dav_svn
perltidy
cmake
imake
babel
ksc
kdewebdev
rpmdevtools
compat-gcc-34
systemtap-server
cvs-inetd
gcc-java
compat-gcc-34-g77
jpackage-utils
bzr
mercurial
chrpath
gcc-objc
rpmlint
gcc-objc++
compat-gcc-34-c++
python-docs
nasm
icedtea-web
perl-LDAP
perl-Frontier-RPC
perl-Date-Calc
perl-suidperl
perl-Date-Manip
perl-Mozilla-LDAP
perl-DBD-SQLite
%end
[root@mini data]# chmod 777 /data/centosinstall/ks.cfg 
#更改授权
重启所有服务
[root@mini ~]# /etc/init.d/xinetd restart       #TFTP依赖服务
[root@mini ~]#  /etc/init.d/rpcbind restart   #NFS依赖服务
[root@mini ~]# /etc/init.d/nfs restart           #NFS服务
[root@mini ~]#  /etc/init.d/dhcpd restart     #DHCP服务
#备注:/data/centosinstall/ks.cfg文件第4行配置NFS服务器的目录最后不需带/号否则安装时会报错
利用虚拟机给服务器自动安装centos系统
  • 首先利用PE系统格式化硬盘(一般服务器都是做好raid的虚拟硬盘),如果是全新的机器只要检查RAID是否完成,一般系统开机顺序是先检测硬盘再检测网卡,如果手动更改启动BOOT顺序,自动化安装重启后会继续循环安装,因此最好保证启动顺序是第一硬盘,第二网络,否则需要再系统安装完成重启时手动操作.
  • 虚拟机开启所有服务(xinetd/nfs/dhcp)后,网卡由原本的NAT模式改为桥接模式
  • 打开虚拟机的虚拟网络编辑器功能,关闭DHCP分配地址功能,并将桥接模式下的网卡改为物理网卡(笔记本一般都桥接到无线网卡上)
  • 修改笔记本物理网卡的IP地址,同时利用交换机将笔记本,服务器连接在统一个局域网中
  • 启动服务器等待系统安装完成即可

你可能感兴趣的:(第二十节、kickstart自动化安装)