rpm包制作介紹


RPM(Rpm Package Management)在ReadHat等發行版下被用作軟件包管理程序,其將某個軟件相關的文件置入一個.rpm包中,用rpm命令,我們可以方便地完成Linux下軟件安裝、文件查看等操作。在《rpm包管理》一文中我們學習了rpm安裝、查看軟件包的相關方法,下面介紹如何制作rpm包。

 

1.兩種rpm包

用rpm打包,將會產生兩種rpm包,一是源碼包(xxx.src.rpm),一是binary包(xxx.rpm)。源碼包可用於開源軟件發布源碼,一般包含xxx.spec文件和xxx.tar.gz文件;binary包用於直接軟件安裝,包含已完成編譯的可執行文件以及相關配置文件等:

# rpm -qlp ../SRPMS/hello-0.1-1.src.rpm 
hello-0.1-1.spec
hello-0.1-1.tar.gz

# rpm -qlp ../RPMS/x86_64/hello-0.1-1.x86_64.rpm /bin/hello
/usr/share/doc/packages/hello
/usr/share/doc/packages/hello/README

 

2.打包目錄

從.tar.gz等格式的源碼文件,到.rpm文件,需要經過編譯過程,為此rpm提供了專門的目錄進行打包:

  • SOURCES目錄:存放.tar.gz源碼文件
  • SPECS目錄:存放.spec文件
  • SRPMS目錄:存放生成的xxx.src.rpm文件
  • BUILD目錄:存放解壓后的源碼文件或其他中間的臨時文件
  • RPMS目錄:存放生成的xxx.rpm文件

對於suse,以上目錄在/usr/src/packages路徑下,對於RedHat,以上目錄在/usr/src/redhat路徑下。

 

3.spec文件

rpm包制作過程中最主要一步就是編寫spec文件,spec文件用於提供軟件相關描述以及如何編譯、安裝等信息,以下是一個spec文件示例:

Summary: rpm hello world.
Name: hello
Version: 0.1
Source: $RPM_SOURCE_DIR/hello-0.1-1.tar.gz
Release: 1
Vendor: lx
License: Share
Group: Application/test

%description
print hello

%prep rm -rf $RPM_BUILD_DIR/hello-0.1-1
zcat $RPM_SOURCE_DIR/hello-0.1-1.tar.gz | tar xvf -

%build
cd $RPM_BUILD_DIR/hello
make

%install
cd $RPM_BUILD_DIR/hello
make install

%files %doc $RPM_BUILD_DIR/hello/README
/bin/hello

以上開頭一段用於描述軟件包相關信息,除了Summary/Name/Version/Source/Release/Vonder/License/Group外還有其他可選域,以上所列除Source外其他為必選域,建議在spec中提供Source信息,生成.src.rpm時軟件包由Source提供的路徑獲取,否則.src.rpm中不包含.tar.gz源碼包。

 

后面%xx為spec文件的宏定義,在/usr/lib/rpm/macros文件找到相關定義,最重要的是以下幾個部分:

  • %prep:編譯前的准備部分,一般為刪除之前的中間文件(BUILD目錄),解壓縮源碼文件
  • %build:完成make編譯部分,如果源碼中提供了Makefile文件,就是一條make命令
  • %install:完成安裝部分,如果源碼中提供了Makefile文件,就是一條make install命令
  • %files:列出軟件被安裝后,目標機器上由該文件新建的文件,包括可執行文件、配置文件、man文件等

 

4.生成目標文件

.tar.gz文件放到SOURCES目錄下,.spec文件編輯完成並放到SPECS目錄下,這些完成后我們就可以打包生成.src.rpm文件和.rpm文件了:

# rpmbuild -ba hello-0.1-1.spec

以上rpmbuild命令用到 -ba 選項,表示既生成.src.rpm文件,又生成.rpm文件。以上命令執行后,我們來看各打包目錄下生成的文件:

/usr/src/packages # ll *
BUILD:
drwxr-xr-x 2 root root 4096 04-13 20:49 hello

RPMS:
drwxrwxrwt 2 root root 4096 04-13 20:49 x86_64

SOURCES:
-rw-r--r-- 1 root root 346 04-13 00:42 hello-0.1-1.tar.gz

SPECS:
-rw-r--r-- 1 root root 411 04-13 22:46 hello-0.1-1.spec

SRPMS:
-rw-r--r-- 1 root root 2076 04-13 20:49 hello-0.1-1.src.rpm

RPMS的x86_64目錄下:

/usr/src/packages # ll RPMS/x86_64/
-rw-r--r-- 1 root root 5102 04-13 20:49 hello-0.1-1.x86_64.rpm

 

5.rpm解包

rpm2cpio xxx.rpm | cpio -div

 

Reference: Maximum RPM

                RPM HOWTO


免責聲明!

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



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