製做 RPM 包

介紹

縮寫

  • 前世:RPM爲Red Hat Package Manager的縮寫(Red Hat軟件包管理),顧名思義是Red Hat貢獻出來的軟件包管理。
  • 今身:RPM爲RPM Package Manager的縮寫(GNU的既視感)。

特色

  • RPM包中除了包括程序運行時所須要的文件,也有其它的文件。
  • RPM包中的應用程序,有時除了自身所帶的附加文件保證其正常之外,還須要其它特定版本文件,這就是軟件包的依賴關係。
  • RPM可讓用戶直接以binary方式安裝軟件包,而且可替用戶查詢是否已經安裝了有關的庫文件。
  • RPM刪除程序時,它又會聰明地詢問用戶是否要刪除有關的程序。
  • RPM升級軟件時,RPM會保留原先的配置文件,這樣用戶就不用從新配置新的軟件了。
  • RPM保留一個數據庫,這個數據庫中包含了全部的軟件包的資料,經過這個數據庫,用戶能夠進行軟件包的查詢。
  • RPM雖然是爲Linux而設計的,可是它已經移值到SunOS、Solaris、AIX、Irix等其它UNIX系統上了。RPM遵循GPL版權協議,用戶能夠在符合GPL協議的條件下自由使用及傳播RPM。

類型

  • 二進制類包,包括rpm安裝包(通常分爲i386和x86等幾種)和調式信息包等。
  • 源碼類包,源碼包和開發包應該歸位此類。

總結

RPM製做就是指改造軟件源代碼使之符合RPM打包要求的過程,這也能夠等價爲RPM源碼包的製做過程,由於當你有了源碼包就能夠直接編譯獲得二進制安裝包和其餘任意包。數據庫

依賴:工具

yum install rpmdevtools

開始

建立目錄結構

執行 rpmdev-setuptree 將在當前用戶主目錄下建立一個RPM構建根目錄結構ui

注:如需改變默認位置,能夠修改配置文件:~/.rpmmacros中變量_topdir對應的值。設計

.
├── BUILD (打包過程當中的工做目錄)
├── RPMS (存放生成的二進制包, 不一樣硬件平臺存放在不一樣文件夾)
├── SOURCES (存放打包資源, 包括源碼打包文件和補丁文件等)
├── SPECS (存放SPEC文檔)
└── SRPMS (存放生成的源碼包)

撰寫SPEC文檔

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包

構建RPM包是有命令rpmbuild在SPEC的指導下完成。

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

#cd ~/rpmbuild/

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

#rpmbuild -ba SPECS/hellorpm.spec
相關文章
相關標籤/搜索