为什么需要PXE+DHCP+TFTP+KS实现无人值守批量装机?

一台两台服务器,你拿光盘去装是可以应付的。那么有100台服务器需要装机的时候,你也拿光盘去装吗?显然是不现实的,因此PXE+DHCP+TFTP+KS实现无人值守批量装机就可以满足多台服务器需要装机的需求。


PXE+DHCP+TFTP+KS组件:

PXE(preboot execute environment):预启动执行环境,可以利用此技术通过网络启动操作系统。

DHCP(Dynamic Host Configuration Protocol动态主机配置协议,可以利用此技术给局域网内的用户分配IP地址、子网掩码、网关等网络相关的配置信息。端口号     UDP:67

TFTP(Trivial File Transfer Protocol):简单文件传输协议,通常在局域网内传输文件大小比较小的文件。端口号    UDP:69

KS (kickstart):anaconda的配置文件,anaconda能够利用此配置文件实现操作系统自动化安装。

         PS:anaconda是centos系列系统的操作系统安装程序。


centos系列光盘安装的安装过程:

简述PXE+DHCP+TFTP+KS无人值守批量装机_linux系统安装

 步骤:

        1、CPU会根据BIOS中的boot sequence寻找启动设备。(用光盘安装时,要保证boot sequence中光盘在引导次序的最前面)。

        2、CPU会执行找到的光盘中的的MBR中的Bootloader,之后Bootloader会把用于执行系统安装的内核和initrd.img文件调入内存解压并执行。

        3、内核会启动当前光盘上的anaconda安装程序。根据软件的提示,用户手动输入安装参数(若此时光盘中有用户定义好的ks.cfg文件,并把ks文件路径传递内核,即可以实现光盘自动化安装)。


centos系列pxe网络安装的安装过程:

       在实现网络安装的这种方式时,要确保网卡支持PXE功能,且此网卡中有一段程序能够让CPU执行。此类型的网卡在可以在没有操作系统的情况下从DHCP服务器请求IP地址等信息,并配置在网卡上。这种网卡还具有TFTP功能,可以到TFTP服务器上请求文件。

简述PXE+DHCP+TFTP+KS无人值守批量装机_linux系统安装_02

 步骤:

       1、CPU会根据BIOS中的boot sequence寻找启动设备。(用网络安装时,要保证boot sequence中网卡在引导次序的最前面

       2、CPU执行找到的网卡中的程序,此程序会让网卡发送请求向DHCP服务请求IP地址。(类型的DHCP服务器的配置文件中会有next-server和filename两个指令来指明TFTP服务器的IP地址和要从TFTP服务器上下载的文件

       3、网卡中的程序首先会下载TFTP服务器中的pxelinux.0文件此文件由系统光盘上的syslinux软件包提供),接着会下载TFTP服务器中的vesamenu.c32、splash.jpg、default文件来给用户提供一个启动选择界面。界面如下:

简述PXE+DHCP+TFTP+KS无人值守批量装机_linux系统安装_03

      4、选择第一项之后,网卡中的程序会根据选择下载TFTP服务器中的vmlinuz(内核文件)和initrd.img(虚拟根文件系统)到内存中解压并执行。之后内核会根据传给ks.cfg文件url路径从服务器中下载ks.cfg文件,而后内核会根据ks.cfg指定的url路径从服务器中下载anaconda程序让CPU执行。最后运行的anaconda程序会读取ks.cfg文件中指定的配置完成自动化安装。

       

PXE+DHCP+TFTP+KS无人值守批量装机具体实现步骤:

      

       配置前准备 :    

  [root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth1
   DEVICE="eth0"
   BOOTPROTO="static"
   IPV6INIT="no"
   MTU="1500"
   NM_CONTROLLED="no"
   ONBOOT="yes"
   TYPE="Ethernet"
   IPADDR="172.16.0.1"
   NETMASK="255.255.0.0"
  [root@localhost ~]# service network restart
  # 给服务器配置静态IP地址


        PS:若用yum安装软件时,先要配置好yum源

   

      1、安装配置tftp-server

    [root@localhost ~]# yum -y install tftp-server
    # 安装tftp-server程序的时候会装一个xinetd程序,xinetd服务是管理tftp-server等服务的超级守护进程,其管理的服务通常称之为瞬时守护进程。  
   
    [root@localhost ~]# rpm -ql tftp-server    
    /etc/xinetd.d/tftp    
    /usr/sbin/in.tftpd    
    /usr/share/doc/tftp-server-0.49   
    /usr/share/doc/tftp-server-0.49/CHANGES  
    /usr/share/doc/tftp-server-0.49/README   
    /usr/share/doc/tftp-server-0.49/README.security    
    /usr/share/doc/tftp-server-0.49/README.security.tftpboot   
    /usr/share/man/man8/in.tftpd.8.gz    
    /usr/share/man/man8/tftpd.8.gz    
    /var/lib/tftpboot         # 此目录是tftp服务的根目录   
    # 查看tftp-server程序安装后生成的文件
    
    [root@localhost ~]# chkconfig tftp on     
    [root@localhost ~]# chkconfig --list tftp   
    tftp             启用   
    # 配置tftp服务开机启动
    
    [root@localhost ~]# service xinetd start   
    正在启动 xinetd:                 [确定]  
    [root@localhost ~]# ss -unlp | grep 69   
     UNCONN     0      0                         *:69                       *:*      users:(("xinetd",4315,5))
    # 查看tftp服务的69号端口是否开启      
    
    [root@localhost ~]# yum install syslinux  
    # pxe安装所需的pxelinux.0文件在此程序安装的/usr/share/syslinux/pxelinux.0   
    [root@localhost ~]# cp /cdrom/isolinux/{vesamenu.c32,vmlinuz,initrd.img,splash.jpg} /var/lib/tftpboot/   
    [root@localhost ~]# mkdir /var/lib/tftpboot/pxelinux.cfg   
    [root@localhost ~]# cp /cdrom/isolinux/isolinux.cfg /var/lib/tftpboot/pxelinux.cfg/default
    # 复制pxe网络安装系统时需要的文件


      2、安装配置dhcp服务 

   [root@localhost tftpboot]# yum -y install dhcp   
   [root@localhost tftpboot]# rpm -q dhcp    
   dhcp-4.1.1-38.P1.el6.centos.x86_64   
   
   [root@localhost tftpboot]# vim /etc/dhcp/dhcpd.conf    
    option domain-name "cyccn.net";    
    option domain-name-servers 202.106.46.151;       
    default-lease-time 600;    
    max-lease-time 86400;      
    subnet 172.16.0.0 netmask 255.255.0.0 {      
    range 172.16.0.100 172.16.0.200;     
    next-server 172.16.0.1;      
    filename "pxelinux.0";    
    }   
    # 配置文件中输入以上内容  
   
   [root@localhost tftpboot]# service dhcpd start    
   [root@localhost tftpboot]# ss -unlp | grep 67    
   UNCONN     0      0                         *:67                       *:*      users:(("dhcpd",4470,7)) 
   # 验证dhcp服务是否启动 
    
   [root@localhost tftpboot]# service iptables stop    
   # 确保iptables处于关闭状态   
   
   [root@localhost tftpboot]# setenforce 0    
   setenforce: SELinux is disabled    
   # 确保selinux处于关闭状态

  

    3、配置http的yum源

   [root@localhost ~]# yum install httpd      
   [root@localhost ~]# service httpd start    
   正在启动 httpd:                  [确定]    
  
   [root@localhost ~]# ss -ntlp | grep 80   
   LISTEN     0      128                      :::80                      :::*      users:(("httpd",28969,4),("httpd",28972,4),("httpd",28973,4),("httpd",28974,4),("httpd",28975,4),("httpd",28976,4),("httpd",28977,4),("httpd",28978,4),("httpd",28979,4))    
   # 确认httpd服务的80端口是否开启   
   
   [root@localhost ~]# mkdir /var/www/html/centos6   
   [root@localhost ~]# mount /dev/cdrom /var/www/html/centos6    
   # /var/www/html/目录是rpm安装httpd的默认网页文档目录      
   
   [root@localhost ~]# mv /etc/yum.repos.d/* ~/

  

    4、创建anaconda软件的ks.cfg配置文件           

   [root@localhost ~]# vim /var/www/html/ks.cfg  
    #platform=x86, AMD64, 或 Intel EM64T
    #version=DEVEL
    # Firewall configuration
    firewall --disabled
    # Install OS instead of upgrade
    install
    # Use network installation
    url --url="http://172.16.0.1/centos6"
    # Root password
    rootpw --iscrypted $1$ZRZM7Xhy$CuOUIwUmj9eUcXr9bn.Sw1
    # System authorization information
    auth  --useshadow  --passalgo=sha512
    # Use text mode install
    text
    firstboot --disable
    # System keyboard
    keyboard us
    # System language
    lang zh_CN
    # SELinux configuration
    selinux --disabled
    # Installation logging level
    logging --level=info
    # Reboot after installation
    reboot
    # System timezone
    timezone  Africa/Abidjan
    # System bootloader configuration
    bootloader --location=mbr
    # Clear the Master Boot Record
    zerombr
    # Partition clearing information
    clearpart --all --initlabel 
    # Disk partitioning information
    part /boot --fstype="ext4" --size=200
    part swap --fstype="swap" --size=2048
    part / --fstype="ext4" --grow --size=1
    
    %packages
    @chinese-support
    
    %end 
    # 在ks.cfg配置文件中输入以上内容

    

  5、通过/var/lib/tftpboot/pxelinux.cfg/default文件传给内核anaconda程序的配置文件url路径

  [root@localhost ~]# vim /var/lib/tftpboot/pxelinux.cfg/default    
  label linux  
  menu label ^Install or upgrade an existing system   
  menu default   
  kernel vmlinuz   append initrd=initrd.img ks=http://172.16.0.1/ks.cfg

         #  在default文件中label为linux中指令为append的后面添加ks=http://172.16.0.1参数

  

   6、配置pxe客户端从网卡启动(我这以vmware workstation虚拟机为例)

        调整测试机的网卡和pxe服务器的网卡在同一个虚拟交换机上

        开机启动时按F2进入 BIOS配置界面,把boot中的Network boot调到最前面

简述PXE+DHCP+TFTP+KS无人值守批量装机_pxe_04

       调整完成后按F10,选择yes保存并退出BIOS,而后系统会自动重启。

       重启后,如果一切正常会出现以下界面:

简述PXE+DHCP+TFTP+KS无人值守批量装机_linux系统安装_05

       

      选择第一项,pxe客户端则会自动进行系统安装。根据ks文件中的定义,安装完成后会重启系统。

      下图是系统安装是软件包的安装过程

     

简述PXE+DHCP+TFTP+KS无人值守批量装机_linux系统安装_06