1案例描述
某公司内部需要對大批量伺服器進行安裝centos作業系統人工進行一台一台安裝費時又費力而且效率很低是以搭建一台pxe伺服器顯得十分重要通過搭建pxe伺服器可以給所有需要安裝系統的伺服器進行快速安裝而無需人工幹預友善又快捷。但是如何進行快速有效的搭建一台pxe伺服器呢我們可以通過編寫一個shell腳本進行快速搭建pxe平台。
2案例分析
搭建此pxe伺服器需要能實作centos6.0x86_64、centos5.5i386以及centos5.5x86_64三種系統的選擇安裝使用者可以選擇自動化安裝或者手動安裝。是以作為pxe平台的伺服器要求有centos6.0的kicstart檔案、centos5.5x86_64的kickstart和centos5.5i386的kickstart檔案這三個檔案可以先在相應的系統下生成以及相應的鏡像檔案都要預先傳送到被用來搭建成一台pxe伺服器的主機上。
3解決過程
3.1首先伺服器上必須要有安裝各種類型的系統的鏡像檔案可以将這些鏡像檔案放在/opt目錄下
[root@sswans20opt]#llc*
-rw-r--r--.1rootroot4185118720mar1616:48centos-5.5-i386-bin-dvd.iso
-rw-r--r--.1rootroot4185118720mar1616:48centos-5.5-x86_64-bin-dvd.iso
-rw-r--r--.1rootroot4238800896mar1616:29centos-6.0-x86_64-bin-dvd1.iso
3.2将相應的ks.cfg檔案也放在/opt目錄下面
[root@sswans20opt]#llks*
-rwxrwxrwx.1rootroot1252mar1617:02ks5.5-32.cfg#centos5.5i386生成的kickstart檔案
-rwxrwxrwx.1rootroot1256mar1616:50ks5.5-64.cfg#centos5.5x86_64生成的kickstart檔案
-rwxrwxrwx.1rootroot1068mar1617:02ks6.0-64.cfg#centos6.0x86_64生成的kickstart檔案
3.3自動化搭建pxe伺服器的shell腳本内容如下
[root@sswans20opt]#vimauto_install.sh
#!/bin/bash
######################################################################################
##############thisshellfilecanautoinstallcentos6.0andinstallcentos5.5###################
##############################closeiptablesandselinux############################
setenforce0
echo"
#thisfilecontrolsthestateofselinuxonthesystem.
#selinux=cantakeoneofthesethreevalues:
#enforcing-selinuxsecuritypolicyisenforced.
#permissive-selinuxprintswarningsinsteadofenforcing.
#disabled-noselinuxpolicyisloaded.
selinux=permissive
#selinuxtype=cantakeoneofthesetwovalues:
#targeted-targetedprocessesareprotected,
#mls-multilevelsecurityprotection.
selinuxtype=targeted
">/etc/sysconfig/selinux
iptables-f
/etc/init.d/iptablessave>>/dev/null
##################################automount######################################
mkdir-p/var/ftp/centos/5.5/i386/dvd
mkdir-p/var/ftp/centos/5.5/x86_64/dvd
mkdir-p/var/ftp/centos/6.0/x86_64/dvd
mkdir-p/var/ftp/centos/ks
echo"/opt/centos-5.5-i386-bin-dvd.iso/var/ftp/centos/5.5/i386/dvdiso9660defaults,loop,ro00">>/etc/fstab
echo"/opt/centos-5.5-x86_64-bin-dvd.iso/var/ftp/centos/5.5/x86_64/dvdiso9660defaults,loop,ro00">>/etc/fstab
echo"/opt/centos-6.0-x86_64-bin-dvd1.iso/var/ftp/centos/6.0/x86_64/dvdiso9660defaults,loop,ro00">>/etc/fstab
mount-a
################################installsomepackages################################
yuminstalldhcpvsftpdsyslinuxtftp-server-y>>/dev/null
servicevsftpdstart>>/dev/null
##############################configuredhcpservice################################
echo'
#dhcpd.conf
#sampleconfigurationfileforiscdhcpd
#optiondefinitionscommontoallsupportednetworks...
default-lease-time600;
max-lease-time7200;
allowbooting;
allowbootp;
subnet172.25.0.0netmask255.255.0.0{#需配置設定的網絡段以及子網路遮罩
range172.25.11.10172.25.11.30;#給主機配置設定的ip位址範圍
optiondomain-name-servers172.25.11.20;#dns伺服器位址
optionrouters172.25.11.20;#路由器位址
optionbroadcast-address172.25.255.255;#廣播位址
next-server172.25.11.20;#tftp伺服器的位址
filename"pxelinux.0";
}'>/etc/dhcp/dhcpd.conf
servicedhcpdstart>>/dev/null
############################configuretftpservice################################
#default:off
#description:thetftpserverservesfilesusingthetrivialfiletransfer\
#protocol.thetftpprotocolisoftenusedtobootdiskless\
#workstations,downloadconfigurationfilestonetwork-awareprinters,\
#andtostarttheinstallationprocessforsomeoperatingsystems.
servicetftp
{
socket_type=dgram
protocol=udp
wait=yes
user=root
server=/usr/sbin/in.tftpd
server_args=-unobody-s/var/lib/tftpboot
disable=no
per_source=11
cps=1002
flags=ipv4
}">/etc/xinetd.d/tftp
servicexinetdstart>>/dev/null
dir1=/var/lib/tftpboot/pxelinux.cfg
if[-d$dir1];then
rm-rf$dir
else
mkdir-p/var/lib/tftpboot/pxelinux.cfg
fi
########################cpsomefilesto/var/lib/tftpboot################################
cp/usr/share/syslinux/pxelinux.0/var/lib/tftpboot/
mkdir/var/lib/tftpboot/centos6.0_x86_64
cp/var/ftp/centos/6.0/x86_64/dvd/p_w_picpaths/pxeboot/vmlinuz/var/lib/tftpboot/centos6.0_x86_64
cp/var/ftp/centos/6.0/x86_64/dvd/p_w_picpaths/pxeboot/initrd.img/var/lib/tftpboot/centos6.0_x86_64
cp/var/ftp/centos/6.0/x86_64/dvd/isolinux/boot.msg/var/lib/tftpboot/
cp/var/ftp/centos/6.0/x86_64/dvd/isolinux/vesamenu.c32/var/lib/tftpboot/
cp/var/ftp/centos/6.0/x86_64/dvd/isolinux/splash.jpg/var/lib/tftpboot/
#######################addanewcentos5i386system#################################
mkdir/var/lib/tftpboot/centos5.5_i386
cp/var/ftp/centos/5.5/i386/dvd/p_w_picpaths/pxeboot/vmlinuz/var/lib/tftpboot/centos5.5_i386
cp/var/ftp/centos/5.5/i386/dvd/p_w_picpaths/pxeboot/initrd.img/var/lib/tftpboot/centos5.5_i386
#######################addanewcentos5x86_64system##############################
mkdir/var/lib/tftpboot/centos5.5_x86_64
cp/var/ftp/centos/5.5/x86_64/dvd/p_w_picpaths/pxeboot/vmlinuz/var/lib/tftpboot/centos5.5_i386
cp/var/ftp/centos/5.5/x86_64/dvd/p_w_picpaths/pxeboot/initrd.img/var/lib/tftpboot/centos5.5_i386
##########################configurethedefaultfile####################################
defaultvesamenu.c32
timeout600
displayboot.msg
menubackgroundsplash.jpg
menutitlewelcometokedacominstallcentos!
menucolorborder0#ffffffff#00000000
menucolorsel7#ffffffff#ff000000
menucolortitle0#ffffffff#00000000
menucolortabmsg0#ffffffff#00000000
menucolorunsel0#ffffffff#00000000
menucolorhotsel0#ff000000#ffffffff
menucolorhotkey7#ffffffff#ff000000
menucolorscrollbar0#ffffffff#00000000
labelcentos6.0_x86_64
menulabelcentos6.0x86_84installwithkickstart
menudefault
kernelcentos6.0_x86_64/vmlinuz
appendinitrd=centos6.0_x86_64/initrd.imgks=ftp://172.25.11.20/centos/ks/ks6.0-64.cfgtextksdevice=eth0
labelcentos5.5_i386
menulabelcentos5.5i386installwithkickstart
kernelcentos5.5_i386/vmlinuz
appendinitrd=centos5.5_i386/initrd.imgks=ftp://172.25.11.20/centos/ks/ks5.5-32.cfgtextksdevice=eth0
labelcentos5.5_x86_64
menulabelcentos5.5x86_64installwithkickstart
kernelcentos5.5_x86_64/vmlinuz
appendinitrd=centos5.5_x86_64/initrd.imgks=ftp://172.25.11.20/centos/ks/ks5.5-64.cfgtext
ksdevice=eth0
labelcentos6.0-x86_64
menulabelshoudonginstallcentos6.0x86_84
appendinitrd=centos6.0_x86_64/initrd.img
labelcentos5.5-i386
menulabelshoudonginstallcentos5.5i386
appendinitrd=centos5.5_i386/initrd.img
labelcentos5.5-x86_64
menulabelshoudonginstallcentos5.5x86_64
appendinitrd=centos5.5_x86_64/initrd.img
">/var/lib/tftpboot/pxelinux.cfg/default
############################configurekickstart####################################
mv/opt/ks5.5-32.cfg/var/ftp/centos/ks
chmod777/var/ftp/centos/ks/ks5.5-32.cfg
mv/opt/ks5.5-64.cfg/var/ftp/centos/ks
chmod777/var/ftp/centos/ks/ks5.5-64.cfg
mv/opt/ks6.0-64.cfg/var/ftp/centos/ks
chmod777/var/ftp/centos/ks/ks6.0-64.cfg
############################allservicerestart#####################################
forfwindhcpdxinetdvsftpd
do
service$fwrestart
chkconfig$fwon
done
3.4使用者對編寫好的自動化腳本進行賦予可執行的權限這樣腳本才能執行
[root@sswans20~]#chmod777auto_install.sh
[root@sswans20~]#llauto_install.sh
-rwxrwxrwx.1rootroot5236mar1616:52auto_install.sh
特别說明
由于我的dhcp伺服器、ftp伺服器、tftp伺服器、dns伺服器的位址都是172.25.11.20是以在本腳本執行前根據你的實際環境需要做如下修改
、分别打開每個ks檔案檢視url--url=ftp://172.25.11.20/是否跟你的ftp伺服器位址一緻不一緻要修改
、確定此的腳本中紅色标記的ip位址一定是你的ftp伺服器、tftp伺服器位址
、腳本中藍色标記的ip位址可改可不改根據你的實際情況需要自行決定
3.5以上無誤後執行此腳本檔案
[root@sswans20~]#./auto_install.sh#執行後需要等待一段時間
shuttingdowndhcpd:[ok]
startingdhcpd:[ok]
stoppingxinetd:[ok]
startingxinetd:[ok]
shuttingdownvsftpd:[ok]
startingvsftpdforvsftpd:[ok]
3.6驗證pxe伺服器是否搭建成功通過給另一台伺服器安裝系統來求證
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIiZpdmLyV2YhB3cvw1coRXYwNWaw91dfB3LcRHb1FmZlR2LcNXZtVGa09CX19CXl9CXt92Yu8GdjFTNuc2bsJ2Lc9CX6MHc0RHaiojIsJye.gif)
由于伺服器上我沒有上傳centos5.5x86_64位系統鏡像檔案是以隻能看到四個安裝選項。
我選擇centos5.5i386自動安裝的過程截圖如下
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIiZpdmLyV2YhB3cvw1coRXYwNWaw91dfB3LcRHb1FmZlR2LcNXZtVGa09CX19CXl9CXt92Yu8GdjFTNuc2bsJ2Lc9CX6MHc0RHaiojIsJye.gif)
4解決結果
通過此安裝界面使用者使用上下鍵選擇安裝使用者需要使用的系統類型選擇後按Enter鍵系統開始自動化安裝過程不選的話60s後預設選擇第一項安裝。
5總結
自動化搭建pxe伺服器關鍵在于shell腳本的編寫這要求編寫者對shell文法的熟悉以及一定的邏輯思維能力。通過此腳本給那些對pxe搭建還不太清楚的朋友們提供了傻瓜式安裝。感興趣的朋友可以對腳本内容進行詳細分析與閱讀。有疑問的地方可以發微網誌咨詢我謝謝