1. 程式人生 > 其它 >利用 PXE 實現自動化系統部署

利用 PXE 實現自動化系統部署

一、PXE介紹

1.PXE:Preboot Excution Environment,預啟動執行環境,是由Intel公司研發,基於Client/Server的網 絡模式,支援遠端主機通過網路從遠端伺服器下載映像,並由此支援通過網路啟動作業系統,可以引導 和安裝Windows,linux等多種作業系統

2.利用PXE實現自動化安裝流程

 

 3.PXE工作原理

1. Client向PXE Server上的DHCP傳送IP地址請求訊息,DHCP檢測Client是否合法(主要是檢測Client
的網絡卡MAC地址),如果合法則返回Client的IP地址,同時將啟動檔案pxelinux.0的所在TFTP服務
器地址資訊一併傳送給Client
2. Client向TFTP伺服器傳送獲取pxelinux.0請求訊息,TFTP伺服器接收到訊息之後,向Client傳送 pxelinux.0大小資訊,試探Client是否滿意,當TFTP收到Client發回的同意大小資訊之後,正式向 Client傳送pxelinux.0 3. Client執行接收到的pxelinux.0檔案,並利用此檔案啟動 4. Client向TFTP 伺服器傳送請求針對本機的配置資訊檔案(在TFTP 伺服器的pxelinux.cfg目錄下), TFTP伺服器將啟動選單配置檔案發回Client,繼而Client根據啟動選單配置檔案執行後續操作 5. Client根據啟動選單配置檔案裡的資訊,向TFTP傳送Linux核心和initrd檔案請求資訊,TFTP接收到 訊息之後將核心和initrd檔案傳送給Client
6. Client向TFTP傳送根檔案請求資訊,TFTP接收到訊息之後返回Linux根檔案系統 7. Client啟動Linux核心,載入相關的核心引數 8. Client通過核心引數下載kickstart檔案,並根據kickstart檔案裡的安裝資訊,下載安裝原始檔進行 自動化安裝

範例:在centos8上實現PXE自動化安裝(此範例是基於tftp和dhcpd服務配好的情況下做的)

1.安裝前準備

關閉防火牆和SELINUX,DHCP伺服器靜態IP
網路要求:關閉Vmware軟體中的DHCP服務,基於NAT模式

注意:使用 1G 以下記憶體的主機安裝CentOS 7,8 會提示空間不足,建議2G以上

2.安裝

安裝syslinux-nonlinux包

[root@centos8 ~]# yum -y install syslinux-nonlinux

檢視包的內容

[root@centos8 ~]# rpm -ql syslinux-nonlinux
/usr/share/syslinux/altmbr.bin
/usr/share/syslinux/altmbr_c.bin
/usr/share/syslinux/altmbr_f.bin
/usr/share/syslinux/cat.c32
/usr/share/syslinux/chain.c32
/usr/share/syslinux/cmd.c32
/usr/share/syslinux/cmenu.c32
/usr/share/syslinux/config.c32
/usr/share/syslinux/cptime.c32
/usr/share/syslinux/cpu.c32
/usr/share/syslinux/cpuid.c32
/usr/share/syslinux/cpuidtest.c32
/usr/share/syslinux/debug.c32
/usr/share/syslinux/dhcp.c32
/usr/share/syslinux/dir.c32
/usr/share/syslinux/disk.c32
/usr/share/syslinux/dmi.c32
/usr/share/syslinux/dmitest.c32
/usr/share/syslinux/elf.c32
/usr/share/syslinux/ethersel.c32
/usr/share/syslinux/gfxboot.c32
/usr/share/syslinux/gptmbr.bin
/usr/share/syslinux/gptmbr_c.bin
/usr/share/syslinux/gptmbr_f.bin
/usr/share/syslinux/gpxecmd.c32
/usr/share/syslinux/hdt.c32
/usr/share/syslinux/hexdump.c32
/usr/share/syslinux/host.c32
/usr/share/syslinux/ifcpu.c32
/usr/share/syslinux/ifcpu64.c32
/usr/share/syslinux/ifmemdsk.c32
/usr/share/syslinux/ifplop.c32
/usr/share/syslinux/isohdpfx.bin
/usr/share/syslinux/isohdpfx_c.bin
/usr/share/syslinux/isohdpfx_f.bin
/usr/share/syslinux/isohdppx.bin
/usr/share/syslinux/isohdppx_c.bin
/usr/share/syslinux/isohdppx_f.bin
/usr/share/syslinux/isolinux-debug.bin
/usr/share/syslinux/isolinux.bin
/usr/share/syslinux/kbdmap.c32
/usr/share/syslinux/kontron_wdt.c32
/usr/share/syslinux/ldlinux.c32
/usr/share/syslinux/lfs.c32
/usr/share/syslinux/libcom32.c32
/usr/share/syslinux/libgpl.c32
/usr/share/syslinux/liblua.c32
/usr/share/syslinux/libmenu.c32
/usr/share/syslinux/libutil.c32
/usr/share/syslinux/linux.c32
/usr/share/syslinux/lpxelinux.0
/usr/share/syslinux/ls.c32
/usr/share/syslinux/lua.c32
/usr/share/syslinux/mboot.c32
/usr/share/syslinux/mbr.bin
/usr/share/syslinux/mbr_c.bin
/usr/share/syslinux/mbr_f.bin
/usr/share/syslinux/memdisk
/usr/share/syslinux/meminfo.c32
/usr/share/syslinux/menu.c32
/usr/share/syslinux/pci.c32
/usr/share/syslinux/pcitest.c32
/usr/share/syslinux/pmload.c32
/usr/share/syslinux/poweroff.c32
/usr/share/syslinux/prdhcp.c32
/usr/share/syslinux/pwd.c32
/usr/share/syslinux/pxechn.c32
/usr/share/syslinux/pxelinux.0
/usr/share/syslinux/reboot.c32
/usr/share/syslinux/rosh.c32
/usr/share/syslinux/sanboot.c32
/usr/share/syslinux/sdi.c32
/usr/share/syslinux/sysdump.c32
/usr/share/syslinux/syslinux.c32
/usr/share/syslinux/syslinux.com
/usr/share/syslinux/syslinux.exe
/usr/share/syslinux/vesa.c32
/usr/share/syslinux/vesainfo.c32
/usr/share/syslinux/vesamenu.c32
/usr/share/syslinux/vpdtest.c32
/usr/share/syslinux/whichsys.c32
/usr/share/syslinux/zzjson.c32

將/usr/share/syslinux/pxelinux.0和/usr/share/syslinux/menu.c32這兩個檔案拷貝到/var/lib/tftpboot/目錄下

[root@centos8 tftpboot]# cp /usr/share/syslinux/pxelinux.0 /usr/share/syslinux/menu.c32 .

建立centos7和8的目錄

[root@centos8 tftpboot]# mkdir centos{7,8}

 

 將centos8光盤裡的vmlinuz和initrd.img拷到8目錄下

[root@centos8 tftpboot]# cp /misc/cd/isolinux/{vmlinuz,initrd.img} centos8/

 

 將centos7光盤裡的vmlinuz和initrd.img拷到7目錄下

[root@centos8 tftpboot]# cp /var/www/html/centos/7/os/x86_64/isolinux/{vmlinuz,initrd.img} centos7/

 

將centos8光盤裡的ldlinux.c32,libcom32.c32,libutil.c32三個檔案cp到該目錄中這是centos8獨有的

[root@centos8 tftpboot]# cp /misc/cd/isolinux/{ldlinux.c32,libutil.c32,libcom32.c32} .

 

現在就缺選單了,我們需要建一個單獨的叫pxelinux.cfg資料夾

[root@centos8 tftpboot]# mkdir pxelinux.cfg

將光盤裡的選單檔案/misc/cd/isolinux/isolinux.cfg作為模板拷到pxelinux.cfg目錄下

[root@centos8 tftpboot]# cp /misc/cd/isolinux/isolinux.cfg pxelinux.cfg/default

 

 編輯此檔案

vim /var/lib/tftpboot/pxelinux.cfg/default
default menu.c32
timeout 600
menu title Install CentOS Linux
label linux8
 menu label Auto Install CentOS Linux ^8
 kernel centos8/vmlinuz
 append initrd=centos8/initrd.img ks=http://192.168.93.129/ks/centos8.cfg

label linux7
 menu label Auto Install CentOS Linux ^7
 kernel centos7/vmlinuz
 append initrd=centos7/initrd.img ks=http://192.168.93.129/ks/centos7.cfg

label manual
 menu label ^Manual Install CentOS Linux 8.0
 kernel centos8/vmlinuz
 append initrd=centos8/initrd.img
inst.repo=http://192.168.93.129/centos/8/os/x86_64/
label rescue
 menu label ^Rescue a CentOS Linux system 8
 kernel centos8/vmlinuz
 append initrd=centos8/initrd.img
inst.repo=http://192.168.93.129/centos/8/os/x86_64/ rescue

label local
 menu default
 menu label Boot from ^local drive
 localboot 0xffff

我們檢查一下

[root@centos8 tftpboot]# tree /var/lib/tftpboot/

三個資料夾10個檔案

我們檢視其埠:

[root@centos8 tftpboot]# ss -ntul

 

 

 

 現在我們就可以裝系統了

重啟等圖形介面進度條沒完之前按esc鍵

 

 

 

 

 

 

 成了!

 

記錄於2022-3-15-12:15