利用 PXE 實現自動化系統部署
阿新 • • 發佈:2022-03-25
一、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服務 器地址資訊一併傳送給Client2. 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檔案傳送給Client6. 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