一、基本原理简介

PXE 是一种系统引导的方式。进行 PXE 安装的必要条件是要安装的计算机中包含一个 PXE 支持的网卡(NIC Network Information Center),即网卡中必须要有 PXE Client

 

    PXE(Pre-boot Execution Environment)是由Intel设计的协议,它可以使计算机通过网络启动。协议分为clientserver两端,PXE client在网卡的ROM中,当计算机引导时,BIOSPXE client调入内存执行,并显示出命令菜单,经用户选择后,PXE client将放置在远端的操作系统通过网络下载到本地运行。

 

    既然是通过网络传输,就需要IP地址;也就是说在其启动过程中,客户端请求服务器分配IP地址,之后 PXE Client 使用 TFTP Client 通过TFTPTrivial File Transfer Protocol 简单文件传输协议)协议下载启动安装程序所需的文件。

 

    简单地说PXE网络安装,客户机通过支持PXE的网卡向网络中发送请求DHCP信息的广播请求IP地址等信息,DHCP服务器给客户端提供IP地址和其它信息(TFTP服务器、启动文件等),之后请求并下载安装需要的文件。在这个过程中需要一台服务器来提供启动文件、安装文件、以及安装过程中的自动应答文件等。

 

二、自动安装系统的详细工作过程

 

第一步:PXE ClientDHCP发送请求

 

     首先,将支持PXE的网络接口卡(NIC)的客户端的BIOS设置成为网络启动,通过PXE BootROM(自启动芯片)会以UDP(简单用户数据报协议)发送一个广播请求,向网络中的DHCP服务器索取IP地址等信息。

 

第二步:DHCP服务器提供信息

 

     DHCP服务器收到客户端的请求,验证是否来至合法的PXE Client的请求,验证通过它将给客户端一个“提供”响应,这个“提供”响应中包含了为客户端分配的IP地址、pxelinux启动程序(TFTP)位置,以及配置文件所在位置。

 

第三步:PXE客户端请求下载启动文件

 

     客户端收到服务器的“回应”后,会回应一个帧,以请求传送启动所需文件。这些启动文件包括:pxelinux.0pxelinux.cfg/defaultvmlinuzinitrd.img等文件。

 

第四步:Boot Server响应客户端请求并传送文件

 

     当服务器收到客户端的请求后,他们之间之后将有更多的信息在客户端与服务器之间作应答用以决定启动参数。BootROM 由 TFTP 通讯协议从Boot Server下载启动安装程序所必须的文件(pxelinux.0pxelinux.cfg/default)。default文件下载完成后,会根据该文件中定义的引导顺序,启动Linux安装程序的引导内核。

 

第五步:请求下载自动应答文件

 

     客户端通过pxelinux.cfg/default文件成功的引导Linux安装内核后,安装程序首先必须确定你通过什么安装介质来安装linux,如果是通过网络安装(NFS, FTP, HTTP),则会在这个时候初始化网络,并定位安装源位置。

 

或许你会说,刚才PXE不是已经获取过IP地址了吗?为什么现在还需要一次?这是由于PXE获取的是安装用的内核以及安装程序等,而安装程序要获取的是安装系统所需的二进制包以及配置文件。

 

由于它们需要的内容不同造成PXE模块和安装程序是相对独立的,PXE的网络配置并不能传递给安装程序。从而进行两次获取IP地址过程。

 

     接着会读取该文件中指定的自动应答文件ks.cfg所在位置,根据该位置请求下载该文件。

 

第六步:客户端安装操作系统

 

     将ks.cfg文件下载回来后,通过该文件找到OS Server,并按照该文件的配置请求下载安装过程需要的软件包。

 

     OS Server和客户端建立连接后,将开始传输软件包,客户端将开始安装操作系统。安装完成后,将提示重新引导计算机。这个时候注意,在重新引导的过程中一定要将BIOS修改回从硬盘启动,不然的话又会重复的自动安装操作系统。

 

    在上面介绍中PXE client是需要安装Linux的计算机,TFTP ServerDHCP ServerNFS Server运行在另外一台Linux Server上。Bootstrap文件(引导加载器)、配置文件、Linux内核都放置在Linux ServerTFTP服务器的根目录下。而Linux根文件系统存放于NFS Server的共享目录中。

 

    PXE client在工作过程中,需要三个二进制文件:bootstrapLinux 内核和Linux根文件系统。Bootstrap文件是可执行程序,它向用户提供简单的控制界面,并根据用户的选择,下载合适的Linux内核以及Linux根文件系统。

 

 

三、Kickstart简介

KickStart的工作原理是通过记录典型的安装过程中所需人工干预填写的各种参数,并生成一个名为ks.cfg的文件;在其后的安装过程中(不只局限于生成KickStart安装文件的机器)当出现要求填写参数的情况时,安装程序会首先去查找KickStart生成的文件,当找到合适的参数时,就采用找到的参数,当没有找到合适的参数时,才需要安装者手工干预。如果KickStart文件涵盖了安装过程中出现的所有需要填写的参数时,安装者完全可以只告诉安装程序从何处取ks.cfg文件,实现在动安装系统。

四、自动部署环境介绍

 

① 配置DHCP,用于给客户端提供IP地址及其它信息

 

② 配置TFTP服务器,用于提供客户端PXE引导所必须的文件

 

③ 配置NFS服务器,用于存放安装系统和应答文件

 

④ 配置Kickstart,用于自动应答安装

 

⑤ 使用PXE功能引导客户机

1.部署前的准备

关闭系统的iptables防火墙和selinux

永久禁用selinux:

vim /etc/selinux/config
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
#     enforcing - SELinux security policy is enforced.
#     permissive - SELinux prints warnings instead of enforcing.
#     disabled - No SELinux policy is loaded.
SELINUX=disabled             #此项改为disable
# SELINUXTYPE= can take one of three two values:
#     targeted - Targeted processes are protected,
#     minimum - Modification of targeted policy. Only selected processes are pro
tected. 
#     mls - Multi Level Security protection.
SELINUXTYPE=targeted

CentOS6.5:

[root@kickstart sys]# service iptables stop
[root@kickstart sys]# setenforce 0
[root@kickstart sys]# chkconfig iptables off

CentOS7:

[root@kickstart sys]# service firewalld stop
[root@kickstart sys]#systemctl disable firewalld.service
[root@kickstart sys]# setenforce 0

2.部署dhcp服务

1)安装dhcpd服务

yum install dhcp -y

2)修改dhcpd.conf配置文件

[root@kickstart sys]# cat /etc/dhcp/dhcpd.conf
# DHCP Server Configuration file.
#   see /usr/share/doc/dhcp*/dhcpd.conf.example
#   see dhcpd.conf(5) man page
ddns-update-style          # 设置DNS的动态更新类型,style参数必须是:ad-hoc、interim 或者 none
ignore client-updates;       #不允许动态更新DNS,允许的话是allow
allow booting;            #定义能够PXE启动
allow bootp;                #是否响应激活查询,定义支持bootp
default-lease-time 21600;   #默认dhcp地址租期
max-lease-time 43200;     #最大dhcp地址租期
option routers 192.168.5.1;  #设定dhcp客户端的默认路由
subnet 192.168.5.0 netmask 255.255.255.0 {         #定义dhcp网络
range dynamic-bootp 192.168.5.20 192.168.5.30;     #定义dhcp地址范围
next-server 192.168.5.100;                       #指定tftp服务器地址
filename "pxelinux.0";                          #指定pxe引导文件
}                                            #注意大括号结尾

3)启动dhcpd服务并检查

[root@kickstart sys]# service dhcpd start
[root@kickstart sys]# ps -ef|grep dhcp
root      36482      1  0 04:14 ?        00:00:00 dhcpd -cf /etc/dhcp/dhcpd.conf
[root@kickstart sys]#

注意:CenOS6.5部署dhcpd服务时,有时用service dhcpd start会失败,可以直接用

dhcpd -cf /etc/dhcp/dhcpd.conf尝试启动,后面是的路径是dhcpd的配置文件路径

 

3.部署NFS服务

1)安装rpcbindnfs服务

  [root@kickstart sys]# yum install rpcbind nfs-utils -y

2)创建nfs共享目录,并更改目录属主

[root@kickstart sys]#mkdir -p /data/sys
[root@kickstart sys]#chown  nfsnobody.nfsnbody /data/sys

3)修改nfs配置文件

[root@kickstart sys]#echo “/data/sys 192.168.5.0/24(rw,sync)” >/etc/exports

4)启动rpcbindnfs服务(注意顺序,先rpcbindnfs

[root@kickstart sys]#service rpcbind start
[root@kickstart sys]#service nfs start

5)检查rpcbindnfs服务

[root@kickstart sys]#/etc/init.d/nfs reload            
[root@kickstart sys]#rpcinfo -p localhost
   program vers proto   port  service
    100000    4   tcp    111  portmapper
    100000    3   tcp    111  portmapper
    100000    2   tcp    111  portmapper
    100000    4   udp    111  portmapper
    100000    3   udp    111  portmapper
    100000    2   udp    111  portmapper
    100005    1   udp  58611  mountd
    100005    1   tcp  47901  mountd
    100005    2   udp  36752  mountd
    100005    2   tcp  46315  mountd
    100005    3   udp  43498  mountd
    100005    3   tcp  34087  mountd
    100003    2   tcp   2049  nfs
    100003    3   tcp   2049  nfs
    100003    4   tcp   2049  nfs
    100227    2   tcp   2049  nfs_acl
    100227    3   tcp   2049  nfs_acl
    100003    2   udp   2049  nfs
    100003    3   udp   2049  nfs
    100003    4   udp   2049  nfs
    100227    2   udp   2049  nfs_acl
    100227    3   udp   2049  nfs_acl
    100021    1   udp  54387  nlockmgr
    100021    3   udp  54387  nlockmgr
    100021    4   udp  54387  nlockmgr
    100021    1   tcp  59024  nlockmgr
    100021    3   tcp  59024  nlockmgr
    100021    4   tcp  59024  nlockmgr
[root@kickstart sys]# showmount -e localhost
Export list for localhost:
/data 192.168.5.0/24

3.部署tftp服务

1)安装tftp服务

 [root@kickstart sys]# yum install xinetd -y (centos7还要需要单独安装yum install tftp-server -y)

2)修改tftp配置文件

[root@kickstart sys]#  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   ##tftp根目录,要记住
        disable                 = no               ###此项修改为no
        per_source              = 11
        cps                     = 100 2
        flags                   = IPv4
}

3)启动tftp服务并检查

[root@kickstart sys]# service xinetd restart
[root@kickstart sys]# netstat -lntup|grep 69
tcp        0      0 0.0.0.0:46955               0.0.0.0:*                   LISTEN      7532/rpc.mountd     
udp        0      0 0.0.0.0:69                  0.0.0.0:*                               7180/xinetd         
[root@kickstart sys]#

4.文件准备

1)复制pxelinux.0tftp根目录

[root@kickstart yum.repos.d]# cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/

如果没有/usr/share/syslinux/pxelinux.0,请先安装syslinux,安装命令:yum install syslinux -y

2)挂载系统光盘到/mnt,复制系统文件到nfs目录

[root@kickstart dev]# mount /dev/cdrom /mnt/
mount: /dev/sr0 is write-protected, mounting read-only
[root@kickstart dev]# cd /mnt/
[root@kickstart mnt]# ls
CentOS_BuildTag  GPL       LiveOS    RPM-GPG-KEY-CentOS-7
EFI              p_w_picpaths    Packages  RPM-GPG-KEY-CentOS-Testing-7
EULA             isolinux  repodata  TRANS.TBL
[root@kickstart mnt]# cp /mnt/p_w_picpaths/pxeboot/vmlinuz /var/lib/tftpboot/
[root@kickstart mnt]# cp /mnt/p_w_picpaths/pxeboot/initrd.img /var/lib/tftpboot/

3)在tftp根目录创建pxelinux.cfg目录,并将系统光盘中/isolinux/isolinux.cfg文件复制到pxelinux.cfg目录下,并改变为default

[root@kickstart tftpboot]# mkdir  /var/lib/tftpboot/pxelinux.cfg
[root@kickstart tftpboot]# cp /mnt/isolinux/isolinux.cfg /var/lib/tftpboot/pxelinux.cfg/default
[root@kickstart tftpboot]# cat /var/lib/tftpboot/pxelinux.cfg/default
default ks                             # 默认启动的是“label linux”中标记的启动内核
prompt 1#显示“boot:”提示符。为“0”时则不提示,将会直接启动“default”参数中指定的内容。
timeout 600  # 在用户输入之前的超时时间,单位为 1/10 秒,超时后会启动“default”参数中指定的内容。
 
display boot.msg
 
menu background splash.jpg
menu title Welcome to CentOS 6.5!
menu color border 0 #ffffffff #00000000
menu color sel 7 #ffffffff #ff000000
menu color title 0 #ffffffff #00000000
menu color tabmsg 0 #ffffffff #00000000
menu color unsel 0 #ffffffff #00000000
menu color hotsel 0 #ff000000 #ffffffff
menu color hotkey 7 #ffffffff #ff000000
menu color scrollbar 0 #ffffffff #00000000
 
label ks                                      #创建一个新的标签,命名为ks
  menu label ^Auto installed system               #菜单提示
  kernel vmlinuz                              
  append ks=nfs:192.168.5.100:/data/sys/ks.cfg initrd=initrd.img #指定 ks.cfg 配置文件的位置
label linux
  menu label ^Install or upgrade an existing system
  menu default
  kernel vmlinuz
  append initrd=initrd.img
label vesa
  menu label Install system with ^basic video driver
  kernel vmlinuz
  append initrd=initrd.img xdriver=vesa nomodeset
label rescue
  menu label ^Rescue installed system
  kernel vmlinuz
  append initrd=initrd.img rescue
label local
  menu label Boot from ^local drive
  localboot 0xffff

 
[root@kickstart sys]#

具体关于default配置说明,可以百度一下:pxelinux.cfg相关说明

4)将ks.cfg文件,放到nfs共享目录/data/sys权限设为755

ks.cfg自动应答文件生成有两种方法:

1)安装system-config-kickstart,命令:yum -y install system-config-kickstart, linuxGUI下,打开终端窗口输入命令:system-config-kickstart,使用图形窗口配置保存ks.cfg文件,如下图:

KickStart+nfs+dhcp+tftp无人值守批量安装CentOS6.5(或CentOS7)_批量部署

KickStart+nfs+dhcp+tftp无人值守批量安装CentOS6.5(或CentOS7)_linux_02



2)直接修改root家目录下的anaconda-ks.cfg,保存为ks.cfgnfs共享目录/data/sys

ks.cfg内容如下:

# Kickstart file automatically generated by anaconda.
 
#version=DEVEL
install 
nfs --server=192.168.5.100 --dir=/data/sys
lang en_US.UTF-8
keyboard us
network --onboot yes --device eth0 --bootproto dhcp --noipv6
rootpw admin=12
firewall --disabled
authconfig --enableshadow --passalgo=sha512
selinux --disabled
timezone --utc Asia/Shanghai
bootloader --location=mbr --driveorder=sda 
# The following is the partition information you requested
# Note that any partitions you deleted are not expressed
# here so unless you clear all partitions first, this is
# not guaranteed to work
#clearpart --none
firstboot --disable
logging --level=info
zerombr
clearpart --all
part /boot --fstype=ext4 --size=200
part swap --size=1024
part / --fstype=ext4 --grow --size=200
 
reboot
 
%packages
@base
@compat-libraries
@core
@debugging
@development
@dial-up
@hardware-monitoring
@network-tools
@performance
@server-policy
@workstation-policy
%post
mkdir /scripts /tools
useradd fenfa
echo 123456|passwd --stdin fenfa
echo "fenfa ALL=(ALL) NOPASSWD:ALL" >>/etc/sudoers
sed -i 's%#Port 22%Port 52113%' /etc/ssh/sshd_config
sed -i 's%#PermitRootLogin yes%PermitRootLogin no%' /etc/ssh/sshd_config
sed -i 's%#PermitEmptyPasswords no%PermitEmptyPasswords no%' /etc/ssh/sshd_config
sed -i 's%#UseDNS yes%UseDNS no%' /etc/ssh/sshd_config
%end
[root@kickstart sys]# cat /data/sys/ks.cfg 
# Kickstart file automatically generated by anaconda.
 
#version=DEVEL
install
nfs --server=192.168.5.100 --dir=/data/sys
lang en_US.UTF-8
keyboard us
network --onboot yes --device eth0 --bootproto dhcp --noipv6
rootpw admin=12
firewall --disabled
authconfig --enableshadow --passalgo=sha512
selinux --disabled
timezone --utc Asia/Shanghai
bootloader --location=mbr --driveorder=sda 
# The following is the partition information you requested
# Note that any partitions you deleted are not expressed
# here so unless you clear all partitions first, this is
# not guaranteed to work
#clearpart --none
firstboot --disable
logging --level=info
zerombr
clearpart --all
part /boot --fstype=ext4 --size=200
part swap --size=1024
part / --fstype=ext4 --grow --size=200
 
reboot
 
%packages
@base
@compat-libraries
@core
@debugging
@development
@dial-up
@hardware-monitoring
@network-tools
@performance
@server-policy
@workstation-policy
%post
mkdir /scripts /tools
useradd fenfa
echo 123456|passwd --stdin fenfa
echo "fenfa ALL=(ALL) NOPASSWD:ALL" >>/etc/sudoers
sed -i 's%#Port 22%Port 52113%' /etc/ssh/sshd_config
sed -i 's%#PermitRootLogin yes%PermitRootLogin no%' /etc/ssh/sshd_config
sed -i 's%#PermitEmptyPasswords no%PermitEmptyPasswords no%' /etc/ssh/sshd_config
sed -i 's%#UseDNS yes%UseDNS no%' /etc/ssh/sshd_config
%end

kickstart自动应答文件ks.cfg的部分注释见下图


KickStart+nfs+dhcp+tftp无人值守批量安装CentOS6.5(或CentOS7)_linux_03

KickStart+nfs+dhcp+tftp无人值守批量安装CentOS6.5(或CentOS7)_kickstart_04

5.客户机网卡设为pxe启动,开启电源开始安装

将需要安装centos系统的电脑或服务器用网线设置为pxe启动,然后连入kickstart主机的网络中,启动即可