Windows XP Windows 7 Windows 2003 Windows Vista Windows 綜合教學 Linux 系統教學
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟體教學
您现在的位置: Windows教程網 >> Windows教程 >  >> Linux 系統教學 >> Linux 教學

Linux RPM 套件製作完整教學:從原始碼到安裝部署的標準化流程

編輯:Linux 教學

RPM(RPM Package Manager)雖源自 Red Hat,但其開放的封裝格式已成為 Linux 軟體分發的事實標準。掌握 RPM 打包技能,不僅能將自編譯程式標準化部署,更能統一管理依賴關係、版本升級與檔案驗證。本文以 rp-pppoe-3.10 為例,完整演示從原始碼到生成 .rpm、.src.rpm 的標準化流程,並涵蓋常見錯誤排除與安裝驗證。

一、建構環境準備

確保系統安裝 rpm-build、rpmdevtools 等工具,並建立標準目錄樹(rpmdev-setuptree 可自動建立):

~/rpmbuild/
├── BUILD/       # 編譯暫存目錄
├── RPMS/        # 輸出二進制 RPM(按架構分子目錄)
├── SOURCES/     # 原始碼 tarball 與 .spec 檔
├── SPECS/       # .spec 規範檔
├── SRPMS/       # 輸出原始碼 RPM
└── BUILDROOT/   # 虛擬安裝根目錄

二、核心步驟:以 rp-pppoe 為例

1. 取得原始碼與 Spec 檔

# 下載原始碼
wget https://example.com/rp-pppoe-3.10.tar.gz

# 解壓並取出 spec 檔
tar zxvf rp-pppoe-3.10.tar.gz
cp rp-pppoe-3.10/rp-pppoe.spec ~/rpmbuild/SPECS/
cp rp-pppoe-3.10.tar.gz ~/rpmbuild/SOURCES/

2. 編譯打包

cd ~/rpmbuild/SPECS/
# 僅產生二進制 RPM
rpmbuild -bb rp-pppoe.spec

# 同時產生二進制與原始碼 RPM
rpmbuild -ba rp-pppoe.spec

成功後,二進制 RPM 位於 ~/rpmbuild/RPMS/x86_64/,原始碼 RPM 位於 ~/rpmbuild/SRPMS/。

3. 驗證輸出

ls -lh ~/rpmbuild/RPMS/x86_64/
# rp-pppoe-3.10-1.x86_64.rpm
# rp-pppoe-debuginfo-3.10-1.x86_64.rpm
# rp-pppoe-gui-3.10-1.x86_64.rpm

三、RPM 安裝與管理實戰

1. 查詢與移除舊版本

rpm -qa rp-pppoe          # 查詢已安裝版本
rpm -e rp-pppoe           # 移除舊套件

2. 安裝新打包的 RPM

cd ~/rpmbuild/RPMS/x86_64/
rpm -ivh rp-pppoe-3.10-1.x86_64.rpm
# 輸出:Preparing... ########################################### [100%]
#       1:rp-pppoe ########################################### [100%]

3. 驗證安裝結果

rpm -qa rp-pppoe                 # 確認版本
ls /etc/ppp/pppoe-server-options # 關鍵配置檔是否存在

四、常見建構錯誤與解決方案

錯誤:Installed (but unpackaged) file(s) found

原因:編譯安裝產生的檔案未在 %files 區段宣告,導致 RPM 檢查失敗。

解法(兩種擇一):

  1. 修正 .spec 檔:在 %files 區段補上遺漏檔案路徑(推薦,符合規範)。
  2. 暫時關閉檔案檢查:編輯 /usr/lib/rpm/macros,註釋掉
    %__check_files /usr/lib/rpm/check-files %{buildroot}
    再重新建構。僅限測試環境臨時使用。

五、進階技巧與最佳實踐

  • 使用 Mock 建構:在乾淨的 chroot 環境中編譯,避免宿主機汙染,支援多發行版/架構交叉編譯。
  • 簽名與驗證:rpmsign --addsign *.rpm 配合 GPG 金鑰,確保套件來源可信。
  • 依賴自動化:Requires/BuildRequires 欄位配合 rpmbuild 自動解析共享庫依賴(find-requires)。
  • Patch 管理:Patch0: fix-xxx.patch + %patch0 -p1 統一管理修補檔。
  • 宏變數善用:%{name}、%{version}、%{_bindir} 等宏提高可移植性。

六、快速參考:關鍵命令彙總

操作命令
建立建構樹rpmdev-setuptree
僅建構二進制 RPMrpmbuild -bb SPECS/xxx.spec
建構二進制+原始碼 RPMrpmbuild -ba SPECS/xxx.spec
安裝/升級rpm -ivh / -Uvh pkg.rpm
查詢套件資訊rpm -qip / -qlp pkg.rpm
驗證已安裝套件rpm -V pkgname
解包 RPM 內容rpm2cpio pkg.rpm | cpio -idmv

掌握 RPM 打包,意味著你擁有了將任意開源軟體、內部工具、腳本標準化為「可版本、可依賴、可驗證、可回滾」交付物的能力——這正是 Linux 運維自動化與基礎設施即代碼的基石之一。

Copyright © Windows教程網 All Rights Reserved