建構自己Linux發行版的方法
2011-09-09 10:49 佚名 linux時代 我要評論(0) 字号:T | T

要是每次你安裝一個新的Linux刊行版時都要做一些相同的設定,那麼你應該建立一個本身的定制版Linux。下文教大家如何建構自己的Linux發行版,具體内容如下所述。
AD:2013大資料全球技術峰會課程PPT下載下傳
Linux From Scratch(LFS)及其後代代表一種新方法,向使用者揭示Linux作業系統是如何工作的。LFS基于這樣的假設,即一部分一部分地編譯完整的作業系統不僅能夠揭示作業系統是如何工作的,也允許獨立的操作人員為速度、記憶體占用或安全性而建構系統。
許多作家已經編寫了有關UNIX風格的書籍,深入研究了排程、記憶體管理、多程序和線程、檔案系統,以及使用者與核心之間的互動。寫作Linux書籍的作家相對于UNIX作家來說有一個優勢:盡管團體發生了劇變,但是Linux核心不可能分成幾個互相競争的分支,由于GNUPublicLicense(GPL)、集中式研究實驗室OpenSourceDevelopmentLab(OSDL)和LinusTorvalds不可動搖的地位,使得Linux有幸成為一個緩慢移動的目标(slow-movingtarget)。
為什麼UNIX核心很重要
除了某些方面具有一定的相似性之外,不同的Unix核心并不怎麼相同。各種UNIX風格也具有一個Linux所缺少的優點:所有UNIX風格都被假定是完全的作業系統。Linux通常被描述為“隻是一個核心”(如果有這樣的定義的話,也是一個武斷的定義),它給出公共功能和實作的核心,不管核心是運作在不太強大的Pentium?II機器上還是SymmetricMultiprocessing(SMP)系統上,這些公共功能和實作都不會發生本質上的改變。為了更加簡化,有人可能會說,離Linux核心越遠,就會發現更多的變化,而UNIX系統則趨向于是各種UNIX/POSIX标準的離散實作。
事情并沒有這麼簡單。檢測Linux核心和系統級代碼可能是一件很費時間的事情,并且在現實世界中會限制使用。LFS項目旨在解決Linux上有限的系統級可了解性問題。關于核心需要大量的庫和工具來讓Linux系統執行最基本的任務這一事實,已經做過讨論了,但是如果一個比較熟練的使用者具有一個slim-lineLinux發行版,他不想下載下傳幾吉位元組不讓他優化系統、也不讓他抛開所有這些麻煩且不必要的工具的二進制代碼,那該怎麼辦?如果一個非常熟練的使用者拒絕接受各種社團發行版的苛刻條件(diktat),而想要運作一個來自CD的Linux/Apache/MySQL/PHP(LAMP)類型的應用程式堆棧,那該怎麼辦?LFS可以解決這些問題。
LinuxFromScratch
LFS項目顯然建立于那些對于構成基本的Linux系統來說充分而不必要的源檔案的基礎之上。它已經超越了Linux核心和裝置驅動程式,因為要産生一個可工作的Linux系統,您必須添加一個完整的編譯器工具鍊、許多Linux彙程式設計式實用工具、glibc系統庫、系統配置工具和連接配接到userlandshell通路的工具。LFS建立在這樣一個假設的基礎之上,即Linux或UNIX允許具有一些腳本編寫知識的使用者,了解一個完全有用的系統的工作方式,而不用深入研究核心代碼本身。
為了了解Linux系統的工作方式,LFS的建立者們确定,通過遵循子產品依賴性來編譯系統,可能是了解一般作業系統和特定的Linux的機制最自然的方式。使用者掌握了編譯過程之後,就可以開始消除依賴性樹的那些連接配接到與支援作業系統基本目的無關的系統元件的部件。例如,在編譯完成之後,消除編譯器工具鍊本身是可行的。在沒有全套的指令行實用工具時,可以湊合使用嵌入式LAMP堆棧。配置實用工具也可以被丢棄,大多數使用者可以湊合着用一個而不是太多Linux将會支援的檔案系統。
Linux部件
LFS系統的一個重要部件是,可以作為tarball得到的大量源檔案。文檔是另一個重要部件,并且是最重要的。實際上,很有可能利用一個最新的LFS書籍檔案并建立一個LFS發行版,因為LFS書籍中較長的描述了每個下載下傳位置和每個源檔案及其依賴性的特征。用于從核心到編譯器到shell編譯每組源檔案的過程都是已經寫好了的,如果可能,您也可以在描述具有不同特征的系統的LFS書籍中找到替代的例程。LFS系統的另一個不太可能出現在一般使用者工具箱中的部件是,在基本LFS系統組合在一起之後引導系統所需的引導腳本。
現在對LFS發行版的最大警告是:勇敢的發行版建構者所需的是一個可工作的Linux發行版,包括一個完整的編譯器工具鍊和一套檔案系統建立實用工具。自然,所有基于源代碼的Linux發行版都需要使用各個發行版都完全不同的特定編譯器版本來引導。LFS不是該領域的惟一系統,但它是惟一允許您直接處理單個源檔案的系統。大多數其他基于源代碼的Linux系統,比如Sourcemage和MyGeOS,提供一個完整的下載下傳,建議使用者使用。LFS不作這樣的假設,并且鼓勵拆開LFS架構。
預先假設起作用的Linux發行版已安裝在非外來的(nonexotic)硬體上,即使LFS可能沒有配置工具和腳本那麼受關注。要編譯LFS,您需要準備一個分區和一個檔案系統,還需要編譯一個編譯器和系統庫。如果用手工完成的話,這是一個相當傷腦筋的過程,但是也的确可以增加您在處理其餘安裝方面的自信。整個系統的編譯要花一小時到四天的時間,具體時間取決于底層硬體的年代和您的指令行技術熟練程度。
作一個相當大的假設,如果您願意很大程度上保留書籍安裝,并使對LFS書籍中提議的安裝的更改保持最小,您也可以使用自動化的安裝例程來安裝基于LFS的發行版。安裝例程沒有在LFS書籍中給出,但是可以在名稱AutomatedLinuxfromScratch(ALFS)之下作為基于XML的發行版得到。活動安裝可以作為基于C的腳本得到,該腳本使用ncurses來模拟圖形安裝。該安裝也叫做nALFS并給出一個極為靈活的包安裝架構。工作需要一個起作用的Linux系統,并帶有可以工作的C編譯器和XML解析器。一個可以工作的LFS系統就足夠了。
AutomatedLinuxFromScratch
ALFS的目的是超越LFS本身。LFS自己指導基于Linux的作業系統的内部工作,但是它不具有單個圖形使用者界面(GUI)。LFS既不允許連接配接到網絡,也不允許連接配接到Internet。ALFS可以簡化系統的擴充,例如,通過添加支援Internet通路的庫,或者通過安裝圖形桌面所需的X庫。
超越LFS
LFS的建立者們認識到了對其他各種基于源代碼的Linux系統的需求。為了這些想要超越LFS并添加XWindowSystem、GNOME和網絡支援的人,建立了另一個LFS派生物:BeyondLinuxFromScratch(BLFS)。第三版LFS書籍(讓我們不會忘記是在談論書籍而非發行版),形成一個以一個角為基礎的三角形:對于自動化編譯和完全的基于源代碼的Linux發行版,基本的LFS版本是基礎。BLFS将基本的Linux系統轉化成一個完全的使用者廣泛接受的Linux系統。AFLS簡化基于源代碼的Linux安裝的安裝和擴充。整個基于源代碼的系統的編譯是由一個腳本指導的,您在針對運作腳本的硬體調整腳本之後,就可以讓腳本自己運作了。在您(或安裝工程師)确定需要運作哪些包,也即特定的辦公應用程式套件之後,您就可以容易地擴充安裝順序了。ALFS也遲早會派上用場,因為它适用于從源代碼進行網絡範圍的安裝。
HardenedLFS
LFS家族的最後一個成員解決基于源代碼的Linux的一個特别重要的方面:安全性。對于不想依賴于所選的Linux發行版伺服器傳遞的更新檔的那些人,安全性的普通方法是,針對所選的核心庫和應用程式跟蹤安全報告。對于LFS實作人員來說,問題有些不同:盡管不是不可能,但是也難以審計Linux核心代碼,也許還包括集中于基于Linux的作業系統的内部機能的很多庫和實用工具。
代碼審計相當費時,并且隻有當更新檔伺服器是由專門人員集中維護的時,添加大量更新檔才是明智的。但是可以取代一些為反映安全問題的新方法而重新編寫過的庫。一個好的例子是,通過從一個适當大的随機數池中随機配置設定數字,使得猜測程序辨別符極為困難。OpenBSD項目最先采用了該方法,随後,各種UNIX風格和Linux發行版都采用了該方法。
一個相當新的項目叫做HardenedLinuxFromScratch(HLFS),在Linux下采用了這一安全方法。該項目假設相當正規地掌握了LFS和BLFS的一些部件,并使用了不會成為大多數Linux系統中的标準的幾個實用工具和庫。
添加到HLFS中的最重要的部件可能是Stack-SmashingProtector(SSP),通過使用gcc指令可以啟用該功能。SSP開發來防禦stack-smashing攻擊,這類攻擊屬于影響Linux系統的一類最常見的安全威脅。其他安全措施包括一流的随機數生成器和位置獨立的可執行程式的編譯,其中通常轉化成靜态連結對象代碼的可執行代碼作為共享庫出現,而位置獨立的可執行庫通過将位址随機化可以隐藏這些位址。當然,可從HLFSWeb站點得到大量更新檔,并可檢視其源代碼。
日益壯大的LFS家族
在許多方面,Linux版本的LFS家族是一個方法,給予黑客以構造基于Linux的作業系統的能力。但是對于LFS的建立者們來說,最重要的結果似乎是:通過LFS,所有Linux發行版對于所涉及的使用者都成了智能的了。通過允許使用者一部分一部分地建構Linux發行版,并幫助使用者将一個基于Linux的作業系統看作一個由許多部件組成的系統,還可以用另外的方法建構Linux發行版。
更一般來說,使用者要更改建構Linux發行版的方式,不必要是程式員:隻要從建構LFS系統學到的一點腳本編寫能力就足夠了。LFS專家可以改變和擴充Linux發行版的完美組合,而不會影響它的基本結構。對于有人員和專家維護Linux系統,但沒有資金從咨詢機構和公司購買商業支援的機構來說,該功能特别重要。已經針對教學目的和大型網絡,示範了基于LFS的Linux系統。它們也有可能用于其他領域。