CentOS 建立 rpmbuild 環境

務必使用一般帳號執行 rpmbuild ,以 root 執行有可能毀損系統

安裝 rpmbuild

$ sudo yum install rpm-build
$ sudo yum install redhat-rpm-config

產生 rpmbuild 使用的目錄及檔案

$ mkdir -p ~/rpmbuild/{BUILD,RPMS,SOURCES,SPECS,SRPMS}
$ echo '%_topdir %(echo $HOME)/rpmbuild' > ~/.rpmmacros

準備必要檔案

建置需要專案原始程式碼以及建置 spec 文件,或者使用已包裝好內含原始碼及 spec 的 SRPM 包。

可先嘗試以 yumdownloader 自 yum repo 下載 SRPM 包

$ yumdownloader --source <package>

若無法取得 SRPM ,則須下載專案原始程式碼置於 ~/rpmbuild/SOURCES,並自行編寫 spec 文件置於 ~/rpmbuild/SPECS

安裝建置用相依套件

可使用 yum-builddep 安裝建置需要的相依套件

$ sudo yum-builddep <srpm>
$ sudo yum-builddep <specfile>

如果要在 x86_64 環境安裝 i686 的相依套件,則建議使用

$ sudo yum-builddep --target=i686 -x *.x86_64 <srpm>
$ sudo yum-builddep --target=i686 -x *.x86_64 <specfile>

以避免部份 spec 文件未在相依套件名稱後端加上 %{?_isa}

建置 RPM

使用 SRPM 包時

$ rpmbuild --rebuild <srpm>

使用專案原始檔及 spec 文件時

$ rpmbuild -bb <specfile>

若建置過程中沒有編譯錯誤,可以在 ~/rpmbuild/RPMS 目錄下看到建置完成的 rpm 檔案。

在 x86_64 環境建置 i686 rpm 時

$ rpmbuild --target=i686 -rebuild <srpm>
$ rpmbuild --target=i686 -bb <specfile>

spec 檔案通常也需要對應 i686 做必要的修正

安裝、查詢與移除 RPM

安裝
$ sudo rpm -ivh <package>.rpm
安裝到指定的位置
$ sudo rpm --prefix=<path> -ivh <package>.rpm
移除
$ sudo rpm -e <package>
查詢已安裝套件
$ sudo rpm -qa '<package>' (package 可包含 wildcard)
使用 yum 並同時安裝相依套件
$ sudo yum --nogpgcheck localinstall <package>