iPXE的使用介紹


概述

PXE是Intel提出的,用以網卡啟動。通過DHCP獲取IP以及TFTP獲取啟動文件。
gPXE/iPXE是PXE的擴展版,支持HTTP等多種獲取手段。iPXE由gPXE分支而來(fork),功能更豐富。

iPXE的使用

之前我們使用PXE的時候,要在DHCP配置中設置啟動文件為pxelinux.0

    1. # Subnet for new 100 subnet
    2. subnet 172.16.100.0 netmask 255.255.254.0 {
    3. range 172.16.101.230 172.16.101.240;
    4. option subnet-mask 255.255.254.0;
    5. option routers 172.16.100.1;
    6. next-server 172.16.10.31;
    7. filename "pxelinux.0";
    8. }

如果使用的是gpxe,那么這個文件名就是 gpxelinux.0
這兩個文件都可以在你syslinux的安裝包中找到。

iPXE就沒那么好了,需要自己下載。
下載鏈接是 http://boot.ipxe.org/undionly.kpxe
然后設定DHCP配置文件

    1. next-server 172.16.10.31;
    2. filename "undionly.kpxe";

But… 問題來了,你會發現iPXE的啟動界面是一個死循環。

如何打破這個死循環呢?

官方提供了2個辦法,一個是改DHCP的配置,貌似很麻煩,我們還是采用第二種辦法,重新編譯。

    1. git clone git://git.ipxe.org/ipxe.git
    2. cd ipxe/src
    3. cat <<EOF >> demo.ipxe
    4. #!ipxe
    5. dhcp
    6. chain http://boot.ipcpu.com
    7. EOF
    8. make bin/undionly.kpxe EMBED=demo.ipxe

其中的chain需要填寫啟動網址。
生成新的undionly.kpxe,我們把它覆蓋掉原先的文件。

接下來,我們就要處理啟動網站了。

啟動網站的處理

啟動網站需要http服務器,這里我們使用了nginx。

首先我們寫入首頁文件index.html

    1. #!ipxe
    2. echo
    3. echo Booting boot.oskarcz.net for ${hostname}
    4. set 210:string http://boot.ipcpu.com/
    5. set 209:string pxelinux.cfg/default
    6. set 208:hex f1:00:74:7e
    7. set filename ${210:string}pxelinux.0
    8. chain ${filename} ||
    9. echo Booting ${filename} failed, dropping to shell
    10. shell
    11. #@加載http://boot.ipcpu.com/pxelinux.0文件
    12. #@加載http://boot.ipcpu.com/pxelinux.cfg/default 配置

然后這里就和普通的PXE一樣了,唯一不同的是協議全部是HTTP。
配置文件pxelinux.cfg/default

    1. ######################################
    2. #使用vesamenu.c32菜單
    3. DEFAULT res/vesamenu.c32
    4. PROMPT 0
    5. MENU TITLE PXE NETBOOT TOOLKITS
    6. #背景圖片
    7. MENU BACKGROUND res/back.png
    8. #字體設定
    9. FONT res/myfont.psf
    10. #超時設定
    11. TIMEOUT 300
    12. MENU VSHIFT 6
    13. #超時默認啟動hardboot
    14. ONTIMEOUT hardboot
    15. #####custom6.6
    16. LABEL centos66
    17. MENU LABEL ^1 -- Custom CentOS6.6 64bit Setup
    18. linux http://boot.ipcpu.com/pxe/centos6/isolinux/vmlinuz
    19. append initrd=http://boot.ipcpu.com/pxe/centos6/isolinux/initrd.img ks=http://boot.ipcpu.com/secret/ks/centos66.cfg ksdevice=bootif ip=172.1.30.250 netmask=255.255.0.0 gateway=172.1.1.1 dns=172.1.10.1,172.1.10.2 hostname=IPCPU-30-250
    20. ######boot from harddisk
    21. LABEL hardboot
    22. MENU LABEL ^H -- Boot from the first Hard Disk
    23. kernel res/chain.c32 hd0

界面截圖

QA

QA-1

Q:如何實現公網上的安裝服務?
A:我們看到iPXE配置里寫的是一個網址,將網站發布出去就可以利用公網安裝了。http://boot.oskarcz.net/ 以及 https://netboot.xyz/boot-ipxe/index.html 就是這樣一種服務

QA-2

Q:如何使用公網上的安裝服務
A:在iPXE啟動界面中按下Ctrl+B,中斷默認啟動方式,然后輸入以下內容,即可使用。

    1. iPXE> dhcp
    2. iPXE> chain http://boot.oskarcz.net

QA-3

Q:如何實現http://boot.oskarcz.net/這種方式呢,瀏覽器訪問時顯示幫助文件。
A:這里是采用nginx對UserAgent進行判斷,UA為iPXE時,根目錄是腳本目錄,其他UA時,根目錄是幫助文件。

QA-4

Q:gPXE有什么缺點呢?
A:gPXE已經停止開發,沒有技術支持了,並且在實際使用中,發現VMWARE ESXi使用gpxe后,下載配置文件特別慢,無法忍受。

參考資料

http://ipxe.org/howto/chainloading
http://boot.oskarcz.net/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM