rpm包制作介绍
时间:2016-04-15 23:00 来源:linux.it.net.cn 作者:IT
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
(责任编辑:IT)
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提供了专门的目录进行打包:
对于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文件找到相关定义,最重要的是以下几个部分:
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 *
RPMS:
SOURCES:
SPECS:
SRPMS: 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 |