Red Hat Training

A Red Hat training course is available for Red Hat Satellite

章 3. 建立自訂套件

在建立軟體頻道時,可能會發生許多錯誤。這在套件必須透過 Red Hat Network 發送並安裝時,特別容易發生。本章將提供如何建立套件,並透過 Red Hat Network 成功發送的簡介。本章包括的內容有為何要使用 RPM、如何為 RHN 建立套件、以及如何適當地簽署套件。

3.1. 為 Red Hat Network 建立套件

Red Hat Network 使用 RPM 套件管理員RPM)技術,來決定新增的軟體與更新檔要如何套用到用戶端電腦上。從 Red Hat Network 取得的套件通常是 RPM 格式。不過完整的 ISO 映像檔亦可透過 Red Hat Network 網站的「軟體」分頁取得,但不適用於 RHN Satellite Server。如果您的 Satellite 支援 Solaris,您可以使用 RHN Push 來上傳 Solaris 套件,到 Solaris 用戶所使用的自訂頻道。
RPM 這工具為使用者提供簡易的方法,安裝、解除安裝、升級、並驗證軟體套件。它也能讓軟體設計師將原始碼與編譯過的版本包裝起來,給終端使用者與設計師使用。

3.1.1. RPM 的優點

RPM 包含了以下優點:
易於升級
使用 RPM,您就可以升級系統中的獨立元件,而不需要重新安裝。當 Red Hat 釋出 Red Hat Enterprise Linux 的新版本時,使用者不需要為了升級而重裝。RPM 允許智慧型、完全自動、立即可用的系統升級。套件中的設定檔在升級中會被保留,使用者不會失去之前自訂的功能。升級時不需要特別的設定檔,因為安裝與更新套件時,用的 RPM 檔案是一樣的。
套件查詢
RPM 提供的查詢選項能讓您透過整個 RPM 資料庫,搜尋所有可用套件,或是特定檔案。您也可以輕易地找出某個檔案屬於哪個套件、從何而來。包括在套件中的檔案都是以壓縮格式儲存,自訂的二進位表頭包含了有用的套件資訊及其內容。RPM 會快速、輕易地查詢這表頭。
系統驗證
另一個功能是驗證套件。如果您擔心與某個套件相關的檔案已經被刪除,您可以驗證該套件,檢查其提供的檔案之狀態。這驗證會告知您任何異常。如果錯誤發生,您可以輕易地重新安裝這些檔案。修改的設定檔在重新安裝過程中,都會被保留。
純淨的原始碼
RPM 的重要設計目標之一,是使用純淨的軟體原始碼,讓原始碼從作者手上流出後都能保持如一。有了 RPM,純淨的原始碼就可以包裝起來,包含任何使用的升級檔,外加完整的建立指示。這是非常重要的優勢,理由非常多。舉例來說,如果一個軟體釋出了新版本,您不需要從頭開始編譯。您可以看看更新部份,決定您「可能」需要作什麼。所有對這軟體作的編譯預設值與變更,藉由這技術都非常的一目瞭然。
讓原始碼保持純淨似乎只對程式設計師很重要,但這對使用軟體的使用者一樣重要。

3.1.2. RHN RPM 方針

RPM 的優勢在於其正確定義相依性與衝突的能力。Red Hat Network 依靠 RPM 的這項功能運作。Red Hat Network 提供了一個自動的環境,表示在安裝套件過程中,使用者不需手動干預。因此,在建立透過 Red Hat Network 發送的 RPM 時,請遵循下列規則:
  1. 學習 RPM。對 RPM 的重要功能有著基本的了解,是非常重要的,這可以讓您適當的建立套件。欲知更多 RPM 的詳情,請從以下資源著手:
  2. 當您要為子頻道建立 RPM 時,請在剛安裝好 Red Hat Enterprise Linux 的系統上建立,這系統的版本應與子基礎頻道的相同。請確定先從 Red Hat Network 取得、安裝所有升級。
  3. RPM 套件必須在不使用 --force--nodeps 選項下安裝。如果您無法在您要建立 RPM 的系統上,以乾淨的方式安裝 RPM,Red Hat Network 就無法在一台系統上自動安裝。
  4. RPM 套件的檔名必須是 NVR 格式(名稱、版本、釋出版本),同時必須包含套件的架構。適當的格式是name-version-release.arch.rpm。舉例來說,合格的 RPM 套件檔名是 pkgname-0.84-1.i386.rpm,其中名稱是 pkgname,版本是 0.84,釋出版本為 1,架構為 i386
  5. RPM 套件應該由套件的維護者來簽署。未簽署的套件還是可透過 Red Hat Network 來散佈;但 yum 更新程式必須強迫接受這些套件。強烈建議您簽署套件,詳情請參閱 節 3.2, “RHN 套件的數位簽章”
  6. 如果套件以任何方式改變過,請將這改變放入簽名中,或重新編譯,這版本或釋出版本必須累進計算。換句話說,透過 RHN 散佈的每個 RPM 的 NVRA(包含版本)必須反映出一個獨一無二的版本,以避免混淆。
  7. 沒有 RPM 可以自行淘汰。
  8. 如果一個套件被分成多個獨立套件,請特別注意相依性問題。除非您有充份的理由,否則請不要將現有套件分開。
  9. 沒有套件會仰賴互動式的安裝前、安裝後、反安裝前或反安裝後程序檔。如果套件需要使用者的直接干預,那麼它無法與 Red Hat Network 運作。
  10. 任何安裝前、安裝後、反安裝前或反安裝後程序檔都不該將任何東西寫入 stderr 或 stdout。如果需要的話,請將訊息重新導向到 /dev/null。否則的話,請寫入檔案。
  11. 當建立 spec 檔案時,請使用 /usr/share/doc/rpm-<version>/GROUPS 的群組定義。如果沒有完全符合的定義,請選一個次好的。
  12. 請使用 RPM 相依性的功能,確定程式在安裝後能正常執行。

重要

不要在安裝後程序檔中,用備份檔案,然後再解壓縮的方式建立 RPM。這會覆寫 RPM 的用意。
如果備份中的檔案不包括在檔案清單中,就無法驗證或檢查其衝突。在大部份情形下,RPM 會有效地壓縮、解壓縮。舉例來說,您不在 %postun 一節中清除的檔案,就不應該在 %post 中建立。