1. 程式人生 > >用shell指令碼實現pxe自動化部署

用shell指令碼實現pxe自動化部署

我們大家對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就可以了,但前提是,要先準備好映象檔案,可以共享,也可以直接拷貝映象,也可以用指令碼實現呀!