FreeBSD服務器的安裝與優化

      FreeBSD服務器的安裝與優化
      
      對於許多電腦用戶來說,FreeBSD還是一個比較陌生的系統。本文將以FreeBSD 4.7
      Release爲例,一步一步地帶您安裝一份完整的FreeBSD操作系統。
 
      安裝前的準備

      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(Cool。
 
      FreeBSD基本系統的安裝

      作爲一個服務器管理員,經常性的服務器軟件更新是必不可少的。FreeBSD提供了非常便捷的升級方式——cvsup,它可以從FreeBSD中央
      cvsup服務器,或某個cvsup鏡像上獲取FreeBSD的部分或全部源代碼,而且,它只下載那些修改過的源代碼,並且可以根據需要選擇適合你的版本
      (使用-STABLE可以提供較好的穩定性以及操作系統的最新特性,多數管理員都會選擇這個;使用-RELEASE能夠獲得成熟產品的品質,儘管話是這樣說,但實際上選擇這一分支的人很少;使用-CURRENT的用戶主要是參與FreeBSD開發的人員,這個分支包含了所有即將進入-STABLE分支的新特性,但不要指望這個分支能夠提供必要的穩定性保證,也不要指望它能夠帶來很好的性能,但所有的安全問題都是首先在這個分支內修正的。我將在後面詳細介紹這些)。
 
      一旦最初的內核配置完成,它就會立即啓動,並根據配置文件啓動sysinstall(Cool。我們將看到一個標準的文字模式配置界面,這有點類似於早期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(Cool來打開或關閉。在label(Cool程序中,打開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(Cool的控制檯,Alt+F4可以切換到一個命令行控制檯,這些都是調試FreeBSD安裝過程,或應付緊急情況的,通常用不到。
 
      全部系統文件安裝完成之後,sysinstall(Cool會給出一個祝賀畫面。同時,它也告訴你如何在以後運行sysinstall(Cool進行其他操作,如配置等等。實際上,在FreeBSD中sysinstall(Cool基本上相當於Windows控制面板的作用。
 
      隨後可以根據自己的情況配置網絡、設置時區、顯示字體、XWindow等等,並且創建新的用戶(FreeBSD中的內建管理員叫做root,但由於它擁有一切特權,因此完全靠它來做日常工作有時會不太方便,筆者自己就曾不慎以root身分刪除了modules,然後戰戰兢兢地重新編譯內核)。
 
 

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

      到目前爲止,我們已經安裝了FreeBSD的基本系統。由於FreeBSD基本系統中包括很多庫文件,並且,這些庫文件可能已經被發現存在問題,因此現在立刻安裝應用程序或服務(如Apache等等)是不合適的。此後我們將講解FreeBSD的在線升級(cvsup)、應用程序的安裝,以及優化。
            admin2006-11-28 10:39 PM
 
      FreeBSD服務器的安裝與優化(2)
      
      更新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的開發是非常活躍的。系統中可能會隨時引入一些新的特性。最新的代碼是在-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,將在以後說明。
 
      以後我們將講解FreeBSD內核的配置,以及如何配置make.conf來優化FreeBSD的編譯結果。
            admin2006-11-28 10:40 PM
 
      FreeBSD服務器的安裝與優化(3)
      
      “簡單的東西不容易出問題。”

      至理名言!事實上,削減操作系統中那些對你沒用的功能是一件非常重要的事情。這不僅僅意味着一個更小的操作系統,佔用更少的磁盤空間(現在的硬盤少說也有幾十GB,幾兆的空間根本就是九牛一毛),而且意味着你被***的可能性也更低——簡而言之,你不需要擔心操作系統中沒有安裝的模塊存在問題會對你造成影響。
 
      這篇文章中,我們將一起對FreeBSD-i386的內核進行優化配置。這篇文章是針對FreeBSD4.7-STABLE寫的,並且,FreeBSD
      4.x的配置不會和這篇文章有太大出入。如果你要優化FreeBSD 5或FreeBSD
      2/3的內核的話,則需要仔細參考它們的LINT文件了(後面將會提到)。
 

      [注意:FreeBSD
      5.0預定將於2002年11月20日發佈。FreeBSD的開發組非常重視發行版本的質量,並認爲這比發行版本的計劃還重要,但由於同樣的原因,我們往往會發現FreeBSD實際發行的版本比預定計劃晚一些,通常在半個月之內。FreeBSD
      5.0作爲FreeBSD近期最爲重要的發行版本,很可能也會延後發表,但筆者個人認爲無論如何我們在今年年底之前肯定是可以看到最終的發行版本的。
      FreeBSD 5.0對系統進行了大量的修改,這一系列的文章將在FreeBSD
      5.0發佈當天發表針對5.0的修訂版本,而現有版本將保留,但進入維護階段,不再引入新的內容。]
 
      FreeBSD的源代碼可以直接從中央cvsup服務器同步,也可以作爲系統的一部分在安裝的時候一兵裝上。前面已經說過如何同步源代碼,在此不再贅述。
      FreeBSD的源代碼(通常在/usr/src)包含建造基本系統的全部代碼,而在/usr/src/sys中則有若干個目錄,對應不同的計算機體系結構(4.x只支持i386和alpha)。i386是一個泛指的名字,包含了與Intel
      80386兼容的所有機器,並不是特指80386。
 
      簡單介紹一下FreeBSD的內核文件。在4.x系統中,/kernel這個文件是默認的內核,通常正常啓動使用的就是它。
      /kernel.GENERIC這個文件是兼容性較強的內核,如果/kernel無法引導系統,就得靠這個文件來引導。/kernel.old是本次make
      kernel之前的內核,通常如果你的kernel壞掉,也可以考慮使用/kernel.old來引導系統。
 
      /modules/是內核的模塊,而/modules.old/是對應/kernel.old的模塊。這些文件在每次替換kernel的時候都會同時替換。
 
      在5.0中,內核以及內核的模塊都被保存在/boot/kernel中。
 
      在/usr/src/sys/i386/conf中有兩個配置文件,GENERIC和LINT。其中GENERIC是make
      kernel的默認配置文件,直接make
      kernel生成的是GENERIC內核,但安裝時命名爲/kernel。系統在安裝時會安裝一個kernel.GENERIC,以後,這個文件不會跟隨系統的make
      kernel更新,因此,如果你認爲這個文件有必要更新的話,需要手工make
      kernel,並把/kernel改名爲kernel.GENERIC。當然,通常並不需要這樣做。
 
      LINT是包括幾乎所有內核編譯配置詳細信息的文件。這個配置並不是用來真正建立kernel的,他的主要用途是向用戶展示可用的內核編譯配置。在修改內核編譯配置時,最好先參考這個文件。
      爲了配置自己的內核,應將GENERIC複製爲一個另外的文件。習慣上這個文件和主機名相同。例如,我把自己的這臺Web機器命名爲apache.intranet.frontfree.net,就把配置文件命名爲APACHE:
            admin2006-11-28 10:51 PM
 
      cd /usr/src/sys/i386/conf
      cp GENERIC APACHE
      隨後,用ee APACHE編輯它。我們拿一個實際的GENERIC文件來說明。
      爲了節省篇幅,這個文件頭上的註釋被刪掉了一部分。
      machine i386         # 體系模型爲i386
      cpu I386_CPU         # 支持80386
      cpu I486_CPU         # 支持80486
      cpu I586_CPU         # 支持Pentium
      cpu I686_CPU         # 支持Pentium Pro以及更高
      ident GENERIC         # 內核文件的名字
      maxusers 0          # 自動檢測同時允許的最大用戶數
      #makeoptions DEBUG=-g # 包含調試符號。通常只有current版本打開
      options MATH_EMULATE  #支持協處理器模擬
      options INET      #支持互聯網
      options INET6     #IPv6通訊協議
      options FFS      #伯克利快速文件系統
      options FFS_ROOT    #FFS作爲根設備[必須保留]
      options SOFTUPDATES  #打開FFS soft updates支持
      options UFS_DIRHASH  #提高大型目錄的支持
      options MFS      #內存文件系統
      options MD_ROOT    #MD作爲根設備
      options NFS      #Network Filesystem
      options NFS_ROOT    #NFS作爲根設備(需要NFS)
      options MSDOSFS    #MSDOS文件系統
      options CD9660     #ISO 9660文件系統(光盤)
      options CD9660_ROOT  #CD-ROM作爲根設備(需要CD9660)
      options PROCFS     #進程文件系統
      options COMPAT_43   #兼容4.3BSD[必須保留]
      options SCSI_DELAY=15000 #檢測SCSI設備前的延時(ms)
      options UCONSOLE    #用戶可以奪取控制檯
      options USERCONFIG   #boot -c編輯器 editor
      options VISUAL_USERCONFIG #菜單式boot -c編輯器
      options KTRACE     #ktrace(1)支持
      options SYSVSHM    #SYSV-風格的共享內存
      options SYSVMSG    #SYSV-風格的消息隊列
      options SYSVSEM    #SYSV-風格的信號量(semaphores)
      options P1003_1B    #Posix P1003_1B實時擴展
      options _KPOSIX_PRIORITY_SCHEDULING
      options ICMP_BANDLIM  #對惡意ICMP請求進行限制
      options KBD_INSTALL_CDEV # 在/dev安裝一個CDEV設備
      # 下面兩項在製作對稱多處理器(SMP)內核時需要
      #options SMP      #對稱多處理器內核
      #options APIC_IO    #對稱(APIC) I/O
      device isa
      device eisa
      device pci
      # 軟驅
      device fdc0 at isa? port IO_FD1 irq 6 drq 2
      device fd0 at fdc0 drive 0
      device fd1 at fdc0 drive 1
      #
      # 如果使用東芝Libretto以及他的Y-E Y-E Data PCMCIA軟驅
      # 不要使用上面的fdc0,而應使用
      #device fdc0
      # ATA以及ATAPI設備
      device ata0 at isa? port IO_WD1 irq 14
      device ata1 at isa? port IO_WD2 irq 15
      device ata
      device atadisk # ATA 磁盤驅動器(IDE硬盤)
      device atapicd # ATAPI 光驅
      device atapifd # ATAPI 軟驅
      device atapist # ATAPI 磁帶機
      options ATA_STATIC_ID #靜態設備編號
      # SCSI控制器
      device ahb # EISA AHA1742 family
      device ahc # AHA2940 板載AIC7xxx設備
      device amd # AMD 53C974 (Tekram DC-390(T))
      device isp # Qlogic family
      device ncr # NCR/Symbios Logic
      device sym # NCR/Symbios Logic (較新的芯片組)
      options SYM_SETUP_LP_PROBE_MAP=0x40
      # 使用ncr可以在配置了sym和ncr的情況下掛接舊的NCR設備
      device adv0 at isa?
      device adw
      device bt0 at isa?
      device aha0 at isa?
      device aic0 at isa?
      device ncv # NCR 53C500
      device nsp # Workbit Ninja SCSI-3
      device stg # TMC 18C30/18C50
      # SCSI 外設
      device scbus # SCSI 總線(如果使用SCSI設備,必須有)
      device da # Direct Access (硬盤)
      device sa # Sequential Access (磁帶,等等)
      device cd # CD
      device pass # Passthrough device (直接 SCSI 訪問)
      # 通過SCSI子系統接口的RAID控制器
      device asr # DPT SmartRAID V, VI and Adaptec SCSI RAID
      device dpt # DPT Smartcache - See LINT for options!
      device iir # Intel Integrated RAID
      device mly # Mylex AcceleRAID/eXtremeRAID
      device ciss # Compaq SmartRAID 5* series
      # RAID控制器
      device aac # Adaptec FSA RAID, Dell PERC2/PERC3
      device aacp # SCSI passthrough for aac (requires CAM)
      device ida # Compaq Smart RAID
      device amr # AMI MegaRAID
      device mlx # Mylex DAC960 family
      device twe # 3ware Escalade
      # atkbdc0 控制鍵盤和PS/2鼠標
      device atkbdc0 at isa? port IO_KBD
      device atkbd0 at atkbdc? irq 1 flags 0x1
      device psm0 at atkbdc? irq 12
      device vga0 at isa?
      # 啓動畫面和屏幕保護程序
      pseudo-device splash
      # syscons 是默認的控制檯驅動,類似SCO控制檯
      device sc0 at isa? flags 0x100
      # 對於pcvt vt220控制檯,啓用這個和PCVT_FREEBSD
      #device vt0 at isa?
      #options XSERVER # 在vt控制檯支持X服務器
      #options FAT_CURSOR # 使用大光標
      # 如果你是用ThinkPad,將下面的一行和其他PCVT相關設備的註釋去掉
      #options PCVT_SCANSET=2 # IBM使用非標準鍵盤
      # 浮點運算支持 - 請勿禁用
      device npx0 at nexus? port IO_NPX irq 13
      # 電源管理支持
      device apm0 at nexus? disable flags 0x20 # Advanced Power Management
      # PCCARD (PCMCIA) 支持
      device card
      device pcic0 at isa? irq 0 port 0x3e0 iomem 0xd0000
      device pcic1 at isa? irq 0 port 0x3e2 iomem 0xd4000 disable
      # 串口(COM)
      device sio0 at isa? port IO_COM1 flags 0x10 irq 4
      device sio1 at isa? port IO_COM2 irq 3
      device sio2 at isa? disable port IO_COM3 irq 5
      device sio3 at isa? disable port IO_COM4 irq 9
      # 並口
      device ppc0 at isa? irq 7
      device ppbus # 並口總線 (所有並口設備都需要)
      device lpt  # 打印機
      device plip  # 並口TCP/IP
      device ppi  # 並口接口設備
      #device vpo  # 需要scbus和da
      # PCI 以太網適配器
      device de # DEC/Intel DC21x4x (``Tulip'')
      device em # Intel PRO/1000 adapter Gigabit Ethernet Card (``Wiseman'')
      device txp # 3Com 3cR990 (``Typhoon'')
      device vx # 3Com 3c590, 3c595 (``Vortex'')
      # 使用公共的MII總線控制器代碼的PCI以太網適配器
      # 注意:一定要保留'device miibus'以確保可用
      device miibus # MII總線支持
      device dc # DEC/Intel 21143 and various workalikes
      device fxp # Intel EtherExpress PRO/100B (82557, 82558)
      device pcn # AMD Am79C97x PCI 10/100 NICs
      device rl # RealTek 8129/8139
      device sf # Adaptec AIC-6915 (``Starfire'')
      device sis # Silicon Integrated Systems SiS 900/SiS 7016
      device ste # Sundance ST201 (D-Link DFE-550TX)
      device tl # Texas Instruments ThunderLAN
      device tx # SMC EtherPower II (83c170 ``EPIC'')
      device vr # VIA Rhine, Rhine II
      device wb # Winbond W89C840F
      device xl # 3Com 3c90x (``Boomerang'', ``Cyclone'')
      device bge # Broadcom BCM570x (``Tigon III'')
      # ISA以太網適配器
      # 'device ed' 需要 'device miibus'
      device ed0 at isa? port 0x280 irq 10 iomem 0xd8000
      device ex
      device ep
      device fe0 at isa? port 0x300
      # Xircom Ethernet
      device xe
      # PRISM I IEEE 802.11b wireless NIC.
      device awi
      # WaveLAN/IEEE 802.11 wireless NICs. Note: the WaveLAN/IEEE really
      # exists only as a PCMCIA device, so there is no ISA attachment needed
      # and resources will always be dynamically assigned by the pccard code.
      device wi
      # Aironet 4500/4800 802.11 wireless NICs. Note: the declaration below will
      # work for PCMCIA and PCI cards, as well as ISA cards set to ISA PnP
      # mode (the factory default). If you set the switches on your ISA
      # card for a manually chosen I/O address and IRQ, you must specify
      # those parameters here.
      device an
      # The probe order of these is presently determined by
      i386/isa/isa_compat.c.
      device ie0 at isa? port 0x300 irq 10 iomem 0xd0000
      #device le0 at isa? port 0x300 irq 5 iomem 0xd0000
      device lnc0 at isa? port 0x280 irq 10 drq 0
      device cs0 at isa? port 0x300
      device sn0 at isa? port 0x300 irq 10
      # 僞設備 - 數字表示分配多少個
      pseudo-device loop  # 環回網絡
      pseudo-device ether # 以太網支持
      pseudo-device sl 1  # 核心級SLIP
      pseudo-device ppp 1 # 核心級PPP
      pseudo-device tun  # 數據包隧道
      pseudo-device pty  # 僞-tty(telnet等等)
      pseudo-device md   # 內存虛擬盤
      pseudo-device gif  # IPv6和IPv4隧道
      pseudo-device faith 1 # IPv6-to-IPv4轉發(翻譯)
      # `bpf'僞設備將啓用伯克利數據包過濾器。
      # 小心由此帶來的管理問題
      pseudo-device bpf #Berkeley packet filter
      # USB支持
      device uhci # UHCI PCI->USB interface
      device ohci # OHCI PCI->USB interface
      device usb # USB Bus (required)
      device ugen # Generic
      device uhid # "Human Interface Devices"
      device ukbd # Keyboard
      device ulpt # Printer
      device umass # Disks/Mass storage - Requires scbus and da
      device ums # Mouse
      device uscanner # Scanners
      device urio # Diamond Rio MP3 Player
      # USB 以太網,需要mii
      device aue # ADMtek USB ethernet
      device cue # CATC USB ethernet
      device kue # Kawasaki LSI USB ethernet
 
      現在要做的是去掉我們不需要的任何設備。(紅色、中劃線表示刪除,紅色無修飾表示修改,藍色表示增加)。這份配置是生產服務器上的配置文件。
            admin2006-11-28 10:51 PM
 
      #
      # APACHE -- FreeBSD/i386內核配置文件
      #
      machine i386         # 體系模型爲i386
      cpu I386_CPU         # 支持80386
      cpu I486_CPU         # 支持80486
      cpu I586_CPU         # 支持Pentium
      cpu I686_CPU         # 支持Pentium Pro以及更高
      ident APACHE         # 內核文件的名字
      maxusers 0          # 自動檢測同時允許的最大用戶數
      #makeoptions DEBUG=-g # 包含調試符號。通常只有current版本打開
      options MATH_EMULATE #支持協處理器模擬
      #options GPL_MATH_EMULATE #GPL模擬更好,但仍然沒必要,P III有內建協處理器
      options INET     #支持互聯網
      options INET6     #IPv6通訊協議
      options FFS      #伯克利快速文件系統
      options FFS_ROOT   #FFS作爲根設備[必須保留]
      options SOFTUPDATES  #打開FFS soft updates支持
      options UFS_DIRHASH  #提高大型目錄的支持
      options MFS      #內存文件系統
      options MD_ROOT    #MD作爲根設備
      options NFS      #Network Filesystem
      options NFS_ROOT   #NFS作爲根設備(需要NFS)
      options MSDOSFS    #MSDOS文件系統
      options CD9660    #ISO 9660文件系統(光盤)
      options CD9660_ROOT  #CD-ROM作爲根設備(需要CD9660)
      options PROCFS    #進程文件系統
      options COMPAT_43   #兼容4.3BSD[必須保留]
      options SCSI_DELAY=5000 #檢測SCSI設備前的延時(ms)
      options UCONSOLE   #用戶可以奪取控制檯[沒有X,不用]
      options USERCONFIG  #boot -c編輯器 editor
      options VISUAL_USERCONFIG #菜單式boot -c編輯器
      options KTRACE    #ktrace(1)支持
      options SYSVSHM    #SYSV-風格的共享內存
      options SYSVMSG    #SYSV-風格的消息隊列
      options SYSVSEM    #SYSV-風格的信號量(semaphores)
      options P1003_1B   #Posix P1003_1B實時擴展
      options _KPOSIX_PRIORITY_SCHEDULING
      options ICMP_BANDLIM #對惡意ICMP請求進行限制[例如flood ping]
      options KBD_INSTALL_CDEV # 在/dev安裝一個CDEV設備
      options CPU_ENABLE_SSE #啓用SSE支持(Pentium III)
      #options CPU_ATHLON_SSE_HACK #如果你的BIOS不能正確識別Athlon SSE
      #options NO_F00F_HACK #如果你使用Pentium且沒有F00F bug
      # 對ISA總線,AUTO_EOI將啓用8259A的自動EOI功能
      # 這意味着每次中斷調用節省0.7-1.25微秒,但不應用於筆記本
      options AUTO_EOI_1
      #options AUTO_EOI_2 # 請不要和AUTO_EOI_1同時打開,否則會崩潰。
      #options MAXMEM="(1024*1024)" #除非你的BIOS設置不正確造成
                     #無法檢測內存大小,單位是KB
      #在xntpd(的監督下啓用內核相同步邏輯
      #options PPS_SYNC
      #IPFirewall。我們需要的功能IPFilter都提供,並且更高效
      #除非你需要IPFirewall的某些專有功能,否則這部分不必編譯
      #options IPFIREWALL  #防火牆
      #options IPFIREWALL_VERBOSE #允許防火牆日誌
      #options IPFIREWALL_FORWARD #允許透明代理
      #options IPFIREWALL_VERBOSE_LIMIT=100 #限制日至
      #options IPFIREWALL_DEFAULT_TO_ACCEPT #默認允許所有IP包

      #options IPFW2 # IPFW2,這一特性並非4.x默認。
      options IPFILTER    #ipfilter支持
      options IPFILTER_LOG  #ipfilter日誌
      options IPFILTER_DEFAULT_BLOCK #默認阻斷所有IP包
      # 靜態數據包過濾許可規則(直接放入內核)
      options ACCEPT_FILTER_DATA
      options ACCEPT_FILTER_HTTP
      #options DEVICE_POLLING #改善網絡響應時間,但realtek不支持
      options IPSTEALTH   #支持祕密IP轉發
      options RANDOM_IP_ID  #隨機IP ID,阻止信息泄漏
      #options TCP_DROP_SYNFIN #拋棄SYN+FIN包,阻止檢測服務器
                  #的TCP協議棧、操作系統,但這對Web
                  #服務器是不推薦的,因爲不符合RFC1644
      #options QUOTA     #啓用配額支持,但此處沒用
      makeoptions CONF_CFLAGS=-fno-builtin #禁用memcpy等GCC默認的影響性能的設置
      # 根據內存大小配置應用程序可用的最大內存
      # 這臺機器有1GB內存
      # FreeBSD默認是允許使用128MB
      options MAXDSIZ="(1024*1024*1024)"
      options MAXSSIZ="(1024*1024*1024)"
      options DFLDSIZ="(1024*1024*1024)"
      #options PMAP_SHPGPERPROC=201 #每一進程的可用PV項數。
      #options NO_SWAPPING     #禁用交換區。不推薦
      options PANIC_REBOOT_WAIT_TIME=0 #內核異常(kernel panic)立即重啓
      #核心內存大小限制。我傾向使用默認值
      #options VM_KMEM_SIZE="(12*1024*1024)"
      #options VM_KMEM_SIZE_MAX="(256*1024*1024)"
      #options VM_KMEM_SIZE_SCALE="4"
      #將這份配置文件保存到kernel文件中,以便以後讀取
      #使用這樣的命令:
      # strings -n 3 /kernel | sed -n 's/^___//p' > APACHE
      #這裏我們不需要這樣做。
      #options INCLUDE_CONFIG_FILE # 包含配置文件到內核中
      #options USER_LDT #某些ports需要這麼做,未來的FreeBSD可能也需要
      # 下面兩項在製作對稱多處理器(SMP)內核時需要
      #options SMP     #對稱多處理器內核
      #options APIC_IO   #對稱(APIC) I/O
      device isa
      device eisa
      device pci
      # 軟驅
      device fdc0 at isa? port IO_FD1 irq 6 drq 2
      device fd0 at fdc0 drive 0
      device fd1 at fdc0 drive 1
      #
      # 如果使用東芝Libretto以及他的Y-E Y-E Data PCMCIA軟驅
      # 不要使用上面的fdc0,而應使用
      #device fdc0
      # ATA以及ATAPI設備
      # 下面兩行被刪去,因爲新系統不再需要它們。
      device ata0 at isa? port IO_WD1 irq 14
      device ata1 at isa? port IO_WD2 irq 15
      device ata
      device atadisk # ATA 磁盤驅動器(IDE硬盤)
      device atapicd # ATAPI 光驅
      device atapifd # ATAPI 軟驅
      device atapist # ATAPI 磁帶機
      options ATA_STATIC_ID #靜態設備編號[新系統不再需要]
      # SCSI控制器
      device ahb # EISA AHA1742 family
      device ahc # AHA2940 板載AIC7xxx設備
      device amd # AMD 53C974 (Tekram DC-390(T))
      device isp # Qlogic family
      device ncr # NCR/Symbios Logic
      device sym # NCR/Symbios Logic (較新的芯片組)
      options SYM_SETUP_LP_PROBE_MAP=0x40
      # 使用ncr可以在配置了sym和ncr的情況下掛接舊的NCR設備
      device adv0 at isa?
      device adw
      device bt0 at isa?
      device aha0 at isa?
      device aic0 at isa?
      device ncv # NCR 53C500
      device nsp # Workbit Ninja SCSI-3
      device stg # TMC 18C30/18C50
      # SCSI 外設
      device scbus # SCSI 總線(如果使用SCSI設備,必須有)
      device da # Direct Access (硬盤)
      device sa # Sequential Access (磁帶,等等)
      device cd # CD
      device pass # Passthrough device (直接 SCSI 訪問)
      # 通過SCSI子系統接口的RAID控制器
      device asr # DPT SmartRAID V, VI and Adaptec SCSI RAID
      device dpt # DPT Smartcache - See LINT for options!
      device iir # Intel Integrated RAID
      device mly # Mylex AcceleRAID/eXtremeRAID
      device ciss # Compaq SmartRAID 5* series
      # RAID控制器
      device aac # Adaptec FSA RAID, Dell PERC2/PERC3
      device aacp # SCSI passthrough for aac (requires CAM)
      device ida # Compaq Smart RAID
      device amr # AMI MegaRAID
      device mlx # Mylex DAC960 family
      device twe # 3ware Escalade
      # atkbdc0 控制鍵盤和PS/2鼠標[這臺機器沒配鼠標,也不用圖形界面]
      device atkbdc0 at isa? port IO_KBD
      device atkbd0 at atkbdc? irq 1 flags 0x1
      device psm0 at atkbdc? irq 12 #鼠標器
      device vga0 at isa?
      options VGA_NO_FONT_LOADING # 不需要保存/加載字體[節省內存]
      options VGA_NO_MODE_CHANGE # 不需要修改顯示模式[節省內存]
      # 啓動畫面和屏幕保護程序[我的服務器平時不接顯示器]
      pseudo-device splash
      # syscons 是默認的控制檯驅動,類似SCO控制檯
      device sc0 at isa? flags 0x100
      options MAXCONS=4 # 不需要更多的控制檯
      options SC_DISABLE_REBOOT # 禁止Ctrl+Alt+Del重啓,必須以root登錄。
      options SC_NO_CUTPASTE   # 禁用剪貼板[節省內存]
      options SC_NO_FONT_LOADING # 禁用字體加載[節省內存]
      options SC_NO_SYSMOUSE   # 禁用鼠標[節省內存]
      # 對於pcvt vt220控制檯,啓用這個和PCVT_FREEBSD
      #device vt0 at isa?
      #options XSERVER # 在vt控制檯支持X服務器
      #options FAT_CURSOR # 使用大光標
      # 如果你是用ThinkPad,將下面的一行和其他PCVT相關設備的註釋去掉
      #options PCVT_SCANSET=2 # IBM使用非標準鍵盤
      # 浮點運算支持 - 請勿禁用
      device npx0 at nexus? port IO_NPX irq 13
      # 電源管理支持[這臺機器期待長期運行]
      device apm0 at nexus? disable flags 0x20 # Advanced Power Management
      # PCCARD (PCMCIA) 支持
      device card
      device pcic0 at isa? irq 0 port 0x3e0 iomem 0xd0000
      device pcic1 at isa? irq 0 port 0x3e2 iomem 0xd4000 disable
      # 串口(COM)
      device sio0 at isa? port IO_COM1 flags 0x10 irq 4
      device sio1 at isa? port IO_COM2 irq 3
      device sio2 at isa? disable port IO_COM3 irq 5
      device sio3 at isa? disable port IO_COM4 irq 9
      # 並口
      device ppc0 at isa? irq 7
      device ppbus # 並口總線 (所有並口設備都需要)
      device lpt  # 打印機
      device plip # 並口TCP/IP
      device ppi  # 並口接口設備
      #device vpo # 需要scbus和da
      # PCI 以太網適配器
      device de # DEC/Intel DC21x4x (``Tulip'')
      device em # Intel PRO/1000 adapter Gigabit Ethernet Card (``Wiseman'')
      device txp # 3Com 3cR990 (``Typhoon'')
      device vx # 3Com 3c590, 3c595 (``Vortex'')
      # 使用公共的MII總線控制器代碼的PCI以太網適配器
      # 注意:一定要保留'device miibus'以確保可用
      device miibus # MII總線支持
      device dc # DEC/Intel 21143 and various workalikes
      device fxp # Intel EtherExpress PRO/100B (82557, 82558)
      device pcn # AMD Am79C97x PCI 10/100 NICs
      device rl # RealTek 8129/8139
      device sf # Adaptec AIC-6915 (``Starfire'')
      device sis # Silicon Integrated Systems SiS 900/SiS 7016
      device ste # Sundance ST201 (D-Link DFE-550TX)
      device tl # Texas Instruments ThunderLAN
      device tx # SMC EtherPower II (83c170 ``EPIC'')
      device vr # VIA Rhine, Rhine II
      device wb # Winbond W89C840F
      device xl # 3Com 3c90x (``Boomerang'', ``Cyclone'')
      device bge # Broadcom BCM570x (``Tigon III'')
      # ISA以太網適配器
      # 'device ed' 需要 'device miibus'
      device ed0 at isa? port 0x280 irq 10 iomem 0xd8000
      device ex
      device ep
      device fe0 at isa? port 0x300
      # Xircom Ethernet
      device xe
      # PRISM I IEEE 802.11b wireless NIC.
      device awi
      # WaveLAN/IEEE 802.11 wireless NICs. Note: the WaveLAN/IEEE really
      # exists only as a PCMCIA device, so there is no ISA attachment needed
      # and resources will always be dynamically assigned by the pccard code.
      device wi
      # Aironet 4500/4800 802.11 wireless NICs. Note: the declaration below will
      # work for PCMCIA and PCI cards, as well as ISA cards set to ISA PnP
      # mode (the factory default). If you set the switches on your ISA
      # card for a manually chosen I/O address and IRQ, you must specify
      # those parameters here.
      device an
      # The probe order of these is presently determined by
      i386/isa/isa_compat.c.
      device ie0 at isa? port 0x300 irq 10 iomem 0xd0000
      #device le0 at isa? port 0x300 irq 5 iomem 0xd0000
      device lnc0 at isa? port 0x280 irq 10 drq 0
      device cs0 at isa? port 0x300
      device sn0 at isa? port 0x300 irq 10
      # 僞設備 - 數字表示分配多少個
      pseudo-device loop # 環回網絡
      pseudo-device ether # 以太網支持
      pseudo-device sl 1 # 核心級SLIP
      pseudo-device ppp 1 # 核心級PPP
      pseudo-device tun  # 數據包隧道
      pseudo-device pty  # 僞-tty(telnet等等)
      pseudo-device md  # 內存虛擬盤
      pseudo-device gif  # IPv6和IPv4隧道
      pseudo-device faith 1 # IPv6-to-IPv4轉發(翻譯)
      # `bpf'僞設備將啓用伯克利數據包過濾器。
      # 小心由此帶來的管理問題
      pseudo-device bpf #Berkeley packet filter
      # USB支持
      device uhci # UHCI PCI->USB interface
      device ohci # OHCI PCI->USB interface
      device usb # USB Bus (required)
      device ugen # Generic
      device uhid # "Human Interface Devices"
      device ukbd # Keyboard
      device ulpt # Printer
      device umass # Disks/Mass storage - Requires scbus and da
      device ums # Mouse
      device uscanner # Scanners
      device urio # Diamond Rio MP3 Player
      # USB 以太網,需要mii
      device aue # ADMtek USB ethernet
      device cue # CATC USB ethernet
      device kue # Kawasaki LSI USB ethernet

      LINT中對於配置有更詳細的說明。由於時間關係,這裏不給出LINT的完整翻譯。對於常用的LINT配置(藍色
      ,但被註釋的部分),我做了一點說明。
            admin2006-11-28 10:52 PM
 
      需要說明的是,我個人的經驗,在較舊的AMD處理器上運行FreeBSD服務器不是一個明智的選擇。我個人的經驗是,在K6上運行FreeBSD,只要CPU佔用超過98%,系統就會死機。這可能是由於FreeBSD的設計過分地挖掘了系統的性能(按FreeBSD.org自己的說法,榨乾服務器的每一滴油,舊的AMD處理器可能會吃不消;但我在雙AMD
      Athlon MP 1900+上運行FreeBSD沒有出現類似的情況。與AMD不同,在Intel的全系列處理器上(包括存在F00F
      bug的Pentium處理器,486,Pentium-III, Pentium 4, Celeron-II 667等等)我從未遇到過任何問題。
      這臺服務器的網卡使用的是Realtek-8139芯片,這樣的網卡在市場上非常常見。爲了確認你的網卡型號,請運行ifconfig(。
      編輯完配置文件,是用下面的命令編譯、安裝內核:
      cd /usr/src
      make kernel KERNCONF=APACHE
 
      LINT中對於配置有更詳細的說明。由於時間關係,這裏不給出LINT的完整翻譯。對於常用的LINT配置(藍色,但被註釋的部分),我做了一點說明。
 
      需要說明的是,我個人的經驗,在較舊的AMD處理器上運行FreeBSD服務器不是一個明智的選擇。我個人的經驗是,在K6上運行FreeBSD,只要CPU佔用超過98%,系統就會死機。這可能是由於FreeBSD的設計過分地挖掘了系統的性能(按FreeBSD.org自己的說法,榨乾服務器的每一滴油,舊的AMD處理器可能會吃不消;但我在雙AMD
      Athlon MP 1900+上運行FreeBSD沒有出現類似的情況。與AMD不同,在Intel的全系列處理器上(包括存在F00F
      bug的Pentium處理器,486,Pentium-III, Pentium 4, Celeron-II 667等等)我從未遇到過任何問題。
 
      這臺服務器的網卡使用的是Realtek-8139芯片,這樣的網卡在市場上非常常見。爲了確認你的網卡型號,請運行ifconfig(。
 
      編輯完配置文件,是用下面的命令編譯、安裝內核:
 
      cd /usr/src
      make kernel KERNCONF=APACHE
 
      注意,實際應用中,請將APACHE換成你自己的配置文件名。
 
      重新編譯內核需要重新啓動系統才能夠生效。
 
      上面的配置文件是我根據LINT以及經驗編寫的配置文件,其編寫目標在於儘可能避免不必要的代碼,儘可能高效,儘可能安全,並且,在崩潰(注意,FreeBSD事實上很少會崩潰,我管理的FreeBSD機器的崩潰原因目前爲止只有硬件故障或停電)之後儘可能快地恢復。(FreeBSD4.x目前還不支持後臺fsck,因此啓用softupdates只是改善運行性能和文件系統可靠性,而不保證重新啓動速度的提高)
 
      由於在內核中屏蔽掉了大量的設備,因此,休想以這個內核啓動去操作軟盤或光盤,或者使用並口,以及SCSI設備(雖然這可能不是你想要的)。此外,這個內核在沒有root允許的情況下,是不能在控制檯上按Ctrl+Alt+Del啓動的。如果你希望其他工作人員在停電(總之,或類似肯定引起系統關機的情況)之前能夠幫助你關閉系統,你可能需要其他方法,比如告訴他root口令(假如那個人可以信任),sudo(比較好的方法,只允許他做reboot),或者去掉禁用Ctrl+Alt+Del的設置。此外,經過這樣處理的內核只支持Realtek-8139芯片的網卡,因此,如果你的情況和我不同,應該做適當的修改。
      如果您對這個配置有什麼建議,歡迎給我寫信。
 
      如此編譯的內核大約是GENERIC內核大小的一半,當然,由於節省了一些內存,它的性能肯定會更好。
 
結語:文章技術層面來講雖然有些過時,但思路和步驟都是差不多的..藉此文章參考!!!
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章