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





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