測試環境如下
PXE Server : CentOS6.8 x64
PXE Client (UEFI PXE Boot) : CentOS 7 ARM64
同樣適用於 RedHat RHEL
什麼是 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 可以進行網路的存取進一步安裝作業系統.
EFI OS
支援 ARM 處理器的 CentOS 7 , 有支援 EFI PXE Boot 支援 EFI 開機.
要怎麼判斷你的作業系統是否支援 EFI Boot 的方式最直接的方式是直接看光碟中是否包含 EFI Boot image 比如 CentOS 7 的光碟中就有一個資料夾為 /EFI/BOOT 這就是支援了 EFI Boot 的証明.
環境需求 ,tftp server 的設定 ,安裝媒體(FTP,NFS,HTTP) ,請自行參考 PXELinux – https://benjr.tw/83 .
DHCP Server
以前在設定 Legacy PXE 時在 /etc/dhcpd.conf 設定中我們指定了 pxelinux.0 這個檔案當作 PXELinux 的前導程式.但他不是 EFI 的 Application 所以我們需要 UEFI 的 PXE 開機的前導程式.
在 CentOS 光碟中 /EFI/BOOT 目錄中可以找到.
[root@localhost ~]# ll /mnt/EFI/BOOT/ total 2644 -r--r--r-- 1 root root 888808 Apr 14 06:30 BOOTAA64.EFI dr-xr-xr-x 2 root root 4096 Apr 14 06:30 fonts -r-xr-xr-x 1 root root 899584 Apr 14 06:30 grubaa64.efi -r--r--r-- 1 root root 1433 Apr 14 06:30 grub.cfg -r--r--r-- 1 root root 903464 Apr 14 06:30 MokManager.efi -r--r--r-- 1 root root 1111 Apr 14 06:30 TRANS.TBL
[root@localhost ~]# file /mnt/EFI/BOOT/grubaa64.efi EFI/BOOT/grubaa64.efi: PE32+ executable (EFI application)
grubaa64.efi 是我們開機所需要的 PE32+ executable EFI application ,而設定檔是 grub.conf 這兩個檔案皆需要複製到 /var/lib/tftpboot 目錄下(請依據你的 tftpboot 目錄存放).
[root@localhost ~]# cp /mnt/EFI/BOOT/* /var/lib/tftpboot
grub.conf 預設檔案格式如下(只保留 menuentry – Install CentOS Linux AltArch 7 ).
[root@localhost ~]# cat /var/lib/tftpboot/grub.cfg set default="1" function load_video { if [ x$feature_all_video_module = xy ]; then insmod all_video else insmod efi_gop insmod efi_uga insmod ieee1275_fb insmod vbe insmod vga insmod video_bochs insmod video_cirrus fi } load_video set gfxpayload=keep insmod gzio insmod part_gpt insmod ext2 set timeout=60 ### END /etc/grub.d/00_header ### search --no-floppy --set=root -l 'CentOS 7 aarch64' ### BEGIN /etc/grub.d/10_linux ### menuentry 'Install CentOS Linux AltArch 7' --class red --class gnu-linux --class gnu --class os { linux /images/pxeboot/vmlinuz inst.repo=nfs:192.6.1.1:/var/ftp/ ip=dhcp initrd /images/pxeboot/initrd.img }
設定檔的幾個重點:
set timeout=60, set default=”1″
如果在設定時間內沒有做選擇,系統會依據 default 所設定的時間進入預設的選項 (單位為秒).
menuentry
PXE 安裝選項,需把 Lnux (kernel-vmlinuz) , initrd 的檔案複製到路徑 tftp (/tftpboot) + DHCP filename (linux-install).
menuentry 使用請參考
menuentry title [--class=class …] [--users=users] [--unrestricted] [--hotkey=key] { command; … }
- –class option may be used any number of times to group menu entries into classes. Menu themes may display different classes using different styles.
- –users option grants specific users access to specific menu entries. See Security.
- –unrestricted option grants all users access to specific menu entries. See Security.
- –hotkey option associates a hotkey with a menu entry. key may be a single letter, or one of the aliases ‘backspace’, ‘tab’, or ‘delete’.
Linux 參數:
/images/pxeboot/vmlinuz – Linux 核心
inst.repo – 指定安裝來源
ip=dhcp – 使用 DHCP
如果選單的項目太多時,可以使用 submenu 的方式.
submenu 'Troubleshooting -->' { menuentry 'Install CentOS Linux AltArch 7 in basic graphics mode' --class red --class gnu-linux --class gnu --class os { linux /images/pxeboot/vmlinuz inst.stage2=hd:LABEL=CentOS\x207\x20aarch64 nomodeset initrd /images/pxeboot/initrd.img } menuentry 'Rescue a CentOS Linux AltArch system' --class red --class gnu-linux --class gnu --class os { linux /images/pxeboot/vmlinuz inst.stage2=hd:LABEL=CentOS\x207\x20aarch64 rescue initrd /images/pxeboot/initrd.img } }
接下來是 DHCP 的設定檔 /etc/dhcp/dhcpd.conf 把開機前導指定為 grubaa64.efi
[root@localhost ~]# vi /etc/dhcp/dhcpd.conf #ddns-update-style interim; ddns-update-style none; ignore client-updates; allow booting; allow bootp; option space PXE; option PXE.mtftp-ip code 1 = ip-address; option PXE.mtftp-cport code 2 = unsigned integer 16; option PXE.mtftp-sport code 3 = unsigned integer 16; option PXE.mtftp-tmout code 4 = unsigned integer 8; option PXE.mtftp-delay code 5 = unsigned integer 8; option arch code 93 = unsigned integer 16; subnet 192.6.1.0 netmask 255.255.255.0 { range 192.6.1.50 192.6.1.250; option routers 192.6.1.1; option subnet-mask 255.255.255.0; class "pxeclients" { match if substring (option vendor-class-identifier, 0, 9) = "PXEClient"; next-server 192.6.1.1; filename "grubaa64.efi”; } }
在整個 DHCP 設定檔中,最重要的就是 filename “grubaa64.efi” 整個網路開機顯示畫面,流程控制都由 grubaa64.efi 來管理.接下來就是將具有 UEFI PXE 功能網路卡的設定為第一順位的開機次序.
The PXE clients
將具有 UEFI PXE 功能網路卡的 client 開機.
關於 PXE , UEFI PXE 可以參考官方網站的說明 https://access.redhat.com/documentation/zh-TW/Red_Hat_Enterprise_Linux/7/html/Installation_Guide/chap-installation-server-setup.html