此文章是Linux部署方式系列文章中的第三部分,回歸到主流的RedHat衍生版體系以及描述對比PXE安裝服務的實現及使用Kickstart在部署主機系統是的妙用。本文涉及的內容是對現有Redhat體系的網絡安裝方式的一個總結,重點是在講述PXE安裝服務器的核心內容實現方式並不限於Linux環境;結合Kickstart如何快速的實現安裝主機的基本信息的配置,以及如何定制主要軟件包,同樣靈活應用Kickstart和tftp可以具體指定那台主機安裝那些配置好的參數,節省管理員的時間和精力,自動安裝減少了人為出錯的幾率。好處自然是很多,這裡就不過多描述了,下面開始本文的內容。主要針對目前的RHEL5.3版本以及CentOS5.2版本為例。
首先熟悉一下PXE網絡安裝服務器的架構。PXE安裝分為兩個階段,第一個階段是BOOTP階段,此階段完全由網卡自帶的PXEROM芯片所決定,Linux主機將從tftpserver上獲得PXELinux啟動內核和initrd.img文件;第二個階段是在PXELinux內核啟動Linux主機網絡安裝進程階段,Linux主機需要和安裝服務器進行網絡通信,需要通過DHCP服務獲得IP地址,以便獲得安裝腳本和獲得安裝文件。從下圖可以看到PXE網絡安裝服務器包含一個DHCP和TFTP主要解決主機沒有操作系統的BOOTP階段獲取必要的安裝信息,就是通過加載vmlinuz和initrd.img進入Linux安裝的引導過程。其次就是要准備一個安裝的鏡像服務器並通過nfs、ftp、http等協議將Redhat&Centos的安裝源(安裝目錄樹)發布供安裝使用,同時簡單的變動一下這個安裝目錄樹同樣可以成為一個本地的yum源。重要的一點就是要提通過KickstartScript配置文件實現安裝的自動化。
圖:PXE網絡安裝服務架構
實際上為了保持這個架構的通用性,將分別講述在Redhat&Centos中的實現方式以及在Windows環境中的實現方式。實際上借助一些簡單的工具PXE網絡安裝往往可以成為一個便攜的方式存在。
在Redhat&Centos中安裝tftp和dhcp,通過yum完成,這個對與Centos5.2非常的便利,至於在redhat中的操作,可以看後文中描述的建議的yum源的實現。
yum -y install tftp-server #完成tftp server的安裝
yum -y install dhcp* #完成dhcp server的安裝
實際上PXE安裝中有疑問的部分就是配置一個tftp的目錄、設置dhcp的tftp啟動參數、建立Redhat&Centos的安裝目錄樹。要清楚這些問題先要從tftp主目錄/tftpboot下的目錄和文件用途說起。
/tftpboot/pxelinux.0 #文件
/tftpboot/*.msg #文件
/tftpboot/vmlinuz #文件
/tftpboot/initrd.img #文件
/tftpboot/pxelinux.cfg #目錄
Redhat&Centos安裝程序的內核vmlinuz/根文件系統文件initrd.img是PXE安裝過程的第一步,正確引導後將看到boot.msg(*.msg中的一個)提示信息,用戶選擇安裝方式,pxelinux.0啟動鏡像文件在執行過程中,會讀取配置文件以確定它應該載入什麼Linux內核文件來運行。所有的配置文件都放在啟動服務器的/tftpboot/pxelinux.cfg/目錄下。
明白了tftpboot目錄下的文件和目錄的作用就要弄清楚這些文件是從那裡獲取的,這些文件就在已經安裝好的Redhat&Centos系統和安裝光盤中。為了便於獲取這些文件需要建立一個安裝的目錄樹,具體操作也是很簡單的mount上DVD鏡像,建議使用DVD鏡像當然CD鏡像也是可以的,然後可以通過如下的命令復制DVD鏡像上的全部的內容到安裝目錄樹中
mkdir /InstallOs #建立安裝目錄樹文件夾 InstallOs
mount -o loop /home/CentOS-5.2-i386-bin-DVD.iso /mnt #將centos的DVD鏡像mount
cd /mnt #進入鏡像加載目錄
tar cf - . |(cd /InstallOs;tar xfp -) #
將DVD鏡像文件全部復制到安裝目錄樹文件夾InstallOs
下面就從安裝目錄樹文件夾和當前的系統中獲取tftpboot目錄中的文件和文件夾
cp /usr/lib/syslinux/pxelinux.0 /tftpboot/ #獲取 pxelinux.0文件
cp /InstallOs/isolinux/initrd.img /tftpboot
cp /InstallOs/isolinux/vmlinuz /tftpboot
cp /InstallOs/isolinux/*.Msg /tftpboot
mkdir /tftpboot/pxelinux.cfg #建立pxelinux.cfg目錄
cp /InstallOs/isolinux/isolinux.cfg /tftpboot/pxelinux.cfg/
mv /tftpboot/pxelinux.cfg/isolinux.cfg /tftpboot/pxelinux.cfg/default
到此已經建立了一個基礎的tftpboot目錄機構和一個安裝目錄樹。基礎工作結束下面進入到tftp和dhcp的服務參數設置過程。具體設置參考下列配置文件:
1、dhcp配置文件cat/etc/dhcpd.conf中的藍色部分是設置支持BOOTP的參數,注意其中的filename"pxelinux.0";如果缺少這個信息邏輯將無法獲取到安裝程序的內核vmlinuz/根文件系統文件initrd.img;紅色的部分是dhcp客戶端獲取的ip子網的信息,注意保持設置的subnet信息的一致性。
#cat /etc/dhcpd.conf
ddns-update-style none;
ddns-updates off;
deny client-updates;
one-lease-per-client false;
allow bootp;
option T150 code 150 = string;
allow booting;
class "pxeclients"{
match if substring(option vendor-class-identifier,0,9) = "PXEClient";
filename "pxelinux.0";
next-server 172.16.1.9;
}
subnet 172.16.0.0 netmask 255.255.0.0 {
option routers 172.16.1.9;
option subnet-mask 255.255.0.0;
option nis-domain "telecarenet.cn";
option domain-name "lvs.local";
option domain-name-servers 172.16.1.9;
option time-offset -18000; # Eastern Standard Time
range dynamic-bootp 172.16.1.160 172.16.1.230;
default-lease-time 21600;
max-lease-time 43200;
# we want the nameserver to appear at a fixed address
host diskless {
next-server 172.16.1.9;
hardware ethernet 00:02:b3:ee:7b:74;
fixed-address 172.16.1.210;
filename "pxelinux.0";
}
}
2、tftp配置文件cat/etc/xinetd.d/tftp中的藍色部分是需要注意的,實際上tftp是一個xinetd的超級守護進程。
#cat /etc/xinetd.d/tftp
service tftp
{
socket_type = dgram
protocol = udp
wait = yes
user = root
server = /usr/sbin/in.tftpd
server_args = -s /tftpboot
disable = no
per_source = 11
cps = 100 2
flags = IPv4
}
啟動tftp與dhcp服務
/etc/init.d/xinetd restart #啟動tftp服務
/etc/init.d/dhcpd restart #啟動dhcp服務
下面要實現的是針對安裝目錄樹的網絡發布,簡單的是使用nfs配置文件只有一行就可以了,在/etc/exports文件中增加/InstallOs *(ro)這麼一行就可以了。但為了這個安裝目錄樹的通用性,要同時將/InstallOs文件夾作為httpd和ftp站點發布出去,方法是在默認安裝的apache和vsftp的根目錄中建立一個軟連接。
ln -s /InstallOs /var/www/html/InstallOS #建立apache的軟連接
ln -s /InstallOs /var/ftp/InstallOS #建立vsftp 的軟連接
這樣就可以提供nfs/ftp/http三種網絡安裝協議的選擇。
附上一個安裝目錄樹的擴展價值,使其成為yum源
cd /InstallOS
rpm -ivh ./Server/createrepo-0.4.11-3.el5.noarch.rpm
createrepo . #創建yum倉庫
在主機/etc/yum.repos.d/目中刪除現有的文件建立一個新的yum配置文件如下
[InstallOs]
name=InstallOs
baseurl=http://安裝服務器的ip地址/InstallOS/
enabled=1
gpgcheck=0
執行 yum clean all然後就可以使用安裝目錄樹的yum源進行軟件包的管理了