一、PXE

1 什么是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 上下载所需的文件了。

2 PXE的工作过程:

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

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

(3) PXE Client 向本网络中的TFTP服务器索取pxelinux.0 文件;(pxelinux.0是一个bootloader,类似于grub,通过它来load kernel)

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

(5) 根据pxelinux.0 的执行结果,通过TFTP服务器加载内核和文件系统 ;加载文件系统初始化(initrd)程序和内核初始镜像(vmlinuz)

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

图片1.png

3 PXE+Kickstart无人值守安装操作系统架构图:

要达成PXE必须要有两个环节:

(1)一个是客户端的网卡必须要支持PXE用户端功能,并且开机时选择从网卡启动,这样系统才会以网卡进入PXE客户端的程序;

(2)一个是PXE服务器必须要提供至少含有DHCP以及TFTP的服务!

    且其中:

    · DHCP服务必须要能够提供客户端的网络参数,还要告知客户端TFTP所在的位置;

    · TFTP则提供客户端的boot loader及kernel file下载路径。

(3)还要加上NFS/FTP/HTTP(选择一样即可)等提供安装文件(安装镜像的解压文件),才算是比较完整的PXE服务器。一般TFTP和DHCP服务都由同一台服务器提供,且大多数时候还提供NFS/FTP/HTTP服务,所以PXE服务器一般是提供3合一的服务。

图片2.png

二、 什么是Kickstart:

        kickstart是一个利用Anconda工具实现服务器自动化安装的方法;通过生成的kickstart配置文件ks.cfg,服务器安装可以实现从裸机到全功能服务的的非交互式(无人值守式)安装配置;

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

       ks.cfg是一个简单的文本文件,文件包含Anconda在安装系统及安装后配置服务时所需要获取的一些必要配置信息(如键盘设置,语言设置,分区设置等);Anconda直接从该文件中读取必要的配置,只要该文件信息配置正确无误且满足所有系统需求,就不再需要同用户进行交互获取信息,从而实现安装的自动化;但是配置中如果忽略任何必需的项目,安装程序会提示用户输入相关的项目的选择,就象用户在典型的安装过程中所遇到的一样。一旦用户进行了选择,安装会以非交互的方式(unattended)继续。

 使用kickstart优势:

    1.  流线化自动化的安装;

    2.  快速大量的裸机部署;
    3.  强制建立的一致性(软件包,分区,配置,监控,安全性)
    4.  减少人为的部署失误
使用Kickstart方法安装的过程:
    1.  创建一个kickstart文件
    2.  创建有kickstart文件的引导介质或者使这个文件在网络上可用;
    3.  筹备一个安装树
    4.  开始ks安装:anconda自身启动 -->选取ks安装模式--> 从ks文件读取配置 --> 最后安装
创建kickstart配置文件ks.cfg的方式:
   1.  文本编辑器编辑生成:vim
   2. 用图形化界面配置:system-config-kickstat(需要安装system-config-kickstart.noarch包)
注:图形化界面配置时,磁盘选项无法创建配置LVM(逻辑卷);
  3.文件生成后,推荐使用ksvalidator命令检查配置文件语法及完整性错误;
  如: [root@bogon ~]# ksvalidator ks.cfg 
        not enough arguments for format string

     

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

三.系统安装过程

系统安装过程.png

四.  Anaconda简介

     Anaconda是Red Hat、CentOS、Fedora等Linux的安装管理程序。它可以提供文本、图形等安装管理方式,并支持Kickstart等脚本提供自动安装的功能。此外,其还支持许多启动参数,熟悉这些参数可为安装带来很多方便。该程序是把位于光盘或其他源上的数据包,根据设置安装到主机上的一个程序;为实现该定制安装,其提供一个定制界面,可以实现交互式界面供用户选择配置(如选择语言,键盘,时区等信息);

Anaconda支持的管理模式:
    Kickstart提供的自动化安装
    对一个RedHat实施upgrade
    Rescuse模式对不能启动的系统进行故障排除;
    

引导有多种方式:

    要进入安装步骤,需要先有一个引导程序引导启动一个特殊的Linux安装环境系统;

    1.  基于网络方式的小型引导镜像,需要提供小型的引导镜像;
    2.  U盘引导,通过可引导存储介质中的小型引导镜像启动安装过程;
    3.  基于PXE的网络安装方式,要提供PXE的完整安装环境;
    4.  其他bootloder引导(如GRUB)
可用的安装方式:
    本地CDROM
    磁盘驱动器
    NFS映像
    FTP
    HTTP
通过网络方式安装时:

    不论通过FTP、HTTP还是NFS方式共享安装,可以将安装光盘先拷贝到网络服务器上保存为iso镜像,然后loop挂载到共享目录或网页目录(当然,拷贝镜像中的所有文件到指定位置或直接挂载到共享目录也可),而通过NFS方式时,可以直接将光盘的iso文件放到共享目录即可,安装程序挂载共享目录后可以自动识别镜像;

  五.centos 6 的ISO目录文件介绍:

1、ISO目录列表:

 Feige图片20180425110041.bmp

   .discinfo 文件是安装价质的识别信息,安装过程中,anaconda会去读取.discinfo 和.treeinfo文件,获取光盘信息.

   .treeinfo 文件是系统版本,创建时间及文件目录树结构信息

   CentOS目录存放安装软件包及信息(Centos 6版本的名称是Packages)

   base 目录存放定制脚本及包信息

         packages就是存放包的目录,对这个目录执行createrepo命令就会生成一个repodata的目录.

         repodata精确描述一个RPM包的详细信息,如依赖关系,包含文件,校验码信息等;

         TRANS.TBL文件记录当前目录的列表,用mkisofs的-T参数重新生成,主要是为了长文件名称

      Feige图片20180425110920.bmp

    

isolinux 目录存放光盘启动时的安装界面信息

      ★ isolinux.bin是光盘引导程序,在mkisofs的选项中需要明确给出文件路径,这个文件属于SYSLINUX项目

           ★ isolinux.cfg是isolinux.bin的配置文件,当光盘启动后(即运行isolinux.bin),会自动去找isolinux.cfg文件

           ★ vesamenu.c32就是我们看到的光盘启动后的安装图形界面,也属于SYSLINUX项目,还有一个menu.c32版本,是纯文本的菜单;

           ★ memtest选项,则开始进行内存检测;这是一个独立的程序,属于memtest86+项目

           ★ splash.jgp是光盘启动界面的背景图

           ★ vmlinuz是内核映像,initrd.img是ramfs (先cpio,再gzip压缩),都是编译内核生成的;isolinux.bin根据安装选项找到对应的配置,装载内核和ramfs;

      images 目录包括了必要的启动映像文件

           ★  install.img是一个squashfs根文件系统,当内核启动后就装载install.img并切换根文件系统,执行里面的anaconda程序,anaconda是fedora的安装程序;

六.部署PXE+Kickstart无人值守安装操作系统环境

 1.安装dhcp服务端程序:  

      DHCP主要是提供客户端网络参数与TFTP的位置和boot loader的文件名。

编辑/etc/dhcp/dhcpd.conf在subnet的区块内加入TFTP的相关位置和PXE上专门为PXE客户端下载的boot loader文件名称为pxelinux.0。

  • 安装DHCP服务       # yum -y install dhcp

  • 复制配置模板文件到DHCP的配置目录中        # cp -f /usr/share/doc/dhcp-4.1.1/dhcpd.conf.sample  /etc/dhcp/dhcpd.conf

  • 修改/etc/dhcp/dhcpd.conf 配置文件,内容如下:

 

 ddns-update-style interim;

 ignore client-updates;
filename "pxelinux.0";   #pxelinux 启动文件位置;
next-server 192.168.111.130;  #TFTP Server 的IP地址;
subnet 192.168.111.0 netmask 255.255.255.0 {
       option routers                  192.168.111.130;
       option subnet-mask              255.255.255.0;
       range dynamic-bootp 192.168.111.100 192.168.111.200;
       default-lease-time 21600;
       max-lease-time 43200;
}
启动DHCP服务   # /etc/init.d/dhcpd start

2. 部署TFTP

       boot loader文件pxelinux.0以及内核相关的配置文件(目录pxelinux.cfg下)主要都是由TFTP来提供的。

       TFTP告诉客户端TFTP的根目录在哪里,这样客户端才能找到相关文件。TFTP是由xinetd这个super daemon所管理的,因此设定好TFTP之后,要启动的是xinetd。

2.1 安装tftp-server

yum -y install xinetd

yum -y install tftp-server

2.2 配置tftp 服务,将disable 设置为no

vi /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 

        per_source              = 11 

        cps                     = 100 2 

        flags                   = IPv4

}

2.3 启动tftp服务   # /etc/init.d/xinetd restart

3.配置支持PXE的启动程序

        使用PXE的开机引导的话,需要使用CentOS提供的syslinux包,(syslinux是一个功能强大的引导加载程序,而且兼容各种介质。syslinux是一个小型的Linux操作系统,它的目的是简化首次安装Linux的时间,并建立修护或其它特殊用途的启动盘。)

        要安装Linux系统,必须提供Linux内核文件和initrd文件,从系统安装镜像中获取内核相关文件,将内核相关文件放在/tftpboot/目录下。

3.1 复制pxelinux.0 文件至/var/lib/tftpboot/ 文件夹中

 cp    /usr/share/syslinux/pxelinux.0        /var/lib/tftpboot/    # 获取boot loader文件

3.2 复制iso 镜像中的/image/pxeboot/initrd.img 和vmlinux 至/var/lib/tftpboot/ 文件夹中

cp        /var/www/html/cdrom/images/pxeboot/{initrd.img,vmlinuz}       /var/lib/tftpboot/      # 获取Linux内核文件和initrd文件

3.3 复制iso 镜像中的/isolinux/*.msg 至/var/lib/tftpboot/ 文件夹中

 cp       /var/www/html/cdrom/isolinux/*.msg         /var/lib/tftpboot/                                        #获取所有菜单说明文件

3.4 在/var/lib/tftpboot/ 中新建一个pxelinux.cfg目录。

     pxelinux.cfg是个目录,可以放置默认的开机选项,也可以针对不同的客户端主机提供不同的开机选项。一般来说,可以在pxelinux.cfg目录内建立一个名为default的文件来提供默认选项。

 mkdir /var/lib/tftpboot/pxelinux.cfg

3.5 将iso 镜像中的/isolinux 目录中的isolinux.cfg复制到pxelinux.cfg目录中,同时更改文件名称为default

      isolinux.cfg这个文件里提供了开机选项,可以以它作为修改开机选项和菜单的模板,这样修改起来比较容易,也更便捷!

 cp /var/www/html/cdrom/isolinux/isolinux.cfg /var/lib/tftpboot/pxelinux.cfg/default

3.6 修改default文件

 vi /var/lib/tftpboot/pxelinux.cfg/default

default ks     #默认启动的是 'label ks' 中标记的启动内核

prompt 1              #显示 'boot: ' 提示符。 '0' 时则不提示,将会直接启动 'default' 参数中指定的内容,'1'则提示。

timeout 6      #在用户输入之前的超时时间,单位为 1/10 秒。

display boot.msg  #显示某个菜单说明文件的内容,注意文件的路径。默认是在/var/lib/tftpboot/ 目录下。

F1 boot.msg     #按下 'F1' 这样的键后显示的菜单说明文件。

F2 options.msg

F3 general.msg

F4 param.msg

F5 rescue.msg

label linux       #'label' 指定你在 'boot:' 提示符下输入的关键字,比如boot: linux[ENTER],这个会启动'label linux' 下标记的kernel 和initrd.img 文件。

        kernel vmlinuz  #kernel 参数指定要启动的内核。

        append initrd=initrd.img #append 指定追加给内核的参数,能够在grub 里使用的追加给内核的参数,在这里也都可以使用。

label text

        kernel vmlinuz

       append initrd=initrd.img text

label ks

        kernel vmlinuz

       append ks=http://192.168.111.130/ks.cfg initrd=initrd.img    #告诉系统,从哪里获取ks.cfg文件 label local

       localboot 1

label memtest86

       kernel memtest

       append -

4.选择系统的安装方式

系统的安装方式可以选择HTTP、FTP、 NFS,我们这里介绍HTTP方式的安装。

4.1 安装并配置HTTP

# yum install httpd –y

# rpm -qa|grep httpd 

开启服务并设置开机启动

# /etc/init.d/httpd start

# chkconfig --level 35 httpd on

4.2 加载ISO镜像,在虚拟机中设置加载ISO镜像,将iso文件挂载至/mnt/cdrom.

4.3 复制光盘全部内容至http 的根目录/var/www/html/ 下

# cp -r /mnt/cdrom/ /var/www/html/

4.4 启动httpd服务

七、生成ks.cfg 文件

7.1 安装Kickstart

 yum install system-config-kickstart

7.2 在桌面环境下配置Kickstart,生成ks.cfg 文件,保存在/var/www/html目录下。

7.3 打开/var/www/html/ks.cfg 文件进行查看并做修改。

八.测试安装

创建虚拟机,选择nat模式进行测试安装。