構(gòu)建自己Linux發(fā)行版的方法
要是每次你安裝一個(gè)新的Linux刊行版時(shí)都要做一些相同的設(shè)置,那么你應(yīng)該創(chuàng)建一個(gè)本身的定制版Linux。下文教大家如何構(gòu)建自己的Linux發(fā)行版,具體內(nèi)容如下所述。
Linux From Scratch(LFS)及其后代代表一種新方法,向用戶揭示Linux操作系統(tǒng)是如何工作的。LFS基于這樣的假設(shè),即一部分一部分地編譯完整的操作系統(tǒng)不僅能夠揭示操作系統(tǒng)是如何工作的,也允許獨(dú)立的操作人員為速度、內(nèi)存占用或安全性而構(gòu)建系統(tǒng)。
許多作家已經(jīng)編寫了有關(guān)UNIX風(fēng)格的書籍,深入研究了調(diào)度、內(nèi)存管理、多進(jìn)程和線程、文件系統(tǒng),以及用戶與內(nèi)核之間的交互。寫作Linux書籍的作家相對于UNIX作家來說有一個(gè)優(yōu)勢:盡管團(tuán)體發(fā)生了劇變,但是Linux內(nèi)核不可能分成幾個(gè)相互競爭的分支,由于GNUPublicLicense(GPL)、集中式研究實(shí)驗(yàn)室OpenSourceDevelopmentLab(OSDL)和LinusTorvalds不可動搖的地位,使得Linux有幸成為一個(gè)緩慢移動的目標(biāo)(slow-movingtarget)。
為什么UNIX內(nèi)核很重要
除了某些方面具有一定的相似性之外,不同的Unix內(nèi)核并不怎么相同。各種UNIX風(fēng)格也具有一個(gè)Linux所缺少的優(yōu)點(diǎn):所有UNIX風(fēng)格都被假定是完全的操作系統(tǒng)。Linux通常被描述為“只是一個(gè)內(nèi)核”(如果有這樣的定義的話,也是一個(gè)武斷的定義),它給出公共功能和實(shí)現(xiàn)的核心,不管內(nèi)核是運(yùn)行在不太強(qiáng)大的Pentium?II機(jī)器上還是SymmetricMultiprocessing(SMP)系統(tǒng)上,這些公共功能和實(shí)現(xiàn)都不會發(fā)生本質(zhì)上的改變。為了更加簡化,有人可能會說,離Linux內(nèi)核越遠(yuǎn),就會發(fā)現(xiàn)更多的變化,而UNIX系統(tǒng)則趨向于是各種UNIX/POSIX標(biāo)準(zhǔn)的離散實(shí)現(xiàn)。
事情并沒有這么簡單。檢測Linux內(nèi)核和系統(tǒng)級代碼可能是一件很費(fèi)時(shí)間的事情,并且在現(xiàn)實(shí)世界中會限制使用。LFS項(xiàng)目旨在解決Linux上有限的系統(tǒng)級可理解性問題。關(guān)于內(nèi)核需要大量的庫和工具來讓Linux系統(tǒng)執(zhí)行最基本的任務(wù)這一事實(shí),已經(jīng)做過討論了,但是如果一個(gè)比較熟練的用戶具有一個(gè)slim-lineLinux發(fā)行版,他不想下載幾吉字節(jié)不讓他優(yōu)化系統(tǒng)、也不讓他拋開所有這些麻煩且不必要的工具的二進(jìn)制代碼,那該怎么辦?如果一個(gè)非常熟練的用戶拒絕接受各種社團(tuán)發(fā)行版的苛刻條件(diktat),而想要運(yùn)行一個(gè)來自CD的Linux/Apache/MySQL/PHP(LAMP)類型的應(yīng)用程序堆棧,那該怎么辦?LFS可以解決這些問題。
LinuxFromScratch
LFS項(xiàng)目顯然建立于那些對于構(gòu)成基本的Linux系統(tǒng)來說充分而不必要的源文件的基礎(chǔ)之上。它已經(jīng)超越了Linux內(nèi)核和設(shè)備驅(qū)動程序,因?yàn)橐a(chǎn)生一個(gè)可工作的Linux系統(tǒng),您必須添加一個(gè)完整的編譯器工具鏈、許多Linux匯編程序?qū)嵱霉ぞ摺libc系統(tǒng)庫、系統(tǒng)配置工具和連接到userlandshell訪問的工具。LFS建立在這樣一個(gè)假設(shè)的基礎(chǔ)之上,即Linux或UNIX允許具有一些腳本編寫知識的用戶,了解一個(gè)完全有用的系統(tǒng)的工作方式,而不用深入研究內(nèi)核代碼本身。
為了了解Linux系統(tǒng)的工作方式,LFS的創(chuàng)建者們確定,通過遵循模塊依賴性來編譯系統(tǒng),可能是了解一般操作系統(tǒng)和特定的Linux的機(jī)制最自然的方式。用戶掌握了編譯過程之后,就可以開始消除依賴性樹的那些連接到與支持操作系統(tǒng)基本目的無關(guān)的系統(tǒng)組件的部件。例如,在編譯完成之后,消除編譯器工具鏈本身是可行的。在沒有全套的命令行實(shí)用工具時(shí),可以湊合使用嵌入式LAMP堆棧。配置實(shí)用工具也可以被丟棄,大多數(shù)用戶可以湊合著用一個(gè)而不是太多Linux將會支持的文件系統(tǒng)。
Linux部件
LFS系統(tǒng)的一個(gè)重要部件是,可以作為tarball得到的大量源文件。文檔是另一個(gè)重要部件,并且是最重要的。實(shí)際上,很有可能利用一個(gè)最新的LFS書籍文件并創(chuàng)建一個(gè)LFS發(fā)行版,因?yàn)長FS書籍中詳細(xì)描述了每個(gè)下載位置和每個(gè)源文件及其依賴性的特征。用于從內(nèi)核到編譯器到shell編譯每組源文件的過程都是已經(jīng)寫好了的,如果可能,您也可以在描述具有不同特征的系統(tǒng)的LFS書籍中找到替代的例程。LFS系統(tǒng)的另一個(gè)不太可能出現(xiàn)在一般用戶工具箱中的部件是,在基本LFS系統(tǒng)組合在一起之后引導(dǎo)系統(tǒng)所需的引導(dǎo)腳本。
現(xiàn)在對LFS發(fā)行版的最大警告是:勇敢的發(fā)行版構(gòu)建者所需的是一個(gè)可工作的Linux發(fā)行版,包括一個(gè)完整的編譯器工具鏈和一套文件系統(tǒng)創(chuàng)建實(shí)用工具。自然,所有基于源代碼的Linux發(fā)行版都需要使用各個(gè)發(fā)行版都完全不同的特定編譯器版本來引導(dǎo)。LFS不是該領(lǐng)域的惟一系統(tǒng),但它是惟一允許您直接處理單個(gè)源文件的系統(tǒng)。大多數(shù)其他基于源代碼的Linux系統(tǒng),比如Sourcemage和MyGeOS,提供一個(gè)完整的下載,建議用戶使用。LFS不作這樣的假設(shè),并且鼓勵拆開LFS框架。
預(yù)先假設(shè)起作用的Linux發(fā)行版已安裝在非外來的(nonexotic)硬件上,即使LFS可能沒有配置工具和腳本那么受關(guān)注。要編譯LFS,您需要準(zhǔn)備一個(gè)分區(qū)和一個(gè)文件系統(tǒng),還需要編譯一個(gè)編譯器和系統(tǒng)庫。如果用手工完成的話,這是一個(gè)相當(dāng)傷腦筋的過程,但是也的確可以增加您在處理其余安裝方面的自信。整個(gè)系統(tǒng)的編譯要花一小時(shí)到四天的時(shí)間,具體時(shí)間取決于底層硬件的年代和您的命令行技術(shù)熟練程度。
作一個(gè)相當(dāng)大的假設(shè),如果您愿意很大程度上保留書籍安裝,并使對LFS書籍中提議的安裝的更改保持最小,您也可以使用自動化的安裝例程來安裝基于LFS的發(fā)行版。安裝例程沒有在LFS書籍中給出,但是可以在名稱AutomatedLinuxfromScratch(ALFS)之下作為基于XML的發(fā)行版得到。活動安裝可以作為基于C的腳本得到,該腳本使用ncurses來模擬圖形安裝。該安裝也叫做nALFS并給出一個(gè)極為靈活的包安裝框架。工作需要一個(gè)起作用的Linux系統(tǒng),并帶有可以工作的C編譯器和XML解析器。一個(gè)可以工作的LFS系統(tǒng)就足夠了。
AutomatedLinuxFromScratch
ALFS的目的是超越LFS本身。LFS自己指導(dǎo)基于Linux的操作系統(tǒng)的內(nèi)部工作,但是它不具有單個(gè)圖形用戶界面(GUI)。LFS既不允許連接到網(wǎng)絡(luò),也不允許連接到Internet。ALFS可以簡化系統(tǒng)的擴(kuò)展,例如,通過添加支持Internet訪問的庫,或者通過安裝圖形桌面所需的X庫。
超越LFS
LFS的創(chuàng)建者們認(rèn)識到了對其他各種基于源代碼的Linux系統(tǒng)的需求。為了這些想要超越LFS并添加XWindowSystem、GNOME和網(wǎng)絡(luò)支持的人,創(chuàng)建了另一個(gè)LFS派生物:BeyondLinuxFromScratch(BLFS)。第三版LFS書籍(讓我們不會忘記是在談?wù)摃前l(fā)行版),形成一個(gè)以一個(gè)角為基礎(chǔ)的三角形:對于自動化編譯和完全的基于源代碼的Linux發(fā)行版,基本的LFS版本是基礎(chǔ)。BLFS將基本的Linux系統(tǒng)轉(zhuǎn)化成一個(gè)完全的用戶廣泛接受的Linux系統(tǒng)。AFLS簡化基于源代碼的Linux安裝的安裝和擴(kuò)展。整個(gè)基于源代碼的系統(tǒng)的編譯是由一個(gè)腳本指導(dǎo)的,您在針對運(yùn)行腳本的硬件調(diào)整腳本之后,就可以讓腳本自己運(yùn)行了。在您(或安裝工程師)確定需要運(yùn)行哪些包,也即特定的辦公應(yīng)用程序套件之后,您就可以容易地?cái)U(kuò)展安裝順序了。ALFS也遲早會派上用場,因?yàn)樗m用于從源代碼進(jìn)行網(wǎng)絡(luò)范圍的安裝。
HardenedLFS
LFS家族的最后一個(gè)成員解決基于源代碼的Linux的一個(gè)特別重要的方面:安全性。對于不想依賴于所選的Linux發(fā)行版服務(wù)器交付的補(bǔ)丁的那些人,安全性的普通方法是,針對所選的核心庫和應(yīng)用程序跟蹤安全報(bào)告。對于LFS實(shí)現(xiàn)人員來說,問題有些不同:盡管不是不可能,但是也難以審計(jì)Linux內(nèi)核代碼,也許還包括集中于基于Linux的操作系統(tǒng)的內(nèi)部機(jī)能的很多庫和實(shí)用工具。
代碼審計(jì)相當(dāng)費(fèi)時(shí),并且只有當(dāng)補(bǔ)丁服務(wù)器是由專門人員集中維護(hù)的時(shí),添加大量補(bǔ)丁才是明智的。但是可以取代一些為反映安全問題的新方法而重新編寫過的庫。一個(gè)好的例子是,通過從一個(gè)適當(dāng)大的隨機(jī)數(shù)池中隨機(jī)分配數(shù)字,使得猜測進(jìn)程標(biāo)識符極為困難。OpenBSD項(xiàng)目最先采用了該方法,隨后,各種UNIX風(fēng)格和Linux發(fā)行版都采用了該方法。
一個(gè)相當(dāng)新的項(xiàng)目叫做HardenedLinuxFromScratch(HLFS),在Linux下采用了這一安全方法。該項(xiàng)目假設(shè)相當(dāng)正規(guī)地掌握了LFS和BLFS的一些部件,并使用了不會成為大多數(shù)Linux系統(tǒng)中的標(biāo)準(zhǔn)的幾個(gè)實(shí)用工具和庫。
添加到HLFS中的最重要的部件可能是Stack-SmashingProtector(SSP),通過使用gcc指令可以啟用該功能。SSP開發(fā)來防御stack-smashing攻擊,這類攻擊屬于影響Linux系統(tǒng)的一類最常見的安全威脅。其他安全措施包括一流的隨機(jī)數(shù)生成器和位置獨(dú)立的可執(zhí)行程序的編譯,其中通常轉(zhuǎn)化成靜態(tài)鏈接對象代碼的可執(zhí)行代碼作為共享庫出現(xiàn),而位置獨(dú)立的可執(zhí)行庫通過將地址隨機(jī)化可以隱藏這些地址。當(dāng)然,可從HLFSWeb站點(diǎn)得到大量補(bǔ)丁,并可查看其源代碼。
日益壯大的LFS家族
在許多方面,Linux版本的LFS家族是一個(gè)方法,給予黑客以構(gòu)造基于Linux的操作系統(tǒng)的能力。但是對于LFS的創(chuàng)建者們來說,最重要的結(jié)果似乎是:通過LFS,所有Linux發(fā)行版對于所涉及的用戶都成了智能的了。通過允許用戶一部分一部分地構(gòu)建Linux發(fā)行版,并幫助用戶將一個(gè)基于Linux的操作系統(tǒng)看作一個(gè)由許多部件組成的系統(tǒng),還可以用另外的方法構(gòu)建Linux發(fā)行版。
更一般來說,用戶要更改構(gòu)建Linux發(fā)行版的方式,不必要是程序員:只要從構(gòu)建LFS系統(tǒng)學(xué)到的一點(diǎn)腳本編寫能力就足夠了。LFS專家可以改變和擴(kuò)展Linux發(fā)行版的完美組合,而不會影響它的基本結(jié)構(gòu)。對于有人員和專家維護(hù)Linux系統(tǒng),但沒有資金從咨詢機(jī)構(gòu)和公司購買商業(yè)支持的機(jī)構(gòu)來說,該功能特別重要。已經(jīng)針對教學(xué)目的和大型網(wǎng)絡(luò),演示了基于LFS的Linux系統(tǒng)。它們也有可能用于其他領(lǐng)域。
總結(jié):
希望本文介紹的構(gòu)建自己Linux發(fā)行版的方法能夠?qū)ψx者有所幫助,更多有關(guān)linux系統(tǒng)的知識還有待于讀者去探索和學(xué)習(xí)。



















