33,697 瀏覽數

Linux PXE NetBoot

前言

在安裝作業系統時最常見的方式就是透過 CD/DVD 開機並透過它為安裝媒體的來源,而這邊所說的 PXE (Preboot eXecution Environment) 則是透過網路卡開機的方式進行開機與安裝作業系統.

一開始可能會覺得怎麼有可能透過這樣的方式來進行安裝作業系統,他是怎麼做到的.先說說 PXE 的歷史,他是由 Intel 所提出,最主要的目的就是希望網卡能像是 其他裝置如:硬碟,光碟,磁碟機一樣可以擔任開機的動作.所以我們主機的 BIOS 必須要支援從網卡開機.

在網卡上有一塊 ROM (firmware) 裡面存放了一些基本的網路協定,透過這些協定使得 PXE 可以進行網路的存取,進一步取得網路上的資源.

  1. Internet Protocol (IP)  
  2. User Datagram Protocol (UDP)  
  3. Dynamic Host Configuration Protocol (DHCP)  
  4. Trivial File Transfer Protocol (TFTP)

PXE 是作業系統前的一個作業環境,所以他最主要的工作就是將任何的作業系統載入.多數的網卡都支援 PXE 功能,有些甚至還支援到 iSCSI Boot 的功能.
先來說明一下 PXE Boot 步驟

  1. BIOS 由 PXE boot ROM 開機.
  2. PXE boot ROM 的第一步就是透過 DHCP 取得 IP.
  3. 在獲得 DHCP 分配的 IP 以及其他選項參數,裡面包括 pxelinux.0 ( 這個檔案由 Syslinux 套件提供) 是 PXE 開機的前導程式.
  4. 接下來 PXE 會透過 TFTP 協定 (PXE ROM 只能使用該協定) 去下載該檔案 pxelinux.0
  5. 當 PXE 成功下載到 pxelinux.0 檔案, 主控權就交給 pxelinux.0 前導程式,前導程式啟動之後會去讀取位於 /tftpboot/linux-install/pxelinux.cfg/ 目錄下的 PXE 開機設定檔.
  6. 如果 PXE ROM 無法完成上序的步驟,有些 BIOS 就會依序啟動其他可以開啟的裝置.

參考網站 http://pxe.dev.aboveaverageurl.com/index.php/PXE_Booting

PXE 環境需求

PXE 環境需求為一台具有以下服務的系統,作業系統我選擇的是 Red Hat Enterprise Linux 3 版本,以及一台具有網路開機 PXE 功能的機台.
pxe_boot04

PXE 最主要透過兩個 Protocol 來進行網路資源的存取,DHCP 和 TFTP, 透過 DHCP 讓 PXE 獲得 IP 以及得知開機前導程式 (bootstrap program) pxelinux.0 的網路位置,而 TFTP 則是讓 PXE 可以下載該前導程式. 其他具有 DHCP 和 tftp 服務的 Linux 皆可以擔任此項工作.

  1. DHCP Server
    編輯 DHCP 設定檔

    [root@benjr ~]# vi /etc/dhcpd.conf
    # ddns-update-style interim
    ddns-update-style none;
    ignore client-updates;
    allow booting;
    allow bootp;
    class "pxeclients" {
    match if substring(option vendor-class-identifier, 0, 9) = "PXEClient";
    next-server 192.10.0.1;
    filename "linux-install/pxelinux.0";
    }
    subnet 192.10.0.0 netmask 255.255.255.0 {
    range 192.10.0.150 192.10.0.180;
    option broadcast-address 192.10.0.255;
    option routers 192.10.0.1;
    option subnet-mask 255.255.255.0;
    option domain-name-servers 192.10.0.1;
    }
    
    • match if substring(option vendor-class-identifier, 0, 9) =PXEClient
      這一個選項會檢查是否為實體的網路卡,如果你是準備給 virtual machine 時可以移除這一個選項.
    • next-server
      就是你的 tftp server 所在的位置 (DHCP TFTP 可以在同一台伺服器上).我這邊的例子使用 192.10.0.1 至於其他有關於 DHCP 的設定說明起自行參考 DHCP 的官方網站 http://www.isc.org
    • filename “linux-install/pxelinux.0”
      在整個 DHCP 設定檔中,最重要的就是 filename “linux-install/pxelinux.0” 整個網路開機顯示畫面,流程控制都由 pxelinux.0 來管理,關於更多有關於 pxelinux.0 ,請參考 PXELinux 的官方網頁 http://syslinux.zytor.com/wiki/index.php/PXELINUX
    • option domain-name-servers 192.10.0.1
      為非必要選項,如果你有設定就不用再指定 DNS 位址.但是相對應的 DNS(Bind Server)也要設定.

    並確定 DHCP 的服務已經開啟

    [root@benjr ~]# chkconfig dhcpd on
    [root@benjr ~]# service dhcpd start
    
  2. TFTP Server 的設定
    編輯 tftp 設定檔

    [root@benjr ~]# vi /etc/xinetd.d/tftp
    service tftp
    {
    socket_type = dgram
    protocol = udp
    wait = yes
    user = root
    server = /usr/sbin/in.tftpd
    server_args = -s /tftpboot
    disable = no
    per_source = 11
    CPUS = 100 2
    flags = IPv4
    

    將 disable 設定成為 no 即可將 server 開啟.或者你可以用下面的指令將 tftp 功能開啟

    [root@benjr ~]# chkconfig tftp on
    

    啟動 tftp 服務

    [root@benjr ~]# service xinetd restart
    

    在使用時最常遇到的錯誤大概都是在 DHCP tftp 設定路徑上面的錯誤,關於如何除錯 TFTP 請參考 tftp 常見的錯誤訊息 http://benjr.tw/94695

  3. PXE 設定檔
    PXE 由開機前導程式 pxelinux.0 啟動之後會去讀取 PXE 開機的設定檔 /tftpboot/linux-install/pxelinux.cfg/ 目錄下的檔案.系統會找是不是有跟他相對應的 1.UUID 2.MAC address 3.IP address 如果都沒有才從讀取 default 這個檔案. 通常我沒有要針對不同的系統設定不同的設定檔,所以通常直接編輯 /tftpboot/linux-install/pxelinux.cfg/default (這個檔案定義了與 PXE 的 Clients 如何透過鍵盤來選擇對應的動作)

    編輯 /tftpboot/linux-install/pxelinux.cfg/default

    [root@benjr ~]# vi /tftpboot/linux-install/pxelinux.cfg/default
    default 0
    timeout 2000
    F1 msgs/boot.msg
    F2 msgs/expert.msg
    prompt 1
    display msgs/boot.msg
    label 0
    localboot 1
    label 1
    kernel as3u2/vmlinuz
    append initrd=as3u2/initrd.img ramdisk_size=65536
    

    設定檔說明:

    • default 0
      如果使用者不選擇安裝哪一種 OS 這邊就可以設定預設安裝哪一個 OS,default 0 的意是就是使用 label 0 的設定.
    • timeout 2000
      預設安裝生效時間為 2000(200秒).
    • F1 msgs/boot.msg
    • F2 msgs/expert.msg
      這邊是用來定義功能鍵 F1 至 F12 所對應要顯示的文字檔案 F1 – boot.msg , F2 – expert.msg.
    • prompt 1
      效果不明????
    • display msgs/boot.msg
      boot.msg 這個檔案就是PXE 開機所顯示的第一個提示訊息.後面會在編譯.
    • label 0
      localboot 1
      label 後面接的字串就是使用者可以透過鍵盤來指定 PXE 後續要做的動作 (label 0 就是按鍵 0 ). localboot 1 定義了使用系統上的硬碟來直接開機.
    • label 1
      kernel as3u2/vmlinuz
      append initrd=as3u2/initrd.img ramdisk_size=65536
      這裡定義安裝作業系統時所需的 Kernel 與 initrd ,後面會將作業系統開機所需檔案放置到指定的位置上.

    編輯 /tftpboot/linux-install/msgs/boot.msg
    這個檔案就是 PXE Clients 經由 PXE 開機時所看到的提示訊息.

    [root@benjr ~]#vi /tftpboot/linux-install/msgs/boot.msg
    

    如果你的系統有多個網路布,還需要在 /etc/rc.d/rc.local 必須加入下面這一行

    [root@benjr ~]# vi /etc/rc.d/rc.local
    route add -host 255.255.255.255 eth0
    
  4. FTP , NFS , HTTP
    後續的安裝則需要透過 FTP , NFS , HTTP .有提供此服務的 Linux 皆可以擔任此項工作.

    RedHat Linux 透過 PXE 來安裝作業系統時可以透過 3 種網路媒體 FTP, NFS , HTTP 來做安裝的來源.這邊簡單介紹一下怎麼針對這 3 種安裝媒體來做設定.
    pxe_boot07
    複製 RedHat 光碟所有的內容 (這邊我是用 RedHat Enterprise Linux Advanced server 3.0 Update 2 為範例),檔案放置在 FTP 的預設路徑 /var/ftp

    [root@benjr ~]# mkdir /var/ftp/as3u2
    [root@benjr ~]# cp -rf /mnt/cdrom/* /var/ftp/as3u2/
    

    由 FTP (vsftp) 來安裝
    請確定 ftp 的服務已經開啟,ftp 預設路徑為 /var/ftp ,所以沒有其他設定.

    [root@benjr ~]# chkconfig vsftpd on
    [root@benjr ~]# service vsftpd restart
    

    由 NFS 來安裝
    編輯 /etc/exports 並將 /var/ftp/as3u2 目錄分享(因為我們將把光碟內的檔案放在此目錄下,此為FTP預設的分享目錄)

    [root@benjr ~]# vi /etc/exports
    /var/ftp/ 192.10.0.*(ro,all_squash)
    

    並確定 NFS 的服務已經開啟

    [root@benjr ~]# chkconfig nfs on
    [root@benjr ~]# service nfs start
    

    由 HTTP 來安裝
    編輯 /etc/httpd/conf/httpd.conf 並將 DocumentRoot 設為 /var/ftp (因為我們將把光碟內的檔案放在此目錄下,此為 FTP 預設的分享目錄)

    [root@benjr ~]# vi /etc/httpd/conf/httpd.conf
    DocumentRoot /var/ftp
    

    並確定 HTTP 的服務已經開啟

    [root@benjr ~]# chkconfig httpd on
    [root@benjr ~]# service httpd restart
    
  5. 所需的 Kernel 與 initrd
    還記得剛剛編輯 /tftpboot/linux-install/pxelinux.cfg/default 最後有設定 as3u2 vmlinuz 與 initrd ,因為 PXE 開機後所需的檔案是透過 tftp 協定傳送,檔案需儲存在 /tftpboot/linux-install/,所以需要將開機 RedHat Enterprise Linux Advanced server 3.0 Update 2 所需的 kernel 和 initrd 檔案複製到 “/tftpboot/linux-install/as3u2 目錄下

    [root@benjr ~]# mkdir /tftpboot/linux-install/as3u2
    [root@benjr ~]# cp /var/ftp/as3u2/image/pxeboot/vmlinuz /tftpboot/linux-install/as3u2
    [root@benjr ~]# cp /var/ftp/as3u2/image/pxeboot/initrd.img /tftpboot/linux-install/as3u2
    

The PXE clients

  1. 將具有 PXE 功能網路卡的 client 開機.
  2. 請先確定 PXE 功能已經在 BIOS 下開啟,並設為第一開機順位,並從 PXE 開機
    pxe_boot05
  3. 選擇你想要安裝的作業系統,如果你有參數可以在這邊加入.
    pxe_boot02
    Begin Downloading linux kernel image and initrd image ..
    此時就開始安裝作業係統
  4. 你可以選擇 FTP , NFS 或 HTTP 等方式來安裝
  5. 至於 server IP 就是 192.10.0.1,我將光碟內容都放在 192.10.0.1:/var/ftp/ 目錄下
    至於目錄根據不同的方式有所不同
    使用 FTP 方式的目錄:/as3u2
    使用 NFS 方式的目錄:/var/ftp/as3u2 (只有透過NFS才會有圖形界面的安裝)
    使用 HTTP 方式的目錄 : /as3u2
  6. 接下來的安裝過程就和一般光碟安裝一樣.

其他 Linux Distribution

其他 Linux Distribution , Turbo Linux , SuSE Linux Enterprise Server , Ubuntu , VMware , XenServer , RedHat , FreeBSD , Windows 請參考 http://benjr.tw/15426

PXE 延伸閱讀

UEFI 與 IPV6 PXE boot 請參考 – http://benjr.tw/16137

34 Replies to “Linux PXE NetBoot”

  1. 自動參照通知: ARM UEFI PXE – Benjr.tw

  2. 自動參照通知: PXE Boot options – inst.xdriver – Benjr.tw

  3. 自動參照通知: PXE Boot options – inst.dd – Benjr.tw

  4. 自動參照通知: SLES12 SP2 PXE 安裝 – Benjr.tw

  5. 自動參照通知: VMware Kickstart – Benjr.tw

  6. 自動參照通知: iPXE – Benjr.tw

  7. 自動參照通知: FreeBSD Pxeboot & install – Benjr.tw

  8. 自動參照通知: IPV6 PXE boot – Benjr.tw

  9. 自動參照通知: 就是要上網 – 透過手機分享多人上網 – Benjr.tw

  10. 自動參照通知: Pre-boot from Intel Ethernet | Benjr.tw

  11. 自動參照通知: RHEL 7 – PXE Boot | Benjr.tw

  12. 自動參照通知: KVM -Virtual Machine Creation | Benjr.tw

  13. 自動參照通知: ubuntu uefi pxe | Benjr.tw

  14. 自動參照通知: Ubuntu + TFTP | Benjr.tw

  15. 自動參照通知: DOS + PXE | Benjr.tw

  16. 自動參照通知: EFI + Legacy PXE Boot | Benjr.tw

  17. 自動參照通知: SuSE 11 – UEFI PXE Boot | Benjr.tw

  18. 自動參照通知: uEFI PXE Boot | Benjr.tw

  19. 自動參照通知: RHEL 6 – UEFI PXE Boot | Benjr.tw

  20. 自動參照通知: Wordpress 單篇文章分頁閱讀 | Benjr.tw

  21. 自動參照通知: RHEL6 – 文字安裝模式 | Benjr.tw

  22. 自動參照通知: VMware esxi 無 Video (螢幕)輸出的安裝方式 | Benjr.tw

  23. 自動參照通知: RHEV3 – PXE 安裝 | Benjr.tw

  24. 自動參照通知: XEN – RHEL5 | Benjr.tw

  25. 自動參照通知: KVM – RHEL5 update4 | Benjr.tw

  26. 自動參照通知: XenServer – RHEL (Red Hat Enterprise Linux) 的圖形安裝介面 | Benjr.tw

  27. 自動參照通知: XenServer – Other install media | Benjr.tw

  28. 自動參照通知: VMware – PXE | Benjr.tw

  29. 自動參照通知: WinPE + RIS / WDS | Benjr.tw

  30. 自動參照通知: Install Ubuntu 12.10 with PXE | Benjr.tw

  31. 自動參照通知: DOS | Benjr.tw

  32. 自動參照通知: Installation via Serial Port Console | Benjr.tw

  33. 自動參照通知: DOS PXEboot | Benjr.tw

  34. 自動參照通知: PXE Server | Benjr.tw

發表迴響