PXE網(wǎng)絡(luò)安裝實(shí)戰(zhàn) 在實(shí)際工作中,我們經(jīng)常會(huì)遇到這樣的情況:想要安裝Linux但是計(jì)算機(jī)不帶光驅(qū)或軟驅(qū),或者是筆記本配置的非標(biāo)準(zhǔn)的軟驅(qū)和光驅(qū),如1394接口,USB接口等,在Linux安裝時(shí)所引導(dǎo)的Linux內(nèi)核一般都不會(huì)帶這些接口的驅(qū)動(dòng),所以也無(wú)法通過本地安裝Linux,此外,在一些場(chǎng)合,如機(jī)房,IT實(shí)驗(yàn)室,工廠生產(chǎn)線,有大量的計(jì)算機(jī)需要同時(shí)安裝Linux,如果通過光驅(qū)的方式一個(gè)個(gè)安裝,不僅效率低,也不利于維護(hù)。這是時(shí)候你就需要PXE的強(qiáng)大功能了。本文將就PXE的基本原理和工作方式進(jìn)行簡(jiǎn)要介紹,重點(diǎn)通過實(shí)際操作來(lái)演示如何通過網(wǎng)絡(luò)安裝RedHat和FreeBSD這兩個(gè)系統(tǒng)以及引申出來(lái)的其它功能 基本原理 PXE是什么 PXE(Pre-boot Execution Environment)是由Intel設(shè)計(jì),可以使計(jì)算機(jī)通過網(wǎng)絡(luò)啟動(dòng)的協(xié)議。協(xié)議分為client和server兩端,PXE client在網(wǎng)卡的ROM中,當(dāng)計(jì)算機(jī)啟動(dòng)時(shí),BIOS把PXE client調(diào)入內(nèi)存執(zhí)行,并顯示出命令菜單,經(jīng)用戶選擇后,PXE client將放置在遠(yuǎn)端的操作系統(tǒng)通過網(wǎng)絡(luò)下載到本地運(yùn)行。 PXE是怎樣工作的 圖一 圖二 圖1是網(wǎng)絡(luò)安裝RedHat的過程,圖2是網(wǎng)絡(luò)安裝FreeBSD的過程 從上圖我們可以看到,無(wú)論安裝什幺類型的操作系統(tǒng),PXE的安裝過程大致可以描述為以下幾個(gè)步驟: 1. 客戶機(jī)從自己的PXE網(wǎng)卡啟動(dòng),向本網(wǎng)絡(luò)中的DHCP服務(wù)器索取IP 2. DHCP服務(wù)器返回分給客戶機(jī)IP以及bootstrap文件的放置位置(該文件一般是放在一臺(tái)TFTP服務(wù)器上) 3. 客戶機(jī)向本網(wǎng)絡(luò)中的TFTP服務(wù)器索取bootstrap文件 4. 客戶機(jī)取得bootstrap文件后之執(zhí)行該文件 5. 根據(jù)bootstrap的執(zhí)行結(jié)果,通過TFTP服務(wù)器加載內(nèi)核和文件系統(tǒng) 6. 進(jìn)入安裝畫面, 此時(shí)可以通過選擇FTP,HTTP,NFS方式之一進(jìn)行安裝 從這里我們不難得到實(shí)現(xiàn)PXE網(wǎng)絡(luò)安裝必需的4個(gè)要素 1. 客戶機(jī)的網(wǎng)卡必須為PXE網(wǎng)卡 2. 網(wǎng)絡(luò)中必須要有DHCP和TFTP服務(wù)器,當(dāng)然這兩個(gè)服務(wù)器可以是同一臺(tái)物理主機(jī) 3. 所安裝的操作系統(tǒng)必須支持網(wǎng)絡(luò)安裝,即必須提供自己的bootstrap 4. 必須要有FTP,HTTP,NFS至少一個(gè)服務(wù)器,當(dāng)然也可以和DHCP和TFTP服務(wù)器同為一臺(tái)物理主機(jī) 實(shí)際演練 了解了PXE的原理以及工作過程后,下面我們來(lái)實(shí)際操作,通過實(shí)現(xiàn)PXE網(wǎng)絡(luò)安裝必需的4個(gè)要素,來(lái)演示一遍安裝的全過程.本例使用RedHat9作為服務(wù)器的操作系統(tǒng). PXE網(wǎng)卡 現(xiàn)在市面上的的網(wǎng)卡,不論是板載或是PCI網(wǎng)卡基本上都支持PXE,所以第一個(gè)要素不成問題. DHCP和TFTP服務(wù)器 為了簡(jiǎn)便起見,我們將DHCP和TFTP服務(wù)運(yùn)行在同一臺(tái)物理主機(jī)上. 配置DHCP服務(wù)器 DHCP服務(wù)的配置文件是/etc/dhcpd.conf,但是RedHat9 默認(rèn)安裝沒有生成該文件,我們可以將/usr/share/doc/dhcp-3.0pl2/dhcpd.conf.sample拷貝到/etc下并改名為dhcpd.conf進(jìn)行配置: ddns-update-style interim; ignore client-updates;
subnet 192.168.0.0 netmask 255.255.255.0 {
# --- default gateway option routers 192.168.0.1; option subnet-mask 255.255.255.0;
option nis-domain "domain.org"; option domain-name "domain.org"; option domain-name-servers 192.168.1.1;
option time-offset -18000; # Eastern Standard Time # option ntp-servers 192.168.1.1; # option netbios-name-servers 192.168.1.1; # --- Selects point-to-point node (default is hybrid). Don't change this unless # -- you understand Netbios very well # option netbios-node-type 2;
range dynamic-bootp 192.168.0.128 192.168.0.254; default-lease-time 21600; max-lease-time 43200;
# we want the nameserver to appear at a fixed address host ns {
# next-server marvin.redhat.com; hardware ethernet 00:E0:81:61:16:60; fixed-address 192.168.0.105; filename “/tftpboot/pxelinux.0”; # filename "/tftpboot/pxeboot"; option root-path "192.168.0.1:/FreeBSD"; } } 紅色部分是修改過的部分,我一一解說(shuō)其作用 next-server marvin.redhat.com 這是指明TFTP服務(wù)器的IP或者是主機(jī)名,如果你的TFTP和DHCP是同一臺(tái)物理主機(jī),那就可以注釋掉該行,本例中便注釋掉了該行 hardware ethernet 00:E0:81:61:16:60 fixed-address 192.168.0.105
如果你希望對(duì)某一臺(tái)客戶機(jī)指定一個(gè)固定的IP,那幺你就需要將該客戶機(jī)的MAC地址與你希望它得到的IP寫在這里,本例我們將一臺(tái)MAC地址為00:E0:81:61:16:60的主機(jī)指定了一個(gè)固定IP: 192.168.0.105
filename
這一個(gè)選項(xiàng)很重要,它的作用是指明bootstrap所在的位置,一般是指向一個(gè)TFTP服務(wù)器的某個(gè)目錄下
option root-path
該選項(xiàng)在用來(lái)定義根文件系統(tǒng)的路徑,一般是一個(gè)NFS方式。本例主要是針對(duì)安裝FreeBSD而設(shè)置 配置TFTP服務(wù)器 TFTP服務(wù)的配置文件是/etc/xinetd.d/tftp,RedHat9 默認(rèn)安裝已經(jīng)生成了該文件
service tftp { disable = no socket_type = dgram protocol = udp wait = yes user = root server = /usr/sbin/in.tftpd server_args = -s /tftpboot per_source = 11 cps = 100 2 flags = IPv4 } 這個(gè)文件基本上不用改動(dòng),但是需要注意的的是server_args= -s /tftpboot這一行,它的含義是將/tftpboot作為root目錄,這樣在dhcpd.conf中的filename一行就應(yīng)該寫bootstrap的相對(duì)路徑: filename “/pxelinux.0”,這是出于安全方面考慮的.如果你去掉了-s這個(gè)參數(shù),那幺就要在filename一行指出bootstrap的絕對(duì)路徑: filename “/tftpboot/pxelinux.0”.為了和本例的dhcpd.conf相一致,我們?nèi)サ?s變?yōu)?br>service tftp { disable = no socket_type = dgram protocol = udp wait = yes user = root server = /usr/sbin/in.tftpd server_args = /tftpboot per_source = 11 cps = 100 2 flags = IPv4 } Bootstrap 對(duì)于支持網(wǎng)絡(luò)安裝的操作系統(tǒng),Bootstrap基本上都可以從安裝源文件上找到,對(duì)于本例來(lái)說(shuō),RedHat的bootstrap就是/usr/lib/syslinux/pxelinux.0,F(xiàn)reeBSD的bootstrap就是/boot/pxeboot,我們把它們都拷貝到/tftpboot下. NFS服務(wù)器 要實(shí)現(xiàn)FreeBSD的安裝還缺少一個(gè)NFS服務(wù)器,即dhcpd.conf所提到的root-path選項(xiàng),我們不妨也將它和DHCP,TFTP運(yùn)行在同一個(gè)物理主機(jī)上,它的配置文件很簡(jiǎn)單,就是/etc/exports: /FreeBSD *(rw) 到這里,四個(gè)要素已經(jīng)全部實(shí)現(xiàn),我們開始著手進(jìn)行最后的配置. 配置RedHat 把RedHat第一張安裝光盤上images/pxeboot目錄下的initr.img和vmlinux也考到/tftpboot/目錄下。在/tftpboot創(chuàng)建pxelinux.cfg目錄,用于放syslinux的配制文件。Sysconfig的配制文件有現(xiàn)成的可用,在RedHat第一張安裝光盤isolinux/下有一個(gè)isolinux.cfg文件,把它拷貝到/tftpboot/pxelinux.cfg/目錄下并改名為default.下面為修改后的default文件: default linux prompt 1 timeout 30 label linux kernel vmlinuz append initrd=initrd.img 這個(gè)Default 文件很容易看懂,就是告訴啟動(dòng)后使用那個(gè)內(nèi)核引導(dǎo) 配置FreeBSD 以FreeBSD5.2為例,將5.2-RELEASE-i386-disc1.iso掛接在/FreeBSD下: mount –o loop 5.2-RELEASE-i386-disc1.iso /FreeBSD 開始安裝 服務(wù)器方面 首先通過setup命令設(shè)置服務(wù)器自身的IP為192.168.0.1,然后依此啟動(dòng)DHCP,TFTP,NFS服務(wù)器: # cd /etc/rc.d/init.d # ./dhcpd restart (如果安裝RedHat,先要將dhcpd.conf中的filename "/tftpboot/pxeboot" 注釋掉(加字符#),再把filename "/tftpboot/pxelinux.0" 去掉注釋(去掉字符#),安裝FreeBSD則剛好相反) #./xinetd restart #./nfs restart 關(guān)閉防火墻 #./iptables stop 客戶機(jī)方面 客戶機(jī)只需設(shè)置BIOS從網(wǎng)絡(luò)啟動(dòng)即可,開機(jī)后可以看到它將按預(yù)計(jì)引導(dǎo)進(jìn)入安裝畫面,此時(shí)和用光驅(qū)從本地安裝的畫面是一樣的.接下來(lái)就可以根據(jù)安裝手冊(cè)完成安裝,這里就不再敘述 引申 PXE除了用于網(wǎng)絡(luò)安裝以外,也可以直接從網(wǎng)絡(luò)引導(dǎo)內(nèi)核到內(nèi)存中執(zhí)行,實(shí)現(xiàn)無(wú)盤系統(tǒng).我們結(jié)合上面的配置舉兩個(gè)實(shí)際的例子來(lái)說(shuō)明. 例一: 如果你管理的機(jī)房或者實(shí)驗(yàn)室的linux系統(tǒng)有了故障,需要進(jìn)入到rescue模式去修復(fù).若是一臺(tái)一臺(tái)去從光驅(qū)或軟盤引導(dǎo)進(jìn)入就太麻煩了,我們可以采用PXE來(lái)一勞永逸.具體做法是:在/var/www/html下建立RedHat/base目錄,并且拷貝第一張安裝盤上的/RedHat/base/netstag2.img到/var/www/html/RedHat/base目錄里.這樣客戶機(jī)網(wǎng)絡(luò)引導(dǎo)進(jìn)入安裝畫面時(shí)候,只需輸入linux rescue,然后在選擇rescue img位置時(shí)選擇http,輸入服務(wù)器的ip,路徑一欄輸入/,回車后就可以順利進(jìn)入安全模式。 例二: 大部分主板測(cè)試部門都會(huì)采用memtest86這個(gè)軟件去測(cè)試內(nèi)存,一般地做法是將程序?qū)懙杰洷P里,從軟盤啟動(dòng)執(zhí)行,這樣一來(lái),即要占用大量的軟驅(qū)而且大大縮短了軟盤的壽命,成本會(huì)增加.我們可以采用PXE方式直接從網(wǎng)絡(luò)引導(dǎo)這個(gè)程序到內(nèi)存執(zhí)行,速度又快又可以避免設(shè)備的消耗.具體做法是修改default的內(nèi)容為 default linux prompt 1 timeout 600 label linux kernel vmlinuz append initrd=initrd.img label mem kernel mem86.bin append root=/dev/ram0 rw mem86.bin是memtest86的主程序,將它放置到/tftpboot下,客戶機(jī)從PXE引導(dǎo)進(jìn)入安裝畫面時(shí)只需輸入mem,就可以直接通過tftp將mem86.bin解壓到ramdisk并自動(dòng)運(yùn)行.
小結(jié) PXE使得我們本來(lái)繁瑣的重復(fù)性工作得到了簡(jiǎn)化,大大節(jié)省了人力物力以及時(shí)間,這對(duì)于力求降低成本的工廠有著重大的意義,對(duì)于個(gè)人而言,無(wú)疑也加深了對(duì)網(wǎng)絡(luò)安裝的更深一步認(rèn)識(shí). |
|