使用PXE+NFS EFI引導安裝RHEL6/7以及Kickstart安裝


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
{
        range 192.168.3.10 192.168.3.20;
        option routers 192.168.3.3;
        next-server 192.168.3.3;

        class "pxeclients" {
                match if substring
                        (option vendor-class-identifier, 0, 9) =
                        "PXEClient";
                if option architecture-type = 00:07 or
                        option architecture-type = 00:09 {
                                # EFI BIOS
                                filename "images/shim.efi";
                                # filename "images/BOOTX64.efi";
                        } else {
                                # Legacy non-EFI BIOS
                                filename "pxelinux.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
    menu label ^Install RHEL 7.3 via PXE+Kickstart
    menu default
    kernel images/rhel7/vmlinuz
    append initrd=images/rhel7/initrd.img inst.repo=nfs:192.168.3.3:/mnt/rhel7/

label rhel6+pxe
    menu label ^Install RHEL 6.8 via PXE+Kickstart
    # menu default
    kernel images/rhel6/vmlinuz
    append initrd=images/rhel6/initrd.img repo=nfs:192.168.3.3:/mnt/rhel6/ ip=dhcp lang=en keymap=us

在實現了上面的PXE+NFS引導手動安裝之后,如果想使用Kickstart全自動安裝,則需要對上面的配置稍作修改:
label rhel7+pxe
  ...
    append initrd=images/rhel7/initrd.img inst.ks=nfs:192.168.3.3:/mnt/ks7.cfg

label rhel6+pxe
  ...
    append initrd=images/rhel6/initrd.img  ks=nfs:192.168.3.3:/mnt/ks6.cfg  


/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' {
    linuxefi images/rhel7/vmlinuz inst.repo=nfs:192.168.3.3:/mnt/rhel7/
        initrdefi images/rhel7/initrd.img
}

在實現了上面的PXE+NFS引導手動安裝之后,如果想使用Kickstart全自動安裝RHEL7,可參考如下:
menuentry 'Install RHEL 7.3 via [UEFI] PXE+Kickstart' {
        linuxefi images/rhel7/vmlinuz inst.ks=nfs:192.168.3.3:/mnt/ks7.cfg
        initrdefi images/rhel7/initrd.img
}

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。



免責聲明!

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



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