PXE引導的步驟:
1、開機后選擇網絡啟動,client端向server端的dhcpd發起獲取IP地址的dhcp請求。
2、server端分配IP后,dhcpd會同時根據其配置文件,通過TFTP協議發送引導文件給client端,即bootloader。
3、對於傳統Legacy BIOS,一般使用syslinux提供的pxelinux.0來引導。對於EFI BIOS,需要使用efi文件引導,一般可使用Grub2。為實現UEFI SecureBoot,大多數Linux使用shim.efi嵌套調用grub.efi來引導。
4、傳統Legacy BIOS引導,在pxelinux.0引導后,它會請求並加載server端tftpboot目錄中,與pxelinux.0同目錄下的pxelinux.cfg目錄里的default文件,這個文件就是syslinux的引導配置文件,相當於grub2的grub.cfg。
5、EFI BIOS引導,在shim.efi嵌套引導了grubx64.efi之后,它會請求grubx64.efi同目錄下的grub.cfg配置文件,同時加載顯示引導菜單。而對於RHEL6來說,它並不支持SecureBoot,所以必須要使用grub-efi 0.97來引導,一般是BOOTX64.efi,同時它會請求同目錄下的efidefault配置文件,加載並顯示引導菜單。
6、在pxelinux.0/grub加載了引導配置之后,就可以選擇引導項安裝了,引導項必須要包含內核以及initrd,還可以包含其它的一些引導選項,比如鍵盤、語言、遠程repo、kickstart配置文件等等。
7、內核和initrd加載之后,就可以進到安裝界面正常安裝了。
——————————————————————————————————————
RHEL6/7 PXE安裝測試步驟 (Legacy/EFI)
說明:
RHEL6對EFI支持並不好,所以RHEL6推薦使用Legacy而不是EFI模式來安裝。
RHEL7的grubx64.efi無法引導RHEL6的內核。
VMWare虛擬機在EFI模式下PXE TFTP傳輸速度比Legacy模式慢很多。
本文測試Server端使用RHEL7.3,第二塊網卡ens34用作dhcpd,IP為192.168.3.3。
1、Server端安裝如下軟件包:
yum install xinetd tftp tftp-server dhcpd syslinux
2、配置好本地網卡的IP地址,網段即DHCP服務器的網段,建議使用一張單獨的網卡單獨的網段用作dhcpd服務。
3、編輯/etc/dhcp/dhcpd.conf文件,參考如下:
option architecture-type code 93 = unsigned integer 16;
subnet 192.168.3.0 netmask 255.255.255.0
{
}
4、掛載RHEL7安裝光盤 RHEL-server-7.3-x86_64-dvd.iso 到 /mnt/rhel7,掛載RHEL6安裝光盤 RHEL-server-6.8-x86_64-dvd.iso 到 /mnt/rhel6。
5、准備tftp引導的文件:
mkdir -p /var/lib/tftpboot/pxelinux.cfg
mkdir -p /var/lib/tftpboot/images/rhel7
mkdir -p /var/lib/tftpboot/images/rhel6
cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/
cp /mnt/rhel7/isolinux/isolinux.cfg /var/lib/tftpboot/pxelinux.cfg/default
cp /mnt/rhel7/isolinux/boot.msg /mnt/rhel7/isolinux/vesamenu.c32 /var/lib/tftpboot/
cp
/mnt/rhel7/isolinux/vmlinuz /mnt/rhel7/isolinux/initrd.img /var/lib/tftpboot/images/rhel7/
cp
/mnt/rhel6/isolinux/vmlinuz /mnt/rhel6/isolinux/initrd.img /var/lib/tftpboot/images/rhel6/
touch /var/lib/tftpboot/images/grub.cfg
touch /var/lib/tftpboot/images/efidefault
cp /boot/efi/EFI/redhat/shim.efi /var/lib/tftpboot/images/
cp /boot/efi/EFI/redhat/grubx64.efi /var/lib/tftpboot/images/
cp /mnt/rhel6/EFI/BOOT/BOOTX64.efi /var/lib/tftpboot/images/
如果當前server不是RHEL7的EFI模式安裝的,則需要從RHEL7光盤中提取shim.efi和grubx64.efi:
cp /mnt/rhel7/Packages/grub2-efi-2.02-0.44.el7.x86_64.rpm
/tmp/
cp /mnt/rhel7/Packages/shim-0.9-2.el7.x86_64.rpm
/tmp/
rpm2cpio /tmp/grub2-efi-2.02-0.44.el7.x86_64.rpm | cpio -dimv
rpm2cpio /tmp/shim-0.9-2.el7.x86_64.rpm | cpio -dimv
cp /tmp/boot/efi/EFI/redhat/shim.efi /var/lib/tftpboot/images/
cp /tmp/boot/efi/EFI/redhat/grubx64.efi /var/lib/tftpboot/images/
Server端的tftpboot目錄結構參考如下:
[root@RHEL73 /]# tree /var/lib/tftpboot/
/var/lib/tftpboot/
├── boot.msg
├── images
│
├── BOOTX64.efi
│
├── efidefault
│
├── grub.cfg
│
├── grubx64.efi
│
├── rhel6
│
│
├── initrd.img
│
│
└── vmlinuz
│
├── rhel7
│
│
├── initrd.img
│
│
└── vmlinuz
│
└── shim.efi
├── pxelinux.0
├── pxelinux.cfg
│
└── default
└── vesamenu.c32
4 directories, 13 files
6、編輯xinetd的tftp配置文件,使tftp server生效。
vim /etc/xinetd.d/tftp
將disable = yes 改成 disable = no,保存退出
7、將RHEL安裝光盤的掛載目錄使用NFS export出去。
vim /etc/exports
/mnt/rhel6
*(ro)
/mnt/rhel7
*(ro)
/mnt/
*(ro)
8、重啟必須的服務。
systemctl restart dhcpd
systemctl restart xinetd
systemctl restart nfs
9、對於Legacy BIOS模式PXE引導安裝,client端通過DHCP獲取到地址之后,會通過TFTP協議 get pxelinux.0這個引導文件,然后會繼續get pxelinux.cfg目錄下的default文件,加載之后顯示引導菜單。下面給出pxelinux.cfg/default引導配置文件的樣例。
如果只是想通過把光盤掛載在遠程NFS,通過PXE啟動到安裝界面手動配置安裝,可參考如下:
label rhel7+pxe
label rhel6+pxe
在實現了上面的PXE+NFS引導手動安裝之后,如果想使用Kickstart全自動安裝,則需要對上面的配置稍作修改:
label rhel7+pxe
label rhel6+pxe
/mnt/ks7.cfg和ks6.cfg就是Kickstart的配置文件,由於Kickstart配置比較復雜,不在本文討論范圍內。
10、對於EFI模式PXE引導安裝,RHEL6和RHEL7是不一樣的,這里不推薦RHEL6使用EFI方式安裝。
11、對於EFI模式下的RHEL7 PXE引導,需要dhcpd.conf指定filename "images/shim.efi",以支持UEFI SecureBoot。通過TFTP把shim.efi加載后會繼續嵌套加載引導同目錄下的grubx64.efi,然后grub會獲取同目錄下的grub.cfg以顯示引導菜單。下面給出grub.cfg引導配置文件的樣例:
如果只是想通過把光盤掛載在遠程NFS,通過PXE啟動到安裝界面手動配置安裝RHEL7,可參考如下:
menuentry 'Install RHEL 7.3 via [UEFI] PXE+Kickstart' {
}
在實現了上面的PXE+NFS引導手動安裝之后,如果想使用Kickstart全自動安裝RHEL7,可參考如下:
menuentry 'Install RHEL 7.3 via [UEFI] PXE+Kickstart' {
}
12、對於EFI模式下RHEL6 PXE引導,需要dhcpd.conf指定filename "images/BOOTX64.efi",它其實是grub 0.97。通過TFTP加載了BOOTX64.efi之后它會繼續加載同目錄下的efidefault引導配置文件,並顯示引導菜單。下面給出efidefault引導配置文件的樣例:
如果只是想通過把光盤掛載在遠程NFS,通過PXE啟動到安裝界面手動配置安裝RHEL6,可參考如下:
default=0
timeout=3
title Install RHEL 6.8 via [UEFI] PXE+Kickstart
root (nd)
kernel /rhel6/vmlinuz
repo=nfs:192.168.3.3:/mnt/rhel6/ ip=dhcp lang=en keymap=us
initrd /rhel6/initrd.img
在實現了上面的PXE+NFS引導手動安裝之后,如果想使用Kickstart全自動安裝RHEL6,可參考如下:
default=0
timeout=3
title Install RHEL 6.8 via [UEFI] PXE+Kickstart
root (nd)
kernel /rhel6/vmlinuz
ks=nfs:192.168.3.3:/mnt/ks6.cfg
initrd /rhel6/initrd.img
13、啟動client端機器,使之和server端網絡能通。正常情況下,client端應該能獲取到IP地址,並根據TFTP獲取到的相應的引導文件,引導到RHEL默認的安裝界面,或通過kickstart自動開始安裝了。
14、如果整個過程中有問題,可以查看server端的日志,/var/log/messages,dhcpd每次給PXE分配地址、tftp發送文件給client端,以及client端掛載NFS的目錄,都會在這個文件里面有記錄,一般來說看messages這個文件,大概就能判斷出來問題出在什么地方。
——————————————————————————————————————
Kickstart配置文件相關
RHEL提供了一個圖形化的配置工具system-config-kickstart,默認沒有安裝,需要手動安裝。但是這個工具在編輯硬盤分區時,不支持使用LVM,這個比較麻煩,而對於服務器使用的Linux來說LVM管理磁盤是必不可少的。
不過好在RHEL6/7的kickstart都提供了自動LVM分區,實測同時能在Legacy和EFI模式下正常分區。實際上這個自動分區,跟圖形安裝界面中默認的自動分區方式是完全一樣的。下面是ks文件的引導和自動分區部分的樣例:
# Use NFS installation media
nfs --server=192.168.3.3 --dir=/mnt/rhel7
# System bootloader configuration
bootloader --location=mbr
# Clear the Master Boot Record
zerombr
# Partition clearing information
clearpart --all --initlabel
# Disk partitioning information
autopart
如果想生成當前系統的配置,可以使用命令 system-config-kickstart --generate ks.cfg,這會在當前目錄生成一個ks.cfg的配置,當然生成的這個基本上是沒法直接用的,還是需要用圖形界面的system-config-kickstart根據具體需求修改剛生成的ks.cfg。
不管用哪種方式安裝完成RHEL后,其安裝程序anaconda都會自動生成一個kickstart的配置文件,位於/root/anaconda-ks.cfg。