RPM包制作過程(一)


本機環境:centos7,64位

1. 首先安裝工具,rpmbuild可能在rpmdevtools里已經包含

#yum install rpm-devel.x86_64

#yum install rpmdevtools

2. 執行如下rpmdev-setuptree生成rpmbuild的工作目錄(會在當前用戶的根目錄下生成rpmbuild目錄)

#rpmdev-setuptree

3. 查看生成的rpmbuid工作目錄

#cd ~/rpmbuild/

#ls

結果如下圖所示

[ump@localhost rpmbuild]$ ls
BUILD  RPMS  SOURCES  SPECS  SRPMS

目錄含義解釋如下:

SOURCES      #放置打包資源,包括源碼打包文件和補丁文件

SPECS                  #放置SPEC文檔

BUILD                #打包過程中的工作目錄

RPMS                 #存放生成的二進制包

RPMS/i386            #存放生成的i386結構包

SRPMS                #存放生成的源碼包

 

撰寫SPEC文檔

SPEC撰寫是打包RPM的核心,也算是最難的一步,好在我們可以從參照一個簡單的模板文件開始,在可以實現基本功能的基礎上再一步一步的擴充文檔內容,直至完全達到要求。下面是一個簡單的SPEC文檔,其中包括了一些說明信息(注:#后面的內容為說明信息),該SPEC文檔是對一個測試的軟件項目hellorpm寫的,hellorpm軟件包編譯后僅有一個執行文件、一個手冊文件和一個項目說文件。

hellorpm.spec文檔的內容如下:
----------------------------------------------------------

#軟件包簡要介紹

Summary: hellorpm is a test program。

#軟件包的名字

Name: hellorpm        

#軟件包的主版本號           
Version: 2.2.6          

#軟件包的次版本號             
Release: 1   

#源代碼包,默認將在上面提到的SOURCES目錄中尋找                        
Source0: %{name}-%{version}.tar.gz   

#授權協議

License: GPL     

                  

#定義臨時構建目錄,這個地址將作為臨時安裝目錄在后面引用

BuildRoot:%{_tmppath}/%{name}-%{version}-%{release}-root

#軟件分類

Group: Development/Tools  

#軟件包的內容介紹               
%description                         
The hellorpm program is a test.

#表示預操作字段,后面的命令將在源碼代碼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/hellorpm將出現在軟件包中      
/usr/local/bin/hellorpm      

#聲明並設置文件屬性   
%doc %attr(0444,root,root) /usr/local/man/man1/hellorpm.1  

#同上,聲明文檔文件 

%doc README  


-----------------------------------------------------------------------------------

這個文檔需要說明的一點:

BuildRoot:%{_tmppath}/%{name}-%{version}-%{release}-root

上面BuildRoot變量表示的是源碼的臨時按照目錄,rpmbuild就是通過次目錄 獲得將要按照到系統中的所有文件,而在SPEC文檔后面make install 命令中的參數DESTDIR=$RPM_BUILD_ROOT即是對該參數的引用,這個參數將傳給Makefile文件一告訴自動構建工具應該安裝文件那 里(實際上我再前文提到過的Makefile需要作一些改造以適應RPM的構建就包括此操作,你的Makefile文件中至少要知道在RPM構建過程中引 用此參數的值去控制安裝操作的目標)。

如上一個簡單的SPEC文檔撰寫完成,下面把一個名為hellorpm-2.2.6.tar.gz的源碼壓縮文件放到
rpmbuild根目錄下的SOURCES目錄下(注,確保此歸檔文件解壓后的目錄為hellorpm-2.2.6
否則會有問題)。 到此一個完整的rpm打包環境已經構建完成,下面我們就可以開始構建二進制和源代碼RPM包。


構建RPM

構建RPM包是有命令rpmbuildSPEC的指導下完成。

開始構建操作,首先進入到當前用戶的rpmbuild根目錄(即上面提到的目錄環境)。

#cd ~/rpmbuild/

執行如何命令,-ba表示build all,即生成包括二進制包和源代碼包的所有RPM包,下來如果正常的話,rpmbuild將正常退出,同時在RPMS目錄和SRPMS目錄中將生成對應的RPM包。

#rpmbuild -ba SPECS/hellorpm.spec

這里僅僅介紹了一個最簡單軟件的最簡單的RPM的打包操作過程,諸如帶有共享文件的需要進行復雜配置的具有復雜依賴關系的等等的項目的打包以及后期的維護,包括補丁的制作我將在下來的時間完成補充更新,今天時間不早了,該休息了!

注:費了大半夜的功夫,搞出這么個令人不滿意的文檔,我思考着,這樣做有多少意義呢?不敢重復發明輪子的,站到巨人的肩膀你才能看得更遠,是這樣嗎?
是不是下周開始立個計划,每周至少翻譯三篇fedora官網的文檔給自己練練手。那糟糕的英語,唉!


參考資料:

http://www.linuxsir.org/main/?q=node/50 RPM 的介紹和應用(北南兄)

http://www.ibm.com/developerworks/cn/linux/management/package/rpm/part3/ 用 RPM 打包軟件

http://hlee.javaeye.com/blog/343499 RPMrpmbuild SPEC文件深度說明

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM