隨后是在這個Partition上創(chuàng)建slice。和Linux的情況類似,F(xiàn)reeBSD也使用單獨(dú)的交換區(qū)。這種設(shè)計(jì)可以避免碎片,也防止了對文件系統(tǒng)的影響,性能較好。通常情況下交換分區(qū)是內(nèi)存的2-2.5倍,這足以應(yīng)付日常的突發(fā)事件。/var用于保存那些不在集群中共享的文件,/tmp用來保存臨時文件,而/usr用來保存那些需要在集群中同步的文件。/就不用說了,它保存的是啟動系統(tǒng)需要的文件。

通常給/分配的空間是 128MB,/tmp和/var各256MB,剩下的都分給/usr。不過也有例外,如果打算做一個大型的郵件系統(tǒng),則/var要大一些(通常郵件系統(tǒng)依賴/var來保存郵件)。當(dāng)然,各個slice可以mount到不同的地方(例如,你可以把曾經(jīng)的/usr變成/var),不過最開始配置好可以減少很多麻煩。

當(dāng)然,偷懶的方法也是有的。在沒有slice,或沒有完全配完slice的情況下按A,系統(tǒng)會給出一組(或?qū)κO碌膌abel)默認(rèn)的配置。如果你打算單純提供Web+數(shù)據(jù)庫這樣的服務(wù),完全可以直接接受這組配置。

從FreeBSD 4.x開始,ufs支持了一個叫做SoftUpdates的技術(shù)。SoftUpdates的主要設(shè)計(jì)目標(biāo)是提高文件系統(tǒng)性能。除了/所在的slice之外,所有的ufs slice都應(yīng)打開SoftUpdates,這樣對于提高系統(tǒng)整體性能很有好處。(/雖然也是ufs slice,但打開SoftUpdates會造成系統(tǒng)不穩(wěn)定——FreeBSD文檔如此警告,而筆者確實(shí)也吃過這個虧。不過,由于/的內(nèi)容不需要經(jīng)常變化,不打開SoftUpdates和打開了SoftUpdates幾乎沒有性能上的差別) 。SoftUpdates可以隨時通過tunefs(8)來打開或關(guān)閉。在label(8)程序中,打開SoftUpdates的標(biāo)志是文件系統(tǒng)顯示為 ufs+s。

之后是選擇安裝介質(zhì)和要裝的Distribution。它提供了幾組常見的情況。Minium安裝最小系統(tǒng),包括一些基本的Unix程序。 Developer包括了一些開發(fā)工具;X-Developer和Kernel-Developer分別是X和內(nèi)核開發(fā)人員用的。此外還有可選的 ports,它可以幫助我們來安裝應(yīng)用程序。

當(dāng)然,偷懶的方法也是有的。在沒有slice,或沒有完全配完slice的情況下按A,系統(tǒng)會給出一組(或?qū)κO碌膌abel)默認(rèn)的配置。如果你打算單純提供Web+數(shù)據(jù)庫這樣的服務(wù),完全可以直接接受這組配置。

從FreeBSD 4.x開始,ufs支持了一個叫做SoftUpdates的技術(shù)。SoftUpdates的主要設(shè)計(jì)目標(biāo)是提高文件系統(tǒng)性能。除了/所在的slice之外,所有的ufs slice都應(yīng)打開SoftUpdates,這樣對于提高系統(tǒng)整體性能很有好處。(/雖然也是ufs slice,但打開SoftUpdates會造成系統(tǒng)不穩(wěn)定——FreeBSD文檔如此警告,而筆者確實(shí)也吃過這個虧。不過,由于/的內(nèi)容不需要經(jīng)常變化,不打開SoftUpdates和打開了SoftUpdates幾乎沒有性能上的差別) 。SoftUpdates可以隨時通過tunefs(8)來打開或關(guān)閉。在label(8)程序中,打開SoftUpdates的標(biāo)志是文件系統(tǒng)顯示為 ufs+s。

之后是選擇安裝介質(zhì)和要裝的Distribution。它提供了幾組常見的情況。Minium安裝最小系統(tǒng),包括一些基本的Unix程序。 Developer包括了一些開發(fā)工具;X-Developer和Kernel-Developer分別是X和內(nèi)核開發(fā)人員用的。此外還有可選的 ports,它可以幫助我們來安裝應(yīng)用程序。

我通常使用的是Custom(定制安裝),不安裝源代碼、ports(因?yàn)檫@些可以從cvsup同步得到最新的,安裝一遍浪費(fèi)時間),只安裝XFree86(主要是為了運(yùn)行cvsup,因?yàn)榫幾g不需要X的cvsup需要很長時間,而且很多其他的東西,如php要用到的gd等等,需要XFree86的庫文件的支持)、基本系統(tǒng)以及一部分庫文件。當(dāng)然,您也可以根據(jù)需要選擇安裝其他組件。

完成之后系統(tǒng)就開始安裝了。注意,一旦安裝開始,所有前面做的分區(qū)、建立文件系統(tǒng)等操作就結(jié)結(jié)實(shí)實(shí)地寫到了硬盤上,再沒有反悔的機(jī)會了。如果您的硬盤上包含重要數(shù)據(jù),那么請?jiān)谶@之前備份。

根據(jù)計(jì)算機(jī)速度的不同,這個過程可能持續(xù)10分鐘到數(shù)小時不等。在此過程中,除了光盤或硬盤出問題之外,基本上不會出現(xiàn)節(jié)外生枝的情況。按 Alt+F2 可以切換到用于調(diào)試sysinstall(8)的控制臺,Alt+F4可以切換到一個命令行控制臺,這些都是調(diào)試FreeBSD安裝過程,或應(yīng)付緊急情況的,通常用不到。

全部系統(tǒng)文件安裝完成之后,sysinstall(8)會給出一個祝賀畫面。同時,它也告訴你如何在以后運(yùn)行sysinstall(8)進(jìn)行其他操作,如配置等等。實(shí)際上,在FreeBSD中sysinstall(8)基本上相當(dāng)于Windows控制面板的作用。

隨后可以根據(jù)自己的情況配置網(wǎng)絡(luò)、設(shè)置時區(qū)、顯示字體、XWindow等等,并且創(chuàng)建新的用戶(FreeBSD中的內(nèi)建管理員叫做root,但由于它擁有一切特權(quán),因此完全靠它來做日常工作有時會不太方便,筆者自己就曾不慎以root身分刪除了modules,然后戰(zhàn)戰(zhàn)兢兢地重新編譯內(nèi)核)。

FreeBSD安裝盤上還提供了一些packages。這些packages是預(yù)先遍一號的應(yīng)用程序。對于一臺擁有很好的Internet連接的、速度足夠快的機(jī)器來說,并不需要安裝packages(KDE和X除外,編譯它們各需要花上一天一夜的功夫)。這臺機(jī)器速度還稱不上“足夠快”,所以我安裝了 cvsup,它在devel中。

到目前為止,我們已經(jīng)安裝了FreeBSD的基本系統(tǒng)。由于FreeBSD基本系統(tǒng)中包括很多庫文件,并且,這些庫文件可能已經(jīng)被發(fā)現(xiàn)存在問題,因此現(xiàn)在立刻安裝應(yīng)用程序或服務(wù)(如Apache等等)是不合適的。此后我們將講解FreeBSD的在線升級(cvsup)、應(yīng)用程序的安裝,以及優(yōu)化。

更新FreeBSD

完成了安裝、配置,F(xiàn)reeBSD基本上就算裝完了。不過,目前為止沒有哪個通用操作系統(tǒng)能夠保證“bug-free”,F(xiàn)reeBSD也一樣。在重新啟動之后,我們需要做一些調(diào)整;并且,通過重新配置內(nèi)核,我們可以得到一個更小、更快的操作系統(tǒng)。

第一步要做的是同步源代碼。FreeBSD是一套開放源代碼的操作系統(tǒng),它的全部源代碼都可以通過cvsup與中央cvsup服務(wù)器,或它的某個鏡像同步。

cvsup是一個可選的package,同樣的,它也可以從ports里面安裝(/usr/ports/devel/cvsup和 /usr/ports/devel/cvsup-nogui)??紤]到許多應(yīng)用程序都依賴X的庫文件,在前面安裝的部分我安裝了它,并且直接安裝了 cvsup的package。不過,如果你有足夠的耐心去一個一個地make需要的ports,那么先安裝ports collection,然后make cvsup-nogui也是一個不錯的主意,盡管這需要比較長的時間。

創(chuàng)建一個用于cvsup(1)的supfile,命名為stable-supfile:

(default host中選定的cvsup服務(wù)器——ftp.bjpu.edu.cn對訪問的IP進(jìn)行了限制,筆者只在北京工業(yè)大學(xué)校內(nèi)使用過,因此如果您無法連接這個服務(wù)器,請嘗試www.cn.freebsd.org,或cvsup.freebsd.org)

*default host=ftp.bjpu.edu.cn

*default base=/usr

*default prefix=/usr

*default release=cvs tag=RELENG_4

*default delete use-rel-suffix

src-all

ports-all tag=.

隨后執(zhí)行

cvsup -g -L 2 stable-supfile

這里需要稍微解釋一下FreeBSD的幾種版本。

FreeBSD包括3類分支:-RELEASE,-STABLE和-CURRENT。FreeBSD 3.x、4.x和5.0是目前受到維護(hù)的版本,如果你期待穩(wěn)定運(yùn)行,那么,可以選擇的最新版本將是FreeBSD 4.6-STABLE(如果你是在4.6.2-RELEASE發(fā)行之后更新的,那么它實(shí)際上比4.6.2-RELEASE新,并且,它正式的CVS tag是RELENG_4,即FreeBSD 4-STABLE)。

那么,三類分支有什么區(qū)別呢?

FreeBSD的開發(fā)是非?;钴S的。系統(tǒng)中可能會隨時引入一些新的特性。最新的代碼是在-CURRENT分支中引入的。-CURRENT的修改非常頻繁,每天都可能有數(shù)百處修改。使用-CURRENT分支的FreeBSD需要耐心和勇氣,因?yàn)槟愕南到y(tǒng)隨時可能崩潰(隨著FreeBSD 5.0開發(fā)尾聲的接近,這種現(xiàn)象已經(jīng)越來越少),make world也可能空手而歸(沒有人保證-CURRENT分支能夠正常編譯),此外,這個分支的性能也不好(因?yàn)檎{(diào)試的原因,這個分支引入了大量的調(diào)試選項(xiàng),這意味著運(yùn)行速度不會太快)。當(dāng)然,正像它的名字那樣,-CURRENT分支的版本也是最新的5.0,而且,一切FreeBSD的錯誤和漏洞的修正都是首先在-CURRENT分支引入的。目前,-CURRENT分支碩果僅存的只有FreeBSD 5-CURRENT(指定cvs tag時寫“.”),這個分支包括了FreeBSD 5.0開發(fā)的最新進(jìn)展。

FreeBSD 5中將引入大量的新特性,包括核心級線程(目前FreeBSD中的線程支持僅限于用戶級線程,這在多處理器的環(huán)境下性能不夠好,當(dāng)然,目前使用fork ()來支持的多進(jìn)程線程模擬能夠提供類似核心級線程的功能,但并不是所有的程序員都知道如何使用fork)、完整的Soft Updates(這一變化將提供更好的文件系統(tǒng)性能,同時提供更好的穩(wěn)定性),等等。如果你有快速的Internet連接,一臺或一些空余的機(jī)器(當(dāng)然,不是生產(chǎn)用的服務(wù)器),并且希望為FreeBSD的開發(fā)作貢獻(xiàn),或者你關(guān)心操作系統(tǒng)的最新發(fā)展,那么,-CURRENT分支是最好的選擇。

此外,由于-CURRENT分支性能不好、穩(wěn)定性不夠等這些缺點(diǎn),對于生產(chǎn)的服務(wù)器來說,通常運(yùn)行的應(yīng)該是FreeBSD-STABLE。如同它的名字那樣,F(xiàn)reeBSD-STABLE的目的是“穩(wěn)定地運(yùn)行”。-CURRENT分支中的代碼,在經(jīng)過一段時間(通常是7到90天,但安全更新屬于特例,通常會在幾個小時)的驗(yàn)證之后,符合版本條件(有些新特性只能用于FreeBSD 5.0)的代碼會被FreeBSD-STABLE吸收,這個操作稱作MFC(Merge From -CURRENT,不是Microsoft Foundation Classes:P)。

由于FreeBSD 5.0的第一個RELEASE至今仍然沒有發(fā)布,因此,目前還沒有5.0-STABLE。目前,F(xiàn)reeBSD-STABLE有兩個版本,F(xiàn)reeBSD 3-STABLE和FreeBSD 4-STABLE,分別對應(yīng)3.x和4.x的最新穩(wěn)定版代碼(對應(yīng)的cvs tag分別是RELENG_3和RELENG_4)。由于版本的更新?lián)Q代,其中3.x的-STABLE正在逐漸消亡。FreeBSD-STABLE每天平均會修改10個左右的文件。

每隔一段時間,F(xiàn)reeBSD的發(fā)行工程組(Release Engineering Team)會對FreeBSD-STABLE的源代碼樹進(jìn)行鎖定。這段時間(目前的規(guī)定是30天,之前還有30天準(zhǔn)備)內(nèi),所有的MFC操作都需要發(fā)行工程組的批準(zhǔn),因此,F(xiàn)reeBSD-STABLE在這個階段基本不會引入任何新的特性。經(jīng)過這段時間之后,發(fā)行工程組會在最后鎖定ports樹,并 build一份所有的package,之后,這份鎖定的-STABLE,可能經(jīng)過若干RC(Release Candidate),被命名為RELEASE,并制作光盤發(fā)行。

顧名思義,-RELEASE的設(shè)計(jì)目標(biāo)是“發(fā)行”。一個版本一旦 RELEASE,那么他的功能就不會再增加了。此后的所有維護(hù)的目標(biāo)都只有一個,那就是絕對穩(wěn)定。如果你和-RELEASE分支同步,那么絕不會出現(xiàn) make無法通過的情況,而且,通常這也可以保證你的系統(tǒng)“絕對”穩(wěn)定,因?yàn)樗粫肴魏涡鹿δ?例如,4.6就是4.6,如果你想要4.6.2的功能,必須明確地指定4.6.2)。

目前,F(xiàn)reeBSD有很多RELEASE版本,它們的cvs tag如下。我個人建議使用最新的4.6.2-RELEASE。

對于多數(shù)人來說,-RELEASE是一個比較極端的選擇。無論何時出現(xiàn)版本升級,如果你想跟進(jìn),那都必須修改supfile,如果你選擇不跟進(jìn),那么就可能造成ports工作異常。如果經(jīng)常更新,-RELEASE可以保證操作系統(tǒng)本身的安全性,但同其他分支一樣,如果ports出了問題,那么也得一塊 make,而既然這樣,還不如使用-STABLE。

如果你符合下面的條件,那么RELEASE分支可能比-STABLE分支更適合你

  • 你使用的軟件對于操作系統(tǒng)的變化非常敏感,比如,它只能FreeBSD 4.5,而無法在4.6上運(yùn)行;同時,你不打算采用它的更新版本,或者它的作者拒絕更新
  • 操作系統(tǒng)的更新對于你來說沒有任何意義,比如,你打算把FreeBSD當(dāng)作一個相對固定的嵌入式操作系統(tǒng)來使用,例如,作為防火墻的一部分
  • 更新會對你造成困擾,操作系統(tǒng)的絕大多數(shù)新特性對于你來說除了增加煩惱之外,不能帶來任何其他東西。-并且,符合以下的全部條件-
  • 你每天察看FreeBSD,以及使用的全部軟件的安全公告
  • 你的Internet連接比較通暢

目前我本人維護(hù)的所有主機(jī),除了作為防火墻的那臺之外,使用的都是FreeBSD-STABLE。

一旦同步完源代碼,就應(yīng)該對整個系統(tǒng)進(jìn)行更新。如果你沒有每天察看安全公告的習(xí)慣,那就應(yīng)該關(guān)心一下cvsup到底更新了哪些代碼。nectar是目前 FreeBSD的Security Officer。如果你發(fā)現(xiàn)他一下子更新了許多代碼,那么對你來說立即make world和kernel很可能是必需的。

為了更新整個系統(tǒng),在/usr/src中執(zhí)行

make world

以及

make kernel KERNCONF=內(nèi)核配置文件名

當(dāng)然,也可以連起來執(zhí)行:

make world kernel KERNCONF=內(nèi)核配置文件名

如果你的計(jì)算機(jī)運(yùn)行速度較慢,那么,對于基本系統(tǒng)的更新(相當(dāng)于不包括庫的一次world),可以用

make most

替代make world,但make world是一個不錯的主意,因?yàn)樗軌虮WC對C運(yùn)行環(huán)境的改變應(yīng)用到所有的程序中,如果修正的不是動態(tài)連接的C函數(shù)庫,那么make world可以保證代碼的一致性。

make kernel是一個需要重新啟動的操作。如果你的make world修改了系統(tǒng)的關(guān)鍵服務(wù),那么最好也重新啟動一下。我很少有耐心看完make world和kernel的執(zhí)行,根據(jù)系統(tǒng)的運(yùn)行速度不同,這需要一個小時到一天的時間,而且,不是所有的SSH客戶端都能夠長時間正確的執(zhí)行,例如, SecureCRT的多個版本都有內(nèi)存泄漏問題。

為了解決這個問題,我用下面的命令來完成更新:

make world kernel KERNCONF=內(nèi)核配置文件名 clean > /var/log/world,out && reboot &

這個命令能夠記錄更新的全過程,如果在什么地方編譯失敗,你可以很快地找到原因。對于多數(shù)人來說,由于后面的&&,只需要察看uptime就能知道便以是否成功。

需要說明的是,F(xiàn)reeBSD的make world并不總能成功。有時需要修改一些環(huán)境變量才能成功完成make。為了保證make成功,在/usr/src中執(zhí)行任何make操作之前,建議你看一眼UPDATING中是否有特殊的要求(這種要求并不是在FreeBSD Release的時候才會出現(xiàn),很多時候他會在某個CURRENT中引入,然后隨著MFC進(jìn)入-STABLE分支),并且,在進(jìn)行大的版本升級之前(跨 RELEASE,甚至主版本號),首先執(zhí)行下面的命令

mergemaster -p

并在make world之后執(zhí)行

mergemaster -i

運(yùn)行mergemaster腳本需要一定的Unix配置知識,不過,由于配置文件中包含很多幫助信息,因此,只要master.passwd、 group這樣的文件不出大問題(如果cvsup更新了master.passwd,那么就需要留神,因?yàn)閙aster.passwd標(biāo)準(zhǔn)配置是root 口令為空,這時需要用m來合并,而不是使用i安裝),mergemaster并不會引入什么新的問題。

前一條命令是更新make的配置(/etc/defaults/make.conf和/etc/make.conf)。對于多數(shù)人來說,除非進(jìn)行跨版本升級,否則一般情況下是不需要這樣做的。后一條命令是同步全部配置,并安裝以前不存在的配置文件,而不進(jìn)行提示。

筆者曾經(jīng)遇到過FreeBSD因?yàn)橄到y(tǒng)日期不正確而無法make的情況,因此,再次特別提醒大家,如果你的系統(tǒng)日期不正確,最好是用date命令修改一下,或者干脆用ntpdate或ntpd來同步時間。關(guān)于如何使用ntp,將在以后說明。

分享到

zhaohang

相關(guān)推薦