【轉載】51CTO
安裝前的準備
FreeBSD對于系統的硬件適應能力比較強(相比Linux可能稍差,特別是對于新的顯示卡的支持;但對于服務器常用的硬件,包括SCSI設備的支持是相當完善的)。IA平臺的多數處理器,下至386,上至Pentium-4及其兼容的 CPU,都能夠運行FreeBSD。為了有效地安裝、運行FreeBSD,我個人推薦安裝 FreeBSD的系統至少要有2GB的剩余硬盤空間,以及至少64MB內存。這樣配置的電腦在今天是很容易找到的。考慮到FreeBSD一般都被配置作為服務器使用,上面的配置要求顯然是很容易做到的。
對于服務器來說,雙啟動是不合適的(服務器往往要求持續、長時間工作,而切換操作系統無疑需要停止服務。此外,雙啟動的系統穩定性比較差,某個操作系統的崩潰很可能破壞另一個操作系統)。FreeBSD支持和其他操作系統并存、并在開機時通過菜單選擇使用的操作系統,但我個人非常反對以這種方式使用 FreeBSD。
那么,讓我來從頭到尾地安裝一臺FreeBSD服務器,并說明FreeBSD的安裝。為了安裝FreeBSD,我準備了這樣一臺電腦:
CPU: Pentium II-233, 內存64MB, 硬盤(IDE)6GB, PS/2鍵盤、鼠標,20x光驅、無軟驅、RealTek8139網卡(TP-LINK)。
上述配置在今天是很容易做到的。當然,就服務器而言,這個配置確實慘了點,不過FreeBSD在上面運行,并承擔數據庫、動態網頁等服務是完全沒有問題的。
首先是準備FreeBSD的安裝盤。FreeBSD有許多種安裝方式,***簡單易行的方式就是使用光盤安裝;不過盡管如此,在沒有軟驅、光驅的計算機上也是可以通過BOOTP服務采用遠程引導的方式來安裝的。考慮到這種情況比較少見(筆者曾經在一臺沒有軟驅、光驅的計算機上成功安裝過FreeBSD,但方法是將硬盤掛接在另一臺計算機上,而不是通常的BOOTP),在此不介紹。
為了安裝 FreeBSD,我準備了一張空的CD-R。安裝FreeBSD***少只需要2張1.44MB的空白軟盤(其余文件使用FTP獲得),而安裝FreeBSD 只需要******張光盤就夠了。除非你的計算機很慢,或無法接入Internet,否則一般情況只需要下載******張光盤的鏡像。由于網絡中心的FTP上提供了 FreeBSD 4.6全部四張光盤的鏡像,以及4.6.2的前兩張光盤,因此我直接下載并刻了后者的第一張光盤。
打開計算機,進入 BIOS Setup。在其中選擇讓計算機從光盤啟動(這是關鍵步驟,雖然FreeBSD也可以從DOS環境中啟動安裝過程,但那可能會有一些問題)、禁用一切用不到的設備,包括串口、并口、軟驅控制器(這么做主要是為了提高性能,因為外圍設備可能會向主機發送中斷請求,而用不到的設備發送請求除了浪費CPU的時間之外沒有什么其他作用)。
FreeBSD安裝光盤上的系統使用的是GENERIC內核,這個內核可以適應絕大多數系統的情況。當然,正如他的名字“GENERIC(通用)”,這也帶來的較低的性能,例如,這個內核不能夠發揮雙CPU的能力,等等。不過既然安裝過程只會進行一次,我們也不必過分地在意它。
安裝光盤啟動(對于軟盤啟動來說,是根據提示將兩張軟盤的內容全部加載到內存中)完成后,首先出現的是配置內核。
配置內核通常不是必需的,因為FreeBSD能夠自動識別硬件。然而,如果你的硬件配置比較特殊(例如,有兩塊網卡,使用特殊的IRQ,比較古老,等等),那么可能需要手工配置一下內核。對于絕大多數情況來說,只要刪除那些用不到的設備,就能夠正常完成FreeBSD的安裝;如果你對于自己的硬件不熟悉,這一過程甚至可以跳過。
我個人比較喜歡刪除不用的設備,于是選擇Visual方式,將不需要的設備統統刪除。***后,按Q保存配置,進入FreeBSD的安裝程序sysinstall(8)。
FreeBSD基本系統的安裝
作為一個服務器管理員,經常性的服務器軟件更新是必不可少的。FreeBSD提供了非常便捷的升級方式——cvsup,它可以從FreeBSD中央 cvsup服務器,或某個cvsup鏡像上獲取FreeBSD的部分或全部源代碼,而且,它只下載那些修改過的源代碼,并且可以根據需要選擇適合你的版本 (使用-STABLE可以提供較好的穩定性以及操作系統的******特性,多數管理員都會選擇這個;使用-RELEASE能夠獲得成熟產品的品質,盡管話是這樣說,但實際上選擇這一分支的人很少;使用-CURRENT的用戶主要是參與FreeBSD開發的人員,這個分支包含了所有即將進入-STABLE分支的新特性,但不要指望這個分支能夠提供必要的穩定性保證,也不要指望它能夠帶來很好的性能,但所有的安全問題都是首先在這個分支內修正的。我將在后面詳細介紹這些)。
一旦***初的內核配置完成,它就會立即啟動,并根據配置文件啟動sysinstall(8)。我們將看到一個標準的文字模式配置界面,這有點類似于早期Visual Basic For MS-DOS編寫的應用程序的界面。
選擇Standard進入標準的FreeBSD安裝過程。首先是對磁盤進行分區。
FreeBSD對于磁盤的管理和Windows有比較大的差別。一個磁盤上通常有一個Partition就夠了,而一個Partition又可以分成若干個slice,并加以標記(label)。實際上,FreeBSD的slice基本上可以等同于Windows的磁盤分區,或卷的概念。
為了保證與FreeBSD共存的系統能夠啟動,默認情況下FreeBSD會保留一部分磁盤空間(64 cyl)。對于單一操作系統的計算機來說,這是完全沒有必要的。分區時按Shift+F可以選擇不使用這個特性,不過這種情況下,除了徹底毀掉這套 FreeBSD之外,恐怕就沒有其他方法能夠從這塊硬盤上引導其他操作系統了。為了完全使用磁盤空間,我選擇了不保留預留空間。
隨后是在這個Partition上創建slice。和Linux的情況類似,FreeBSD也使用單獨的交換區。這種設計可以避免碎片,也防止了對文件系統的影響,性能較好。通常情況下交換分區是內存的2-2.5倍,這足以應付日常的突發事件。/var用于保存那些不在集群中共享的文件,/tmp用來保存臨時文件,而/usr用來保存那些需要在集群中同步的文件。/就不用說了,它保存的是啟動系統需要的文件。
通常給/分配的空間是 128MB,/tmp和/var各256MB,剩下的都分給/usr。不過也有例外,如果打算做一個大型的郵件系統,則/var要大一些(通常郵件系統依賴/var來保存郵件)。當然,各個slice可以mount到不同的地方(例如,你可以把曾經的/usr變成/var),不過***開始配置好可以減少很多麻煩。
當然,偷懶的方法也是有的。在沒有slice,或沒有完全配完slice的情況下按A,系統會給出一組(或對剩下的label)默認的配置。如果你打算單純提供Web+數據庫這樣的服務,完全可以直接接受這組配置。
從FreeBSD 4.x開始,ufs支持了一個叫做SoftUpdates的技術。SoftUpdates的主要設計目標是提高文件系統性能。除了/所在的slice之外,所有的ufs slice都應打開SoftUpdates,這樣對于提高系統整體性能很有好處。(/雖然也是ufs slice,但打開SoftUpdates會造成系統不穩定——FreeBSD文檔如此警告,而筆者確實也吃過這個虧。不過,由于/的內容不需要經常變化,不打開SoftUpdates和打開了SoftUpdates幾乎沒有性能上的差別) 。SoftUpdates可以隨時通過tunefs(8)來打開或關閉。在label(8)程序中,打開SoftUpdates的標志是文件系統顯示為 ufs+s。
之后是選擇安裝介質和要裝的Distribution。它提供了幾組常見的情況。Minium安裝***小系統,包括一些基本的Unix程序。 Developer包括了一些開發工具;X-Developer和Kernel-Developer分別是X和內核開發人員用的。此外還有可選的 ports,它可以幫助我們來安裝應用程序。
當然,偷懶的方法也是有的。在沒有slice,或沒有完全配完slice的情況下按A,系統會給出一組(或對剩下的label)默認的配置。如果你打算單純提供Web+數據庫這樣的服務,完全可以直接接受這組配置。
從FreeBSD 4.x開始,ufs支持了一個叫做SoftUpdates的技術。SoftUpdates的主要設計目標是提高文件系統性能。除了/所在的slice之外,所有的ufs slice都應打開SoftUpdates,這樣對于提高系統整體性能很有好處。(/雖然也是ufs slice,但打開SoftUpdates會造成系統不穩定——FreeBSD文檔如此警告,而筆者確實也吃過這個虧。不過,由于/的內容不需要經常變化,不打開SoftUpdates和打開了SoftUpdates幾乎沒有性能上的差別) 。SoftUpdates可以隨時通過tunefs(8)來打開或關閉。在label(8)程序中,打開SoftUpdates的標志是文件系統顯示為 ufs+s。
之后是選擇安裝介質和要裝的Distribution。它提供了幾組常見的情況。Minium安裝***小系統,包括一些基本的Unix程序。 Developer包括了一些開發工具;X-Developer和Kernel-Developer分別是X和內核開發人員用的。此外還有可選的 ports,它可以幫助我們來安裝應用程序。
我通常使用的是Custom(定制安裝),不安裝源代碼、ports(因為這些可以從cvsup同步得到******的,安裝一遍浪費時間),只安裝XFree86(主要是為了運行cvsup,因為編譯不需要X的cvsup需要很長時間,而且很多其他的東西,如php要用到的gd等等,需要XFree86的庫文件的支持)、基本系統以及一部分庫文件。當然,您也可以根據需要選擇安裝其他組件。
完成之后系統就開始安裝了。注意,一旦安裝開始,所有前面做的分區、建立文件系統等操作就結結實實地寫到了硬盤上,再沒有反悔的機會了。如果您的硬盤上包含重要數據,那么請在這之前備份。
根據計算機速度的不同,這個過程可能持續10分鐘到數小時不等。在此過程中,除了光盤或硬盤出問題之外,基本上不會出現節外生枝的情況。按 Alt+F2 可以切換到用于調試sysinstall(8)的控制臺,Alt+F4可以切換到一個命令行控制臺,這些都是調試FreeBSD安裝過程,或應付緊急情況的,通常用不到。
全部系統文件安裝完成之后,sysinstall(8)會給出一個祝賀畫面。同時,它也告訴你如何在以后運行sysinstall(8)進行其他操作,如配置等等。實際上,在FreeBSD中sysinstall(8)基本上相當于Windows控制面板的作用。
隨后可以根據自己的情況配置網絡、設置時區、顯示字體、XWindow等等,并且創建新的用戶(FreeBSD中的內建管理員叫做root,但由于它擁有一切特權,因此完全靠它來做日常工作有時會不太方便,筆者自己就曾不慎以root身分刪除了modules,然后戰戰兢兢地重新編譯內核)。
FreeBSD安裝盤上還提供了一些packages。這些packages是預先遍一號的應用程序。對于一臺擁有很好的Internet連接的、速度足夠快的機器來說,并不需要安裝packages(KDE和X除外,編譯它們各需要花上一天一夜的功夫)。這臺機器速度還稱不上“足夠快”,所以我安裝了 cvsup,它在devel中。
到目前為止,我們已經安裝了FreeBSD的基本系統。由于FreeBSD基本系統中包括很多庫文件,并且,這些庫文件可能已經被發現存在問題,因此現在立刻安裝應用程序或服務(如Apache等等)是不合適的。此后我們將講解FreeBSD的在線升級(cvsup)、應用程序的安裝,以及優化。
更新FreeBSD
完成了安裝、配置,FreeBSD基本上就算裝完了。不過,目前為止沒有哪個通用操作系統能夠保證“bug-free”,FreeBSD也一樣。在重新啟動之后,我們需要做一些調整;并且,通過重新配置內核,我們可以得到一個更小、更快的操作系統。
******步要做的是同步源代碼。FreeBSD是一套開放源代碼的操作系統,它的全部源代碼都可以通過cvsup與中央cvsup服務器,或它的某個鏡像同步。
cvsup是一個可選的package,同樣的,它也可以從ports里面安裝(/usr/ports/devel/cvsup和 /usr/ports/devel/cvsup-nogui)??紤]到許多應用程序都依賴X的庫文件,在前面安裝的部分我安裝了它,并且直接安裝了 cvsup的package。不過,如果你有足夠的耐心去一個一個地make需要的ports,那么先安裝ports collection,然后make cvsup-nogui也是一個不錯的主意,盡管這需要比較長的時間。
創建一個用于cvsup(1)的supfile,命名為stable-supfile:
(default host中選定的cvsup服務器——ftp.bjpu.edu.cn對訪問的IP進行了限制,筆者只在北京工業大學校內使用過,因此如果您無法連接這個服務器,請嘗試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=.
隨后執行
cvsup -g -L 2 stable-supfile
這里需要稍微解釋一下FreeBSD的幾種版本。
FreeBSD包括3類分支:-RELEASE,-STABLE和-CURRENT。FreeBSD 3.x、4.x和5.0是目前受到維護的版本,如果你期待穩定運行,那么,可以選擇的******版本將是FreeBSD 4.6-STABLE(如果你是在4.6.2-RELEASE發行之后更新的,那么它實際上比4.6.2-RELEASE新,并且,它正式的CVS tag是RELENG_4,即FreeBSD 4-STABLE)。
那么,三類分支有什么區別呢?
FreeBSD的開發是非?;钴S的。系統中可能會隨時引入一些新的特性。***新的代碼是在-CURRENT分支中引入的。-CURRENT的修改非常頻繁,每天都可能有數百處修改。使用-CURRENT分支的FreeBSD需要耐心和勇氣,因為你的系統隨時可能崩潰(隨著FreeBSD 5.0開發尾聲的接近,這種現象已經越來越少),make world也可能空手而歸(沒有人保證-CURRENT分支能夠正常編譯),此外,這個分支的性能也不好(因為調試的原因,這個分支引入了大量的調試選項,這意味著運行速度不會太快)。當然,正像它的名字那樣,-CURRENT分支的版本也是******的5.0,而且,一切FreeBSD的錯誤和漏洞的修正都是首先在-CURRENT分支引入的。目前,-CURRENT分支碩果僅存的只有FreeBSD 5-CURRENT(指定cvs tag時寫“.”),這個分支包括了FreeBSD 5.0開發的***新進展。
FreeBSD 5中將引入大量的新特性,包括核心級線程(目前FreeBSD中的線程支持僅限于用戶級線程,這在多處理器的環境下性能不夠好,當然,目前使用fork ()來支持的多進程線程模擬能夠提供類似核心級線程的功能,但并不是所有的程序員都知道如何使用fork)、完整的Soft Updates(這一變化將提供更好的文件系統性能,同時提供更好的穩定性),等等。如果你有快速的Internet連接,一臺或一些空余的機器(當然,不是生產用的服務器),并且希望為FreeBSD的開發作貢獻,或者你關心操作系統的******發展,那么,-CURRENT分支是******的選擇。
此外,由于-CURRENT分支性能不好、穩定性不夠等這些缺點,對于生產的服務器來說,通常運行的應該是FreeBSD-STABLE。如同它的名字那樣,FreeBSD-STABLE的目的是“穩定地運行”。-CURRENT分支中的代碼,在經過一段時間(通常是7到90天,但安全更新屬于特例,通常會在幾個小時)的驗證之后,符合版本條件(有些新特性只能用于FreeBSD 5.0)的代碼會被FreeBSD-STABLE吸收,這個操作稱作MFC(Merge From -CURRENT,不是Microsoft Foundation Classes:P)。
由于FreeBSD 5.0的******個RELEASE至今仍然沒有發布,因此,目前還沒有5.0-STABLE。目前,FreeBSD-STABLE有兩個版本,FreeBSD 3-STABLE和FreeBSD 4-STABLE,分別對應3.x和4.x的***新穩定版代碼(對應的cvs tag分別是RELENG_3和RELENG_4)。由于版本的更新換代,其中3.x的-STABLE正在逐漸消亡。FreeBSD-STABLE每天平均會修改10個左右的文件。
每隔一段時間,FreeBSD的發行工程組(Release Engineering Team)會對FreeBSD-STABLE的源代碼樹進行鎖定。這段時間(目前的規定是30天,之前還有30天準備)內,所有的MFC操作都需要發行工程組的批準,因此,FreeBSD-STABLE在這個階段基本不會引入任何新的特性。經過這段時間之后,發行工程組會在***后鎖定ports樹,并 build一份所有的package,之后,這份鎖定的-STABLE,可能經過若干RC(Release Candidate),被命名為RELEASE,并制作光盤發行。
顧名思義,-RELEASE的設計目標是“發行”。一個版本一旦 RELEASE,那么他的功能就不會再增加了。此后的所有維護的目標都只有一個,那就是******穩定。如果你和-RELEASE分支同步,那么絕不會出現 make無法通過的情況,而且,通常這也可以保證你的系統“******”穩定,因為它不會引入任何新功能(例如,4.6就是4.6,如果你想要4.6.2的功能,必須明確地指定4.6.2)。
目前,FreeBSD有很多RELEASE版本,它們的cvs tag如下。我個人建議使用******的4.6.2-RELEASE。
對于多數人來說,-RELEASE是一個比較極端的選擇。無論何時出現版本升級,如果你想跟進,那都必須修改supfile,如果你選擇不跟進,那么就可能造成ports工作異常。如果經常更新,-RELEASE可以保證操作系統本身的安全性,但同其他分支一樣,如果ports出了問題,那么也得一塊 make,而既然這樣,還不如使用-STABLE。
如果你符合下面的條件,那么RELEASE分支可能比-STABLE分支更適合你
你使用的軟件對于操作系統的變化非常敏感,比如,它只能FreeBSD 4.5,而無法在4.6上運行;同時,你不打算采用它的更新版本,或者它的作者拒絕更新
操作系統的更新對于你來說沒有任何意義,比如,你打算把FreeBSD當作一個相對固定的嵌入式操作系統來使用,例如,作為防火墻的一部分更新會對你造成困擾,操作系統的絕大多數新特性對于你來說除了增加煩惱之外,不能帶來任何其他東西。-并且,符合以下的全部條件-
你每天察看FreeBSD,以及使用的全部軟件的安全公告
你的Internet連接比較通暢
目前我本人維護的所有主機,除了作為防火墻的那臺之外,使用的都是FreeBSD-STABLE。
一旦同步完源代碼,就應該對整個系統進行更新。如果你沒有每天察看安全公告的習慣,那就應該關心一下cvsup到底更新了哪些代碼。nectar是目前 FreeBSD的Security Officer。如果你發現他一下子更新了許多代碼,那么對你來說立即make world和kernel很可能是必需的。
為了更新整個系統,在/usr/src中執行
make world以及make kernel KERNCONF=內核配置文件名
當然,也可以連起來執行:
make world kernel KERNCONF=內核配置文件名
如果你的計算機運行速度較慢,那么,對于基本系統的更新(相當于不包括庫的一次world),可以用make most替代make world,但make world是一個不錯的主意,因為它能夠保證對C運行環境的改變應用到所有的程序中,如果修正的不是動態連接的C函數庫,那么make world可以保證代碼的一致性。
make kernel是一個需要重新啟動的操作。如果你的make world修改了系統的關鍵服務,那么******也重新啟動一下。我很少有耐心看完make world和kernel的執行,根據系統的運行速度不同,這需要一個小時到一天的時間,而且,不是所有的SSH客戶端都能夠長時間正確的執行,例如, SecureCRT的多個版本都有內存泄漏問題。
為了解決這個問題,我用下面的命令來完成更新:
make world kernel KERNCONF=內核配置文件名 clean > /var/log/world,out && reboot &
這個命令能夠記錄更新的全過程,如果在什么地方編譯失敗,你可以很快地找到原因。對于多數人來說,由于后面的&&,只需要察看uptime就能知道便以是否成功。
需要說明的是,FreeBSD的make world并不總能成功。有時需要修改一些環境變量才能成功完成make。為了保證make成功,在/usr/src中執行任何make操作之前,建議你看一眼UPDATING中是否有特殊的要求(這種要求并不是在FreeBSD Release的時候才會出現,很多時候他會在某個CURRENT中引入,然后隨著MFC進入-STABLE分支),并且,在進行大的版本升級之前(跨 RELEASE,甚至主版本號),首先執行下面的命令
mergemaster -p
并在make world之后執行
mergemaster -i
運行mergemaster腳本需要一定的Unix配置知識,不過,由于配置文件中包含很多幫助信息,因此,只要master.passwd、 group這樣的文件不出大問題(如果cvsup更新了master.passwd,那么就需要留神,因為master.passwd標準配置是root 口令為空,這時需要用m來合并,而不是使用i安裝),mergemaster并不會引入什么新的問題。
前一條命令是更新make的配置(/etc/defaults/make.conf和/etc/make.conf)。對于多數人來說,除非進行跨版本升級,否則一般情況下是不需要這樣做的。后一條命令是同步全部配置,并安裝以前不存在的配置文件,而不進行提示。
筆者曾經遇到過FreeBSD因為系統日期不正確而無法make的情況,因此,再次特別提醒大家,如果你的系統日期不正確,******是用date命令修改一下,或者干脆用ntpdate或ntpd來同步時間。關于如何使用ntp,將在以后說明。