歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux管理 >> Linux維護 >> 如何定制Linux操作系統安裝盤詳解

如何定制Linux操作系統安裝盤詳解

日期:2017/3/2 10:43:43   编辑:Linux維護

  本文闡述如何以一個現有的 RedHat Linux系統安裝盤為藍本,定制符合需要的 Linux 系統安裝盤。

  1 引言

  通常由於某種實際應用,需要一個包含所有最近更新的RPM包的操作系統發布盤,以備在安裝時一次完成所有的更新操作,或者是想定制一個有自己特色的操作系統發布盤,如將自己開發的應用程序通過創建RPM包,加入到操作系統中,在系統安裝時一次完成,形成包含自己產品的操作系統發布盤。這些都需要重新生成安裝盤,而且生成安裝盤也是十分必要的,因為操作系統發布商在每一次正式發布後,總會對一些漏洞進行更新處理,有些還是與安全相關的,在重新生成安裝盤時就可以將這些bug修復添加進你自己定制的安裝盤中,對一些設備新開發的驅動程序提供支持也需要重新生成安裝盤。

  在一些嵌入式具體應用中,由於其對操作系統的要求較具體,不需要當前操作系統安裝盤中自帶的那麼多的功能,如Fedora Core 2當前有4張安裝盤,它包含了許多其它的應用,如office、娛樂和游戲等等,而一些具體的應用根本不需要這麼多的功能,因此,它們常常需要基於一個版本的操作系統,然後對之進行相應的裁減,使之能滿足具體應用的實際需要,而不需要其它的多余的功能。因此,通過操作系統安裝盤的定制,可以根據自己或實際的需要,選擇有用的軟件包,組成安裝盤,從而通過定制操作系統的安裝,滿足具體應用的需要。

  我們在定制操作系統安裝盤之前,必須有一個藍本作為安裝盤的基礎,比如是Red Hat 9.0安裝盤或Fedora Core 2安裝盤,也可以是Red Hat 9.0或Fedora Core 2安裝盤的iso文件,這些我們可以從Red Hat的網站或其它一些網站上下載。現假設我們已經有了Fedora Core 2的安裝盤,下面我們先大略看一下Fedora Core 2的安裝盤裡面的內容。

  在安裝盤中有一個目錄為Fedora,它包含了發布盤的核心內容,如下:

  

drwxr-xr-x  2 root   root     2048 May 13 2004 base
drwxr-xr-x  2 root   root    77824 May 13 2004 RPMS

  RPMS目錄包含Fedora Core 2發布盤的主要部分,它是一些RPM文件。RPM包通常包含二進制可執行文件、有關的配置文件和文檔,我們可以參考RPM幫助以獲得更多信息。

  base 目錄中包含一些在安裝過程中所需要的文件,如comps.xml文件,它定義哪個組件包含哪些RPM包以及RPM包之間的依賴關系,需要注意的是,在comps.xml文件中表示哪個組件有哪些RPM包采用的是RPM包名,而不是包的文件名。比如perl-5.8.3-18.i386.rpm這個文件名,在comps.xml中所表示的RPM包名為perl。對於comps.xml文件,我們會在後面作進一步解釋。另一個重要的文件是hdlist文件,它包含了RPM目錄中的所有RPM包大部分的頭文件,這意味著在RPM包中相互依賴關系可以通過讀取hdlist文件而決定,而不需要讀所有的RPM包。hdlist文件的另一個作用是將包名映射到文件名,如將perl包名映射到perl-5.8.3-18.i386.rpm,這意味著如果你想更新RPM包或添加你自己的包到RPM目錄中,你就需要更新hdlist這個文件,這會在後面進行描述。

  2 RPM操作

  RPM(Redhat Package Management)是由RedHat開發的,在Linux系統下的系統包管理工具。它的目標是:使包的安裝和卸載過程更容易,它能夠證實一個包是否已經正確安裝了,可以簡化包的建立過程,可以從源代碼建立整個包,它能用於不同的體系結構。RPM系統已經成為現在Linux系統下包管理工具事實上的標准,並且它也移植到很多商業的unix系統之下。

  RPM包由包標簽對它標識,包標簽包含軟件名,軟件版本,包的發行版本幾部分。在包的內部還包含包的建立時間,包的內容描述,安裝包的所有文件的大小,數字簽名以證實包的完整性等信息。RMP包還包含包內的文件信息,其中包括:每個文件的文件名,每個文件的權限,文件的屬組和擁有者,每個文件的md5校驗和,文件的內容等。

  RPM包管理系統提供了下列功能:安裝新的包,卸載舊的包,將一個舊包升級為新的包,獲得已經安裝包的信息等。

  Red Hat發布盤主要是由一些RPM包組成。RPM包的名字包含一個後綴:arch.rpm,arch 指的是體系結構,對於Intel平台的有i386、i586、i686等,你所安裝的包必須要與機器上的共享庫的版本相匹配。如果你發現某個RPM包沒有安裝,你可以自己安裝。任何時候,你都可以(必須是root用戶)安裝RPM包。RPM命令使用輕參考相關資料。

  3 RPM包創建過程

  為了完成RPM包的創建,需要執行以下步驟:

  • 執行spec文件prep節的命令和宏;
  • 檢查文件列表的內容;
  • 執行spec文件build節的命令和宏;
  • 執行spec文件install節的命令和宏,同時也執行文件列表中的宏;
  • 創建二進制包文件;
  • 創建源碼包。

  為了執行打包的工作,RPM需要一系列目錄完成建立的工作。正常的目錄結構通常由一個頂級目錄和五個子目錄構成。這五個子目錄分別是:

  1. SOURCES------包含原始的源文件和補丁文件。
  2. SPECS--------包含控制RPM包建立過程的spec文件。
  3. BUILD--------包含源碼解包和軟件建立的目錄。
  4. RPMS---------包含建立過程創建的二進制包文件。
  5. SRPMS--------包含建立過程創建的源碼包文件。

  除了上述這五個主要的目錄外,在RPMS或SRPMS目錄下通常還會有關於RPM包目標平台的目錄。例如,i386、i586、i686等代表與Intel兼容cpu的平台,noarch目錄下的RPM包代表可以在任何平台下執行。

  3.1 SPEC文件

  spec文件是整個RPM包建立過程的中心,它的作用就如同編譯程序時的Makefile文件。spec文件包含建立一個RPM包必需的信息,包括哪些文件是包的一部分以及它們安裝在哪個目錄下。這個文件一般分為如下的幾節:

  (1) Preamle(序言)

  序言包含用戶請求包的信息時所顯示的內容。它可以包含包的功能描述、包的軟件版本、版權信息和所屬的包組等。Summary 是一行關於該軟件包的描述,Name 是該軟件包的基名,Version 是該軟件的版本號,Release 是 RPM 本身的版本號,如果修復了 spec 文件中的一個錯誤並發布了該軟件同一版本的新 RPM,就應該增加發行版號。License 應該給出一些許可術語(如:"GPL"、"Commercial"、"Shareware"),Group 標識軟件類型。那些試圖幫助人們管理 RPM 的程序通常按照組列出 RPM。您可以在usr/share/doc/rpm-4.0.4/GROUPS 文件看到一個 Red Hat 使用的組列表(假設您安裝的 RPM 版本是 4.0.4)。但是您還可以使用那些組名以外的名稱。Source0、Source1等等給這些源文件命名(通常為 tar.gz 文件)。%{name} 和 %{version} 是 RPM 宏,它們擴展成為頭中定義的 rpm 名稱和版本。

  要注意的是,你不要在 Source 語句中包含任何路徑。缺省情況下,RPM 會在 /usr/src/redhat/SOURCES 中尋找文件,請將您的源文件復制或鏈接到那裡。(要使 spec 文件盡量可移植的話,應當盡量避免嵌入自己開發機器上的假想路徑。其他開發人員就可以指示 RPM 在別的目錄下查找源文件,而不用修改您的 spec 文件。)

  接下來的部分從 %description 行開始。您應該在這裡提供該軟件更多的描述,這樣任何人使用 rpm -qi 查詢您的軟件包時都可以看到它。您可以解釋這個軟件包做什麼,描述任何警告或附加的配置指令,等等。

  (2) Prep節

  Prep節進行實際的打包准備工作,它是使用節前綴%prep表示的。一般而言,這一節的主要工作是檢查標簽語法是否正確,刪除舊的軟件源程序,對包含源程序的tar文件進行解碼。如果包含補丁(patch)文件,將補丁文件應用到解開的源碼中。它一般包含%setup與%patch兩個命令。%setup用於將軟件源碼包解開,執行%patch可將補丁文件加入解開的源程序中。

  %setup

  -n newdir---------將壓縮的軟件源程序在newdir目錄下解開。

  -c ---------------在解開源程序之前先創建目錄。

  -b num------------在包含多個源程序時,將第num個源程序解壓縮。

  -T----------------不使用缺省的解壓縮操作。

  例如:

  %setup -T -b 0

  /*解開第一個源程序文件。*/

  %setup -c -n newdir

  /*創建目錄newdir,並在此目錄之下解開源程序。*/

  %patch

  %patchN-------這裡N是數字,表示使用第N個補丁文件,等價於%patch -P N

  -p0-----------指定使用第一個補丁文件,-p1指定使用第二個補丁文件。 -s------------在使用補丁時,不顯示任何信息。

  -b name-------在加入補丁文件之前,將源文件名上加入name。若為指定此參數,則缺省源文件加入.orig。

  -T------------將所有打補丁時產生的輸出文件刪除。

Copyright © Linux教程網 All Rights Reserved