Ironic Key Technologies--PXE网络引导

    实际工作中,对计算机、服务器安装操作系统,除了使用光驱、USB接口引导镜像,还可以通过PXE网络引导的方式安装。通过PXE引导的方式,可以批量操作,效率高,也容易维护。


一,什么是PXE

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

   PXE可实现无盘启动。

二,pxe相关的服务

1、DHCP服务

        DHCP(Dynamic Host Configration Protocol动态主机配置协议),是一种 C/S 服务架构。作用是让客户端向服务端租约一个 IP 地址。使用UDP 协议传输,服务端监听的端口号是 67,客户端监听的端口号是 68。


    第一步:在网卡的里面有一个BIOSRom的芯片,在开机时会向局域网里发出 DHCP DICOVER 广播请求,索取IP地址

    第二步:DHCP 服务端收到客户端的广播请求会发出一个DHCP OFFER的广播数据包,分配ip地址

    第三步:客户端在接收到报文后,会在向服务端发出 DHCP REQUEST 的广播报文。来确定此ip地址是否可以使用,以免冲突

    第四步:服务端在接受到此报文后会发出一个 DHCP ACK的确认报文,此时客户端就可以租约使用这个ip地址了

    安装:使用 yum install dhcp -y即可安装

    启动、关闭:/etc/init.d/dhcpdstart|stop

    开机自启动:chkconfig dhcpd on

    DHCP服务的作用:

    向PXE客户端分发IP地址、子网掩码、网关等,并指定启动引导文件所在服务器(TFTP服务器)的地址和PXE启动文件(pxelinux.0)

2、TFTP服务

    TFTP(Trivial File Transfer Protocol简单文件传输协议),实际上是一个简单的文件服务器,提供文件下载服务,一般是文件数目较少时使用。也是一种 C/S 架构,服务器工作于 UDP 的69 端口。

    安装:yum install tftp-server tftp -y

    此服务是由超级进程 xinetd来控制,实现“随叫随到”的状态。 服务的开启在 /etc/xinetd.d/tftp 文件设置

    启动,关闭:/etc/init.d/xinetd start|stop

    开机自启动:chkconfig tftp on

    安装tftp服务器:需要安装xinetd、tftp、tftp-server 

    TFTP服务的作用:

    向PXE客户端传输PXE启动文件、PXE引导配置文件、linux内核vmlinuz,以及系统启动文件initrd.img

三,PXE要求

        物理机的网卡支持pxe、主板支持网络引导。

    PXE不是一种安装方式,而是一种引导的方式。pxe方式要求安装的计算机中必须包含一个支持PXE 的网卡,且主板支持网络引导,PXE (Pre-boot Execution Environment)协议使计算机可以通过网络启动。

    PXE协议通过client来server上下载文件。

    PXE协议分为 client 和 server 端,PXE client 在网卡Rom中,

    当计算机引导时,cpu通过加载bios映射到内存中的片段,然后检查计算机的健康状况(如cpu风扇,网卡等)继而把网卡Rom中的PXE client 调入内存引导执行,由 PXE client 将放置在远端的文件通过网络下载到本地运行.


        client通过tftp协议下载server上的文件,前提是必须有相应的dhcp为其分发ip地址。

    PXE 协议需要设置 DHCP 服务器 和 TFTP 服务器。

    DHCP 服务器用来给 PXE client分配一个 IP 地址,由于是给 PXE client 分配 IP 地址,所以在配置 DHCP 服务器时需要增加相应的设置。

    在 PXE client 的 ROM 中,已经存在了 TFTP Client。PXE Client 通过 TFTP 协议到 TFTP Server 上下载所需的文件。

四,PXE工作流程


PXE工作原理图说明

    1. Client向PXE Server上的DHCP_Server发送IP地址请求消息(广播一个dhcp请求包,此时若有多个DHCP_Server,则可能获取的IP不是预想的网段),DHCP检测Client是否合法(主要是检测Client的网卡MAC地址),如果合法则返回Client的IP地址,同时将启动文件pxelinux.0的位置信息一并传送给Client。


    2. Client
向PXE Server上的TFTP发送获取pxelinux.0请求消息,TFTP接收到消息之后再向Client发送pxelinux.0大小信息,试探Client是否满意,当TFTP收到Client发回的同意大小信息之后,正式向Client发送pxelinux.0。


    3. Client
执行接收到的pxelinux.0文件。


    4. Client
向TFTP发送针对本机的配置信息(记录在TFTP的pxelinux.cfg目录下),TFTP将配置文件发回Client,继而Client根据配置文件执行后续操作。


    5. Client
向TFTP发送Linux内核请求信息,TFTP接收到消息之后将内核文件发送给Client。


    6. Client
向TFTP发送根文件系统请求信息,TFTP接收到消息之后返回Linux根文件系统。


    7. Client
启动Linux内核(启动参数已经在4中的配置文件中设置好了)。


    8. Client
通过NFS下载镜像文件,读取autoyast自动化安装脚本。


   
至此,Client正式进入自动化安装模式开始安装系统直到完成。

 

    pxelinux.0(pxe启动文档):/tftpboot/pxelinux.0就是Bootstrap文件,提供调用启动菜单的作用

五,Ironic配置PXE

1,创建tftp boot目录,修改权限使得ironic用户可写入
sudo mkdir -p /tftpboot
sudo chown -R ironic /tftpboot


2,安装tftp服务和用于pxe引导镜像的syslinux包
RHEL7/CentOS7:
sudo yum install tftp-server syslinux-tftpboot xinetd


3,使用xinetd提供tftp服务,设置第一步创建的tftp引导目录/tftpboot
编辑修改配置文件:/etc/xinetd.d/tftp
service tftp
{
  protocol        = udp
  port            = 69
  socket_type     = dgram
  wait            = yes
  user            = root
  server          = /usr/sbin/in.tftpd
  server_args     = -v -v -v -v -v --map-file /tftpboot/map-file /tftpboot
  disable         = no
  # This is a workaround for Fedora, where TFTP will listen only on
  # IPv6 endpoint, if IPv4 flag is not used.
  flags           = IPv4
}
之后,重启服务:sudo systemctl restart xinetd


4,复制PXE镜像到/tftpboot
RHEL7/CentOS7/SUSE:
sudo cp /usr/share/syslinux/pxelinux.0 /tftpboot


5,若是whole镜像,需要通过PXE-netboot部署,则需要复制chain.c32到/tftpboot
RHEL7/CentOS7/SUSE:
sudo cp /usr/share/syslinux/chain.c32 /tftpboot/


6,若syslinux版本大于4,则还要复制一些模板到/tftpboot
for Ubuntu run:
sudo cp /usr/lib/syslinux/modules/*/ldlinux.* /tftpboot


7,在/tftpboot创建map文件
echo 're ^(/tftpboot/) /tftpboot/\2' > /tftpboot/map-file
echo 're ^/tftpboot/ /tftpboot/' >> /tftpboot/map-file
echo 're ^(^/) /tftpboot/\1' >> /tftpboot/map-file
echo 're ^([^/]) /tftpboot/\1' >> /tftpboot/map-file




参考:

https://docs.openstack.org/ironic/latest/install/configure-pxe.html

http://blog.51cto.com/lavenliu/1629922





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章