為什麼需要套件管理器#

從原始碼編譯安裝軟體雖然靈活,但有幾個明顯的痛點:

  • 編譯環境的準備與設定繁瑣
  • 相依性地獄:軟體 A 需要函式庫 B,B 又需要 C,手動管理極度困難
  • 沒有統一的更新與移除機制

套件管理器就是為了解決這些問題而生的——它將編譯好的軟體打包成標準格式,統一管理安裝、更新、移除與相依性。

Linux 的兩大套件管理體系#

體系套件格式管理工具代表發行版
Red Hat 系.rpmrpm / yum / dnfRHEL、CentOS、Fedora
Debian 系.debdpkg / aptDebian、Ubuntu

套件格式的差異是 Linux 發行版之間最顯著的分歧之一。但無論哪種體系,背後的概念都是相同的:打包、相依性解析、版本管理。

RPM(Red Hat Package Manager)#

RPM 是 Red Hat 系發行版的基礎套件格式。一個 .rpm 檔案包含:

  • 已編譯好的二進位程式
  • 設定檔
  • 相依性資訊
  • 安裝/移除時的腳本

RPM 的命名慣例#

軟體名稱-版本-釋出版次.架構.rpm

例如:httpd-2.4.6-97.el7.centos.x86_64.rpm

RPM 資料庫#

所有已安裝的 RPM 套件資訊都記錄在 /var/lib/rpm/ 資料庫中。這讓系統能夠追蹤每個檔案屬於哪個套件、檢查套件完整性、以及安全地移除套件。

RPM 的限制#

RPM 本身不會自動解決相依性。如果安裝 A 需要 B,你得自己先安裝 B。這在實際操作中非常痛苦,因此需要更高階的工具——YUM。

YUM(Yellowdog Updater Modified)#

YUM 建立在 RPM 之上,最大的價值是自動解決相依性。它從**軟體庫(Repository)**中下載套件,自動分析並安裝所有需要的相依套件。

軟體庫(Repository)#

軟體庫是存放 RPM 套件的伺服器。YUM 的設定檔在 /etc/yum.repos.d/,指定了:

  • 軟體庫的 URL
  • 是否啟用
  • GPG 金鑰驗證

CentOS 預設的軟體庫只包含穩定的套件。如果需要較新或較冷門的軟體,可以啟用第三方軟體庫(如 EPEL、RPMFusion)。但第三方軟體庫可能與官方套件衝突,使用時需注意。

YUM 的核心操作觀念#

  • 安裝:下載套件及其所有相依套件,一次安裝
  • 更新:自動比對已安裝的版本與軟體庫中的最新版本
  • 移除:移除套件並處理反向相依性
  • 群組安裝:安裝一組相關的套件(如 “Development Tools”)

SRPM(Source RPM)#

SRPM 是包含原始碼的 RPM。它不是直接安裝的——你需要用 rpmbuild 將它重新編譯成一般的 RPM。

SRPM 的用途:

  • 需要針對特定環境調整編譯參數
  • 需要修補(patch)原始碼
  • 建立客製化的 RPM 套件

SRPM 是 RPM 系發行版維護原始碼可追溯性的方式——每個 RPM 都能追溯到對應的 SRPM,確保二進位套件確實是從公開的原始碼編譯而來。

套件管理的最佳實踐#

  • 優先使用套件管理器安裝軟體,享受自動化的更新與相依性管理
  • 只有在套件管理器沒有提供、或需要特殊編譯選項時,才從原始碼安裝
  • 不要混用安裝方式:同一個軟體不要既用 rpm 安裝又從原始碼安裝,會造成檔案衝突
  • 定期更新:安全更新應盡快套用,特別是已知的安全漏洞修復

在現代的容器化環境中,套件管理的觀念延伸到了容器映像的層級——Dockerfile 中的 yum install / apt-get install 就是在建置容器時管理套件。映像的大小、層數、安全更新,都與套件管理的知識直接相關。