RPM製做就是指改造軟件源代碼使之符合RPM打包要求的過程,這也能夠等價爲RPM源碼包的製做過程,由於當你有了源碼包就能夠直接編譯獲得二進制安裝包和其餘任意包。數據庫
依賴:工具
yum install rpmdevtools
執行 rpmdev-setuptree
將在當前用戶主目錄下建立一個RPM構建根目錄結構ui
注:如需改變默認位置,能夠修改配置文件:~/.rpmmacros
中變量_topdir
對應的值。設計
. ├── BUILD (打包過程當中的工做目錄) ├── RPMS (存放生成的二進制包, 不一樣硬件平臺存放在不一樣文件夾) ├── SOURCES (存放打包資源, 包括源碼打包文件和補丁文件等) ├── SPECS (存放SPEC文檔) └── SRPMS (存放生成的源碼包)
SPEC撰寫是打包RPM的核心, 下面是一個簡單的SPEC文檔, 其中包括了一些說明信息, 假設咱們須要建立一個軟件項目devrpm。code
建立 devrpm.spec 文檔:ip
#軟件包簡要介紹 Summary: build develop environment。 #軟件包的名字 Name: develop environment #軟件包的主版本號 Version: 0.0.1 #軟件包的次版本號 Release: 1 #源代碼包,默認將在上面提到的SOURCES目錄中尋找 Source0: %{name}-%{version}.tar.gz #受權協議 License: GPL #定義臨時構建目錄,這個地址將做爲臨時安裝目錄在後面引用 BuildRoot:%{_tmppath}/%{name}-%{version}-%{release}-root #軟件分類 Group: Development/Tools #軟件包的內容介紹 %description build local develop environment. #表示預操做字段,後面的命令將在源碼代碼BUILD前執行 %prep #構建BUILD環境,將解壓源碼壓縮包到BUILD目錄 %setup -q #BUILD字段,將經過直接調用源碼目錄中自動構建工具完成源碼編譯操做 %build #調用源碼目錄中的configure命令 ./configure #在源碼目錄中執行自動構建命令make make #安裝字段 %install #調用源碼中安裝執行腳本 make DESTDIR=$RPM_BUILD_ROOT install #文件說明字段,聲明多餘或者缺乏都將可能出錯 %files #設置文件權限屬性 %defattr(-,root,root) #聲明/usr/local/bin/devrpm將出如今軟件包中 /usr/local/bin/devrpm #聲明並設置文件屬性 %doc %attr(0444,root,root) /usr/local/man/man1/devrpm.1 #同上,聲明文檔文件 %doc README
文檔說明:資源
BuildRoot:%{_tmppath}/%{name}-%{version}-%{release}-root
上面BuildRoot變量表示的是源碼的臨時按照目錄,rpmbuild就是經過此目錄得到將要按照到系統中的全部文件,而在SPEC文檔後面make install
命令中的參數。DESTDIR=$RPM_BUILD_ROOT
便是對該參數的引用,這個參數將傳給Makefile文件一告訴自動構建工具應該安裝文件那裏。實際上我再前文提到過的Makefile須要做一些改造以適應RPM的構建就包括此操做,你的Makefile文件中至少要知道在RPM構建過程當中引用此參數的值去控制安裝操做的目標。開發
把一個名爲devrpm-0.0.1.tar.gz
的源碼壓縮文件放到rpmbuild
根目錄下的SOURCES目錄下(注,確保此歸檔文件解壓後的目錄爲devrpm-0.0.1,不然會有問題)。文檔
到此一個完整的rpm打包環境已經構建完成,下面咱們就能夠開始構建二進制和源代碼RPM包。源碼
構建RPM包是有命令rpmbuild在SPEC的指導下完成。
開始構建操做,首先進入到當前用戶的rpmbuild根目錄(即上面提到的目錄環境)。
#cd ~/rpmbuild/
執行如何命令,-ba表示build all,即生成包括二進制包和源代碼包的全部RPM包,下來若是正常的話,rpmbuild將正常退出,同時在RPMS目錄和SRPMS目錄中將生成對應的RPM包。
#rpmbuild -ba SPECS/hellorpm.spec