4,755 瀏覽數

SuSE 11 – UEFI PXE Boot

什麼是 uEFI 什麼是 PXE 可以參考下列聯結

  • uEFI
    Extensible Firmware Interface (EFI) 的功能就類似傳統 BIOS ,他是 OS 與硬體之間溝通介面. 不過相較於傳統的 BIOS EFI 他的架構更模組化,功能更強大.EFI 的架構是由 Intel 提出的, 目前是交由 Unified EFI Forum 來管理.也就是我們現在所稱的 Unified Extensible Firmware Interface (UEFI)
  • PXE
    PXE (Preboot eXecution Environment) 是透過網路的方式進行安裝作業系統,在網卡上有一塊 ROM(firmware) 裡面存放了一些基本的網路協定如:Internet Protocol (IP), User Datagram Protocol (UDP), Dynamic Host Configuration Protocol (DHCP) 以及 Trivial File Transfer Protocol (TFTP) 透過這一些協定使得 PXE 可以進行網路的存取進一步安裝作業系統.

IA64 的 RHEL 是有支援 EFI PXE Boot 的功能,但是我們常用的 RHEL 3 / 4 / 5 – x86 / x64 的系統並不支援 EFI boot ,不過新版的 RHEL6 和 SLES11 SP1 x64 (目前都看到的只有 x64 的系統有支援 EFI, i386/x86 的光碟找不到支援 EFI 開機的檔案) 都將支援 EFI 開機.

SLES11

sles11_efi

要怎麼判斷 SLES 作業系統是否支援 EFI Boot 的方式最直接的方式是直接看光碟中是否包含 EFI Boot image 比如 SLES11 的光碟中就有一個資料夾為 /boot/x86_64 裡面有一個檔案 efi 這就是支援了 EFI Boot 的証明.

那問題來了傳統 Legacy 的 PXE 設定是否要修改.答案是 "是的" 而且要從 "pxelinux.0" 開始著手.關於 PXE Linux 基本設定有興趣的可以參考這一篇文章 http://benjr.tw/83
因為試過 RHEL 6 其結果是不行的,所以試試 SLES11 是否可以,大部分的步驟如同前面的設定,最大的不同是使用了 SLES11 的 EFI 的前導程式.在 SLES11 SP1 光碟中 F:\boot\x86_64\efi 裡面有我們需要的 PE32+ executable EFI application

一開始我以為 efi 這個檔案就是 PE32+ executable EFI application 檔案,但結果 PXEBoot 時系統卻顯示 "pxe nbp(Network Bootstrap Program) is too big to fit in base memory" 檢查之下才發現 efi 他是 ISO 檔.透過 mount -o loop 可以看到四個檔

[root@PXE linux-install]# file efi
efi: setgid x86 boot sector, mkdosfs boot message display, code offset 0x3c, OEM-ID " mkdosfs", sectors/cluster 4, root entries 512, sectors 54684 (volumes <=32 MB) , Media descriptor 0xf8, sectors/FAT 54, heads 4, physical drive 0xff, physical drive 0x7f, serial number 0x4bf5234f, label: " ", FAT (16 bit)
[root@PXE linux-install]# mount -o loop efi /mnt 
[root@PXE linux-install]# ll /mnt/efi/boot/
total 26834
-rwxr-xr-x 1 root root 241318 May 20 11:55 bootx64.efi
-rwxr-xr-x 1 root root 512 May 20 11:55 elilo.conf
-rwxr-xr-x 1 root root 23999623 May 20 11:55 initrd
-rwxr-xr-x 1 root root 3231872 May 20 11:55 linux 
[root@PXE linux-install]# file /mnt/efi/boot/bootx64.efi
bootx64.efi: PE32+ executable (EFI application)
  • bootx64.efi – efi  application
  • elilo.conf – configuration
  • initrd – RAM Disk
  • linux – Linux Kernel

bootx64.efi 才是我們開機所需要的 PE32+ executable EFI application 不過檔案 elilo.conf 我們也需要將他複製到 /tftpboot/linux-install 目錄下.

[root@PXE linux-install]# cp /mnt/efi/boot/* /tftpboot/linux-install/

重點是要修改一下 /etc/dhcpd.conf 把開機前導改成為 bootx64.efi 

[root@PXE linux-install]# cat /etc/dhcpd.conf
ddns-update-style none;
ignore client-updates;
allow booting;
allow bootp;
subnet 192.8.1.0 netmask 255.255.255.0 {
range 192.8.1.50 192.8.1.250;
#option broadcast-address 192.8.1.1;
option routers 192.8.1.254;
option subnet-mask 255.255.255.0;
option domain-name-servers 10.36.3.19, 10.36.3.30;
next-server 192.8.1.1;
filename "linux-install/bootx64.efi";
#filename "linux-install/pxelinux.0";
}

這樣我們就可以透過 EFI PXEBoot 啟動 SLES11 SP1,沒錯也只能啟動 SLES11 SP1 其他的還不行.也沒辦法像是 Legacy 的方式做出選單.

我們可以設定 elilo.conf 以及 menu.msg(預設沒有需要自己建立)建立出像是 Legacy PXE 的選單.

elilo.conf 就是定義安裝所對應的開機檔.

[root@localhost linux-install]# cat elilo.conf
prompt
message=menu.msg
timeout=0

image=/linux-install/rhel6-u1-64-uefi/vmlinuz
    label=100
    description = "Redhat 6.1 uefi Installation"
    initrd=/linux-install/rhel6-u1-64-uefi/initrd.img

image=/linux-install/rhel6-u2-64-uefi/vmlinuz
    label=101
    description = "Redhat 6.2 uefi Installation"
    initrd=/linux-install/rhel6-u2-64-uefi/initrd.img

image=/linux-install/sles11-sp1-64-uefi/linux
    label=200
    description = "Suse 11.1 uefi Installation"
    initrd=/linux-install/sles11-sp1-64-uefi/initrd

image=/linux-install/sles11-sp2-64-uefi/linux
    label=201
    description = "Suse 11.2 uefi Installation"
    initrd=/linux-install/sles11-sp2-64-uefi/initrd

menu.msg 檔主要是顯示資訊給安裝者看我們有哪些安裝選項可供選擇,真正定義的還是存放在 elilo.conf 裡.

[root@localhost linux-install]# cat menu.msg

Enter number of the Operation System you wish to install:
100. RHEL6 U1 64bit        /var/ftp/rhel6-u1-64-uefi
101. RHEL6 U2 64bit        /var/ftp/rhel6-u2-64-uefi
200. SLES11 SP1 64bit      /var/ftp/sles11-u1-64-uefi
201. RHEL6 AS U1 64bit     /var/ftp/sles11-u2-64-uefi

10 個網友的想法 “SuSE 11 – UEFI PXE Boot

  1. 自動參照通知: Ubuntu Legacy + EFI PXE | Benjr.tw

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

    • RHEL6 與 SLES11 的 bootx64.efi 的確不同.

      目前試過SLES11 /boot/x86_64/efi 檔案是可以使用的.

      [root@gulf x86_64]# mount -o loop /SLES11_DVD/boot/x86_64/efi /mnt
      [root@gulf x86_64]# ll /mnt/efi/boot/
      total 36946
      -rwxr-xr-x 1 root root   245084 Feb 15  2012 bootx64.efi
      -rwxr-xr-x 1 root root      512 Feb 15  2012 elilo.conf
      -rwxr-xr-x 1 root root 33766306 Feb 15  2012 initrd
      -rwxr-xr-x 1 root root  3815568 Feb 15  2012 linux
      

      主要 使用 bootx64.efi 以及 elilo.conf 即可,加上自己編輯 menu.msg 即可使用 EFI 開機.

    • 最近給他試了一下,的確是可行的.重點如下:

      if option arch = 00:07 {
      filename “linux-install/BOOTX64.efi";
      } else {
      filename “linux-install/pxelinux.0″;
      }

      全文請參考 http://benjr.tw/16194

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

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

  5. Fedora 13 PXEBoot (EFI + Legacy)
    最近手頭是有 Fedora 13 所以又再試了一次 Fedora 的官方網站的多種選擇的 PXEBoot (EFI + Legacy) 的開機方式. https://fedoraproject.org/wiki/QA:Testcase_UEFI_pxeboot 不過還是很失望的卡在 DHCP 的設定, Fedora 13 的 DHCP 並不認識 option arch .所以 DHCP Server 無法啟動.

    在 Fedora 文章中並無說明 OS 以及 DHCP 版本,所以無從查出.

發表迴響