1.項目整體分析
制作Linux發布的目的是為了在系統中能夠快速,正確地建立Linux系統環境。制作Linux發布的主要工作是決定各種軟件的去留,因為有了RPM(RedHat Package Manager)包對其提供優良的管理能力,所以以目前比較成熟的RedHat 7.1(Linux Kernel Version 2.4.2-12)Linux發布程序作為藍本,以RPM包作為基本的制定單元,以需求為原則對其進行取捨,得到適合實際需要的Linux系統。
由此,項目自然而然的以分析RedHat Linux的光盤安裝系統為起點,在掌握了其結構和行為的基礎上,在包一級(結構部分)和代碼一級(行為部分)進行修改,同時建立相應的測試環境,以便對修改進行及時的規范。
2.項目分步驟實施細節
2.1對Linux光盤安裝系統的分析
結構部分
在安裝光盤中,主要的目錄結構和文件大致如下:
images/ 此目錄下包含了制作啟動盤的映像文件(文件後綴img),其中boot.img是當安裝介質為CD-ROM時負責引導系統的映像文件,bootnet.img是當安裝介質為FTP、NFS等時負責引導系統的映像文件。
driver.img是由一些特殊設備驅動程序模塊組成的映像文件,在當前內核不支持這些設備的情況下,提供了對它們進行訪問的一種方法。其中,boot.img映像文件中主要包含以下文件:
其中,initrd.img為Linux ext2文件系統,構成如下:
可執行文件/sbin/loader的任務是判斷安裝介質的有效性,並從中執行安裝程序。其實正是boot.img,在系統啟動時被執行,經解析之後在內存建立起了Linux內核,並根據配置文件syslinux.cfg裝載虛擬文件系統,形成了完整的Linux System,為後續的工作提供了必要的操作系統環境。
Boot.img映像的文件系統類型為msdos,而其中的initrd.img映像的文件系統類型必為Linux系統自己的ext2,所以對於它們的解析操作是不同的。
RedHat/ 此目錄是RedHat Linux發布的核心目錄,主要的目錄結構都在這裡,其中RPMS/ 包含了RedHat Linux發布的主要部分,即以RPM包的形式將Linux系統中的二進制可執行文件,配置文件,文檔等等組織在一起,形成能完成一定功能的比較獨立的軟件包(文件後綴rpm)。這個目錄就是把這些軟件包都集合在一起,形成了RedHat Linux發布。
base/包含了在安裝過程中要用到的描述組織結構和安裝行為的所有文件,其中comps,hdlist和hdlist2是描述RPM包組織結構的文件。
comps此文件把各個RPM包按一定的原則組織成若干組,即components,這樣在安裝過程中就不必對每一個包做出取捨,而以組為單位。comps文件為簡單文本格式,它的結構如下所示:
4 表示RPM包的版本號,當前為4
1 base { }
base是此component名,{…}中是此component中所包含的RPM包的名稱列表,1表示在安裝中默認為選中,即默認安裝。
0 –hide IDS sensor { snort libpcap }
表示IDS sensor組中包含有snort和lipcap這兩個RPM包。0表示這個組在安裝中默認為不選中即默認不安裝,並且由—hide指出不在用戶界面上顯示此組。
hdlist和hdlist2 這兩個文件維護從RPM包名到真實包文件名的映射過程,例如從snort這個RPM包名到真實包文件名snort-1.8.1-1.1.2.i386.rpm的映射。這兩個文件是用特殊的程序生成的,無法用簡單的方法察看其中的內容和結構。
如上圖所示映像文件中的主要部分是安裝程序anaconda,它的主執行體是/usr/bin下的anaconda,由其調用的大量例程分布在/usr/lib/anaconda下,而安裝過程中要用到的資源文件分布在/usr/share/anaconda下。