以前曾經(jīng)看過很多開發(fā)人員提到FreeBSD用于開發(fā)是非常******的系統(tǒng), 但是之前提到的主要都是freebsd在單機(jī)的開發(fā)環(huán)境下所具有的優(yōu)勢(shì),但是***近我發(fā)現(xiàn)其實(shí)FreeBSD在開發(fā)方面所具備的優(yōu)勢(shì)并不僅只于此。在一個(gè)開發(fā)團(tuán)隊(duì)中使用FreeBSD是可以形成一個(gè)完整的解決方案的。在單機(jī)方面的開發(fā)環(huán)境上,我不想多說了,Linux其實(shí)也具備很多好的特點(diǎn)的,我想說得更多是linux所不具備的特點(diǎn)。當(dāng)然這個(gè)方案使用linux來完成并不是不可能的,但是使用linux來完成其中的很多部分是有一些困難的, 從便利性上來講不如FreeBSD,從我這個(gè)懶人的角度來講,如果有兩個(gè)方法來解決問題,一個(gè)既簡(jiǎn)單又快速(還很清晰),另一個(gè)相對(duì)比較復(fù) 雜,耗時(shí)長(zhǎng)。那我沒有理由非要選用后一種。說這話的原因是,我不想跟我們國(guó)家普遍存在的某些偏執(zhí)的人引起任何的爭(zhēng)論。只是想 說這里其實(shí)有一種簡(jiǎn)單易行的方法。更主要的原因是,這種方法在我已知的情況下還沒有人在開發(fā)環(huán)境的建立中使用。
其實(shí)這個(gè)方法所使用的技術(shù)都是已經(jīng)被廣泛采用的,甚至可以說有些古老的東西。只是通過FreeBSD這個(gè)系統(tǒng)能夠把它們都串連在一起。可以形 成一套完整的開發(fā)環(huán)境,還包括辦公環(huán)境。我這個(gè)想法的核心是由一臺(tái) FreeBSD中心服務(wù)器來完成的。這個(gè)中心服務(wù)器上安裝CVS server, Samba server和NFS server就可以了,其中Samber server可以提供方便的空間共享,之所以除了NFS還要再單裝Samba,是因?yàn)镾amba在非*nix的環(huán)境上也可以使用。同時(shí)還可以安裝CUPS來驅(qū)動(dòng)一臺(tái)打印機(jī),通過Samba共享,讓整個(gè)工作環(huán)境都可以共享打印服務(wù)。用FreeBSD做中央文件服務(wù)器和CVS 服務(wù)器的好處是不會(huì)受到廣大的Windows病毒的影響。現(xiàn)在還有一點(diǎn)缺憾的是在FreeBSD上還沒有好的殺毒軟件可用,雖然有個(gè)老美的殺毒軟件,但是 因?yàn)槭歉顿M(fèi)的,付給老美一方面有點(diǎn)貴貴,另一方面也比較麻煩,希望我們國(guó)家的殺毒軟件廠商也能考慮做一個(gè)能在FreeBSD上運(yùn)行的版本,就算收點(diǎn)錢也可以。這樣的好處就在于可以在crontab里運(yùn)行殺毒軟件定期的掃描文件服務(wù)目錄中的文件是不是感染了病毒。其實(shí)這對(duì)于FreeBSD沒什么意義,因?yàn)镕reeBSD也不會(huì)受病毒的影響,但是使用這個(gè)文件服務(wù)的windows的機(jī)器就危險(xiǎn)了,這也算是我的一個(gè)期望吧,也許不太現(xiàn)實(shí)。在FreeBSD上安裝 CVS,Samba我都不太想多說了,文章很多了,我和老黃都曾經(jīng)寫過如何在 FreeBSD上安裝CVS server的文章。Samba很簡(jiǎn)單了用ports裝就完了。以后 有時(shí)間了我會(huì)把每個(gè)服務(wù)的安裝文檔整合進(jìn)來形成一個(gè)完整的東西的。現(xiàn)在我們重點(diǎn)講一下在FreeBSD上使用NFS的情況。其實(shí)這個(gè)是我***想說地,因?yàn)橥ㄟ^NFS和FreeBSD本身的軟件系統(tǒng)相結(jié)合能夠產(chǎn)生一個(gè)很意想不到 地效果。
在FreeBSD上如何使用NFS server 其實(shí)在FreeBSD上使用NFS server非常簡(jiǎn)單。打開NFS server的服務(wù)是個(gè)很簡(jiǎn)單的事情,只需要運(yùn)行/stand/sysinstall,選擇Configure,在這個(gè)菜單中選擇 Networking,里面有一個(gè)NFS Server的選項(xiàng),把它勾上以后會(huì)進(jìn)入編輯器編輯 一個(gè)文件/etc/exports你直接寫你要export出去的目錄就可以了。需要注意的一點(diǎn)是FreeBSD的NFS有個(gè)可能算是不太好的特點(diǎn),export出去的目錄必須是 mountpoint,也就是分區(qū)的掛點(diǎn)。例如你運(yùn)行mount的時(shí)候你能看到你現(xiàn)在都 mount了那些分區(qū),mount到的那個(gè)目錄就是相應(yīng)的掛點(diǎn)。這點(diǎn)上Solaris就可以指定目錄,所以我覺得FreeBSD這么弄有點(diǎn)不太爽,也許這樣設(shè)計(jì)比較簡(jiǎn)單吧。在我所要描述的方法中我們需要的是將/usr這個(gè)掛點(diǎn)export出去。這里不得不提到一個(gè)問題,很多從linux轉(zhuǎn)過來的兄弟都有個(gè)我們不太推薦的習(xí)慣,就是把整塊硬盤就分成一個(gè)"/",在linux下其實(shí)也不推薦這么用的,如果在FreeBSD 上這樣分的話,問題就更多了,比如用NFS的話,你就得把"/"都export出來,還不郁悶死了。下面我舉個(gè)例子在/etc/exports里面應(yīng)該怎么寫:
代碼:
/usr -alldirs -maproot=root 192.168.0.10
按照上面一行寫的意思就是將整個(gè)/usr這個(gè)分區(qū)都export出來供192.168.0.10 這個(gè)地址所使用,如果不寫ip地址就是export給所有人用的,這么干比較危險(xiǎn),如果不是在一個(gè)100%可靠的網(wǎng)絡(luò)里面******別這么干。-alldirs的意思就是 /usr中的每個(gè)目錄都可以作為NFS的掛點(diǎn)掛到遠(yuǎn)程,這點(diǎn)比較重要,我后面
會(huì)提到的,-maproot=root的意思就是給予對(duì)方 root權(quán)限來操作目錄。這里 說句題外話,Solaris在這點(diǎn)有個(gè)不如FreeBSD的地方,Solaris里面export 給的目標(biāo)是不能夠?qū)慽p地址的,必須寫對(duì)方機(jī)器的機(jī)器名,而且這個(gè)機(jī)器名必須是DNS服務(wù)器或者/etc/hosts里面存在的機(jī)器,否則不能共享,用起來有點(diǎn)繁瑣,不過可能是出于安全方面的考慮,呵呵。如果修改完了這個(gè)文件退出即可,如果是ee的話按ESC退出,如果是vi的話:wq退出。如果對(duì)其進(jìn)行 修改之后需要重啟NFS server可以使用下列命令來完成
代碼:
kill -s HUP `cat /var/run/mountd.pid`
我之前說了這么一大堆東西到底做什么用呢?下面我來解釋一下這臺(tái)中央服 務(wù)器裝NFS有什么用。在整個(gè)開發(fā)小組都是用FreeBSD的情況下,這樣做非常具有意義,主要是在裝機(jī)上,大家都知道無論是windows還是FreeBSD 還是linux,重新裝一臺(tái)機(jī)器都是一件極度痛苦的事情。因?yàn)橐紫纫獙?duì)系統(tǒng)進(jìn)行升級(jí),之后還有很多常用軟件需要安裝。雖然FreeBSD上面有ports 系統(tǒng),但是恐怕大家都有感覺,我們常規(guī)裝一臺(tái)FreeBSD的機(jī)器,需要在 裝好了之后升級(jí)源代碼,然后重新編譯內(nèi)核,編譯系統(tǒng),慢點(diǎn)的機(jī)器 make world一次等到花兒都謝了。還有一個(gè)問題就是,很多人其實(shí)不太喜 歡在工作的機(jī)器上裝ports和src的,因?yàn)檫@些東西很占地方,一套src差不多200多MB,一套ports也要300多MB。如果編譯完了不make clean的話src會(huì) 增加到350M左右,ports就更多了。
但是如果make clean的話,再升級(jí)系統(tǒng) 或者應(yīng)用軟件的時(shí)候你又郁悶了,因?yàn)閙ake這個(gè)工具有個(gè)特點(diǎn),如果代碼部分發(fā)生改變的時(shí)候,它只會(huì)編譯發(fā)生改變的代碼,而沒發(fā)生改變的代碼 就不會(huì)編譯,所以你要是上次編譯完了make clean了,再編譯就會(huì)從頭開始,如果不做make clean,再編譯一次的速度就很快了。有些人會(huì)問為什么不用FreeBSD提供的binary級(jí)的升級(jí)以及使用ports的package?原因是這樣的,對(duì)于系統(tǒng)的binary升級(jí)補(bǔ)丁,一方面提供的頻率比較低,而且我 還不知道怎么下載安裝。而且有的時(shí)候更新少的時(shí)候我不是太想升級(jí)。對(duì)于ports呢,我本人其實(shí)不太愿意用package,因?yàn)楣俜缴傻膒ackage更新的速度很慢,這點(diǎn)很郁悶。自己生成package呢,總有各種各樣的問題, 雖然現(xiàn)在ports可以make package-recusive 但是,我弄了幾次都沒弄出 一套完成的package出來。還是直接用ports來make install***方便,但是如果這些都在每臺(tái)機(jī)器上重新編譯的話,無疑是很痛苦的,如果是一臺(tái)快 機(jī)器的話,還可以,可能一天就能完了,如果是一臺(tái)慢的機(jī)器弄不好3、4 天…………實(shí)在是太煩人了。這個(gè)問題怎么解決才好呢?我們?cè)趺床拍茉?1個(gè)小時(shí)之內(nèi)裝出一個(gè)我們能夠方便使用的,帶有我們所需的應(yīng)用軟件的全新的機(jī)器呢?windows、linux恐怕都不太可能,我分析一下為什么這么說。從windows來講,我想各位裝的時(shí)候首先也都會(huì)升級(jí)系統(tǒng), windows 雖然有service pack可用,還有從windows update上下載單獨(dú)的binary 補(bǔ)丁,其實(shí)也是比較慢的。裝一次windows 2000的sp4也很慢,再去 windows update升級(jí)零散的補(bǔ)丁少說也得快1個(gè)小時(shí)。再加上裝亂七八糟 的軟件,恐怕也得裝個(gè)N小時(shí)。而linux呢,升級(jí)只升級(jí)內(nèi)核,速度很快,裝軟件有弄好的rpm,也很快但是還是有幾個(gè)問題,通常的linux本身裝起 來很慢,這個(gè)大家不能否認(rèn)。裝一下Red hat現(xiàn)在是個(gè)非常慢的事,沒個(gè) 幾個(gè)小時(shí)裝不完,而我裝一套FreeBSD的基本系統(tǒng)不超過15分鐘,這一點(diǎn)就沒法比了。而且linux升級(jí)只升級(jí)內(nèi)核的話,只能修正內(nèi)核的問題,如果是附帶的應(yīng)用有問題,例如BIND,ftp,apache之類的東西,還需要單獨(dú)找補(bǔ)丁包升級(jí),也要累死。而且如果需要定制應(yīng)用的話,rpm也得重新編譯才行,用binary就要放棄定制的靈活性。所以要是裝一套合用的linux 也是要很長(zhǎng)時(shí)間的。我所說的這些大家恐怕都有體會(huì)。但是FreeBSD上是 可以解決這個(gè)問題的,這個(gè)恐怕是源于FreeBSD非常合理的系統(tǒng)設(shè)計(jì), ports和src的系統(tǒng)都是非常靈活而且方便的系統(tǒng),這給我們快速安裝創(chuàng)造 了條件,只要結(jié)合了NFS就可以實(shí)現(xiàn)。
我現(xiàn)在從安裝一臺(tái)全新的FreeBSD來講解一下怎么來實(shí)現(xiàn)快速安裝。 我們之前的那臺(tái)服務(wù)器現(xiàn)在就派上用場(chǎng)了。那臺(tái)中央服務(wù)器上可以安裝 src和ports,我們用NFS server把它的/usr export出來,而在新裝的這臺(tái)機(jī)器上選擇不安裝src和ports,在系統(tǒng)安裝完畢之后,需要在/usr中建立 src和ports的目錄,然后我們通過下列命令來把中央服務(wù)器上的src和ports 掛到我們的機(jī)器上,我們假設(shè)中央服務(wù)器ip地址為192.168.0.1,而新裝
的機(jī)器的ip地址為192.168.0.10,我們已經(jīng)在中央服務(wù)器上向這個(gè)地址
export了它的/usr(方法參考前面提到的)
代碼:
mount_nfs 192.168.0.1:/usr/src /usr/src
mount_nfs 192.168.0.1:/usr/ports /usr/ports
這樣一來,我們新裝的機(jī)器上就有了src和ports了。中央服務(wù)器在安裝 的時(shí)候也會(huì)make kernel和make world的,如果客戶機(jī)的硬件和希望的配 置跟中央服務(wù)器不太一樣,只要在上面再寫個(gè)新的內(nèi)核配置文件,再用這個(gè)配置文件編譯一個(gè)適合客戶機(jī)的內(nèi)核就可以了,而make world對(duì)于那 臺(tái)機(jī)器都是一樣的,所以我們?cè)诳蛻魴C(jī)上直接make installworld就完了。 把漫長(zhǎng)的make world過程都給省了。裝應(yīng)用軟件也是一樣,只要有一臺(tái) 機(jī)器曾經(jīng)用這套ports make install裝過這個(gè)軟件,并且沒有make clean 的話,其他的機(jī)器就可以跑到這個(gè)目錄里面make reinstall一下就行了。我解釋一下為什么要make reinstall,而不是make install,這是因?yàn)?ports有個(gè)特點(diǎn),它會(huì)在這個(gè)應(yīng)用裝過以后保留下一個(gè)install_done的標(biāo) 記,你在每個(gè)裝完的應(yīng)用目錄里面的work目錄中能看到這個(gè)名為 .install_done.xxxxxx的文件,后面的xxxxxx是這個(gè)應(yīng)用的名字。如果 你換了臺(tái)機(jī)器使用這個(gè)ports的話,直接make install的時(shí)候會(huì)發(fā)現(xiàn)并沒 有執(zhí)行任何的安裝就結(jié)束了,就是因?yàn)閙ake檢測(cè)到了這個(gè)文件,就不會(huì)再執(zhí)行一次安裝了。沒關(guān)系,ports還為我們準(zhǔn)備了解決的辦法,這就是 make reinstall,簡(jiǎn)單吧。這里還有個(gè)問題,我覺得ports解決的很好, 因?yàn)橥ǔ:芏嘬浖婕暗胶芏嘁蕾囓浖绻@臺(tái)客戶機(jī)已經(jīng)安裝了一些依賴軟件,我在安裝一個(gè)依賴這些軟件的新軟件的時(shí)候,這些已經(jīng)安裝的 依賴軟件是不是也會(huì)重新來一遍呢?這不會(huì)很慢么?其實(shí)不會(huì)的,這涉及到多個(gè)系統(tǒng)共享一個(gè)ports時(shí)候多個(gè)系統(tǒng)安裝差異的問題,不過這個(gè)考慮其實(shí)是多余的了,因?yàn)镕reeBSD在安裝上一個(gè)應(yīng)用軟件之后會(huì)在/var/db/pkg 中保留一個(gè)這個(gè)軟件的安裝記錄,所以你在安裝一個(gè)依賴了很多軟件的新 軟件的時(shí)候,它會(huì)檢測(cè)你裝了什么,沒裝什么,已經(jīng)裝過了的就不會(huì)再安裝一次了。通過這樣的方法,我們重新安裝一個(gè)新的開發(fā)環(huán)境就變得 異常的快速,而且可以靈活的定制。
為什么會(huì)說靈活定制呢?你這裝得不也是binary么?是這樣的,以gnome2為例子,gnome2實(shí)際上是由一系列的小軟件組成的,這個(gè)大家應(yīng)該都清楚,如果我想定制其中一個(gè)小軟 件只要修改那個(gè)軟件的編譯參數(shù)重新編譯一遍就可以了,其他的部分依然不會(huì)受到影響。編譯單個(gè)的小軟件無論對(duì)于什么機(jī)器來講都是很快的所以對(duì)于安裝速度的影響,就很小了。這種方法無論對(duì)于批量裝機(jī),還是單獨(dú)定制都是個(gè)很爽的辦法。但是這個(gè)方法我為什么要放在這樣一個(gè)標(biāo)題下講,是因?yàn)檫@個(gè)方法需要一臺(tái)單獨(dú)的機(jī)器來做中央服務(wù)器,這對(duì) 于大多數(shù)的個(gè)人用戶是不現(xiàn)實(shí),也沒有意義的。但是卻對(duì)于有多個(gè)人的開發(fā)團(tuán)隊(duì)來講,一臺(tái)機(jī)器是個(gè)小問題,能夠快速的安裝出來一臺(tái)開發(fā)環(huán) 境能夠大幅度的提******率,具有的意義就非同一般了。而且這個(gè)方法也只需要這臺(tái)中央服務(wù)器定期更新它的src和ports,定期編譯,客戶機(jī)就 可以跟著一起升級(jí)了,省得大家重復(fù)勞動(dòng)了。提出這個(gè)方案是源于我們這個(gè)團(tuán)隊(duì)的開發(fā)環(huán)境都是使用的FreeBSD,因?yàn)槲覀兪沁M(jìn)行J2EE項(xiàng)目開發(fā)的,在FreeBSD上開發(fā)的時(shí)候我們需要編譯jdk、Xfree、gnome2、 eclipse等等軟件,這都是裝起來很慢的軟件,每臺(tái)機(jī)器都單獨(dú)安裝的 話,大家都得累死。使用這個(gè)方法的話,實(shí)在是爽的不得了。差不多一個(gè)小時(shí)左右,一臺(tái)合用的機(jī)器就完成了。補(bǔ)充一個(gè)需要注意就是大家 如果在共享一個(gè)ports的時(shí)候使用portupgrade時(shí)候需要小心,一定要加上-wW參數(shù),否則把共享的ports內(nèi)容給清光了,會(huì)有人很郁悶的……
***后我需要感謝黃冬教給我這個(gè)方法。其實(shí)這個(gè)方法是他們以前經(jīng)常 使用的方法,只不過不是用在開發(fā)環(huán)境的建立上,是他在門戶網(wǎng)站的時(shí) 候他們用來批量安裝web服務(wù)器的方法,所以對(duì)于所有門戶網(wǎng)站的管理員來講這也是一個(gè)非常有用的辦法。因?yàn)閾?jù)我所知,國(guó)內(nèi)幾個(gè)用FreeBSD 的門戶網(wǎng)站,都是有大批量的FreeBSD服務(wù)器集群來進(jìn)行服務(wù)的,裝機(jī)就成為一個(gè)工作量很大的工作,如果采用這種方法,大家裝機(jī)的時(shí)候也 能夠輕松不少了。而我個(gè)人的感覺其實(shí)在團(tuán)隊(duì)開發(fā)環(huán)境的建立上,使用這個(gè)方法其實(shí)比服務(wù)器的批量裝機(jī)還更有意義,因?yàn)榉?wù)器通常裝的 那些軟件還都比較小,而裝一臺(tái)開發(fā)用的機(jī)器要裝得大軟件就多的很了,所以我個(gè)人認(rèn)為這對(duì)于開發(fā)環(huán)境來講具有的意義更大。我把這個(gè) 方法貢獻(xiàn)出來,已經(jīng)很熟悉這個(gè)方法的朋友不要罵我,我只是覺得雖然這個(gè)方法用的已經(jīng)很普遍而且其實(shí)非常的簡(jiǎn)單,但是以前并沒有人 把它寫出來給大家共享一下,另外因?yàn)槠湓谑褂蒙嫌幸恍┬⌒〉募记尚枰⒁猓孕〉芪医o大家獻(xiàn)丑了。
(http://www.fanqiang.com)