用shell指令碼實現pxe自動化部署
阿新 • • 發佈:2018-11-25
我們大家對pxe應該都有一定的瞭解,下面看一下官方的解釋:
PXE(preboot execute environment,預啟動執行環境)是由Intel公司開發的最新技術,工作於Client/Server的網路模式,支援工作站通過網路從遠端伺服器下載映像,並由此支援通過網路啟動作業系統,在啟動過程中,終端要求伺服器分配IP地址,再用TFTP(trivial file transfer protocol)或MTFTP(multicast trivial file transfer protocol)協議下載一個啟動軟體包到本機記憶體中執行,由這個啟動軟體包完成終端(客戶端)基本軟體設定,從而引導預先安裝在伺服器中的終端作業系統。PXE可以引導多種作業系統。
我們平時可以用一臺虛擬機器來實現pxe的整個功能,然後把這臺機器作為伺服器,其他客服端通過訪問我們,實現自動安裝linux作業系統。
- 需要用到的軟體有dhcp,TFTP,nfs(或者ftp,http),平時我們需要自己一步一步的安裝這些軟體,然後對他們進行配置,才能形成一個完整的pxe,在這裡,我就不對這些步驟做具體闡述,我把整個過程寫成了一個shell指令碼,執行完這個指令碼以後,pxe就形成了。
pxe的大致流程如圖:
- 我大概描述一個實現PXE的過程:先看圖
- 1、我們是把dhcp伺服器、tftp伺服器和共享服務(nfs)都放到了同一臺虛擬機器。
- 2、所以,我們實現要做的就是安裝所需要服務的軟體,然後就是準備作業系統的完整映象,將其共享。
- 3、基本就差不多了吧,我直接在我的程式碼裡面註釋吧。我的是安裝RHEL7.4
[[email protected] /test]# cat pxe.sh #!/bin/bash # 描述:pxe自動化部署 # 相關軟體:需要安裝dhcp,tftp,tftp-server,nfs-utils #互動式頁面,先輸入伺服器的ip,以及本機的/dev/sr0所在位置 read -p "Please enter your Ip:" ip #伺服器ip read -p "Please enter your ISO file path:" iso #映象檔案的掛載目錄 tftp=/var/lib/tftpboot/ #tftp的主工作目錄,也是這個實驗最重要的目錄,經常用到,所以定義成變數 # 安裝相關軟體,syslinux是用來提供pxelinux.0的,rpcbind是幫助nfs請求埠資訊的 yum install -y dhcp tftp tftp-server syslinux nfs-utils rpcbind >/dev/null 2>/var/log/pxe.error #安裝資訊直接扔到垃圾桶,錯誤資訊保留 #配置dhcp的配置檔案 cat >/etc/dhcp/dhcpd.conf <<EOF ddns-update-style interim; ignore client-updates; subnet 192.168.72.0 netmask 255.255.255.0 { range 192.168.72.20 192.168.72.30; next-server $ip; #為tftp伺服器的地址,這裡我們是公用一臺 filename "pxelinux.0"; #不用寫絕對路徑,寫相對路徑就可以,相對的就是/var/lib/tftpboot/這個主工作目錄 } EOF #準備好需要的環境,核心、映象等,最好自己先清理/var/lib/tftpboot/,確保裡面沒有以前殘留的,本來想在指令碼直接用rm -rf /var/lib/tftpboot/* ,但是。這樣確實很不安全,在實際工作中,要是這個目錄下有你需要的東西,執行完這個,那你可能就要gg了,所以,還是自己手動操作吧! cp /usr/share/syslinux/pxelinux.0 $tftp cp $iso/isolinux/vmlinuz $tftp cp $iso/isolinux/initrd.img $tftp mkdir $tftp/pxelinux.cfg/ # nfs服務,並讓他立即生效 ip1=`echo $ip | awk -F '.' '{print $1"."$2"."$3}'`.0 #找到ip的網段 cat >/etc/exports << EOF $iso $ip1/255.255.255.0(ro) EOF exportfs -rv >/dev/null 2>/var/log/pxe.error #讓修改立即生效 #自定義頁面 cat >$tftp/boot.msg <<EOF ############################################################ # # # ----1-To Install RHEL7.4 Type 1 Press Enter ------- # # # # ----2-To Install RHEL6.5 Type 2 Press Enter ------ # # # # ----3-To Install RHEL7.4 Type 3 Press Enter ------- # # # ############################################################ EOF cat >$tftp/pxelinux.cfg/default <<EOF default 1 timeout 600 display boot.msg prompt 1 label 1 kernel vmlinuz #核心名字必須和主工作目錄裡面的一樣,映象也是 append initrd=initrd.img method=nfs://$ip/iso #nfs共享的路徑 label 2 #如果要弄其他系統,可以多加幾個label kernel vmlinuz6-2 append initrd=initrd6-2.img EOF #啟動服務 systemctl restart dhcpd systemctl restart tftp systemctl restart rpcbind systemctl restart nfs echo "OK" #這句話並也沒有什麼用,只是個人覺得指令碼執行完得輸出一些東西而已!
總結:好了,這就是我的指令碼啦,我自己暫時只安裝了紅帽7 ,如果想安裝更多的系統,直接在/var/lib/tftp/pxelinux.cfg/default裡面加label就可以了,但前提是,要先準備好映象檔案,可以共享,也可以直接拷貝映象,也可以用指令碼實現呀!