centOS下制作RPM包

时间:2022-08-01 16:40:13

0:说明

本文以centOS环境的安装包为例来说明问题。请读者诸君举一反三。谢谢!

1.环境的准备:

安装环境时当前用户要有系统管理权限。但是在制作RPM包时请一定要用无系统管理权限的用户来进行操作。在开始一切的准备工作之前,请先保证您的工作环境下已经安装了gcc和make。关于这两个工具的安装方法,这里不再赘述。

1.1安装组件

    安装rpm-build,用如下命令:

sudo yum install rpm-build

    安装redhat-rpm-config,用如下命令:

sudo yum install redhat-rpm-config

    PS:如果工作人员认为有必要的话可以安装rpmdev-newspec。这个小工具是用来生成.spec文件模板的。因为不是必选工具所以关于它的安装和使用方法在这里就不再赘述。

1.2在用户的主目录下创建必须的文件夹和文件

用下面的命令创建必要的文件夹,其中BUILD是用来保存打包过程中生成的临时文件用的;RPMS用来保存生成的二进制RPM包;SOURCES用来保存打包用的源文件(包括压缩文件);SPECS用来保存.spec脚本;SRPMS用来保存生成的源代码rpm包。

mkdir -p ~/rpmbuild/{BUILD,RPMS,SOURCES,SPECS,SRPMS}

    用下面的命令生成rpmbuild所需要的宏文件,这个文件里包含的是.spec中要引用的相对路径。文件里的内容可以手动配置和编写,格式符合要求即可。

echo '%_topdir %(echo $HOME)/rpmbuild' > ~/.rpmmacros

2.制作.spec文件

    这里用我们制作asterisk的二进制rpm包为例来说明制作.spec文件的方法。所有的.spec文件都可以参照和类比这种方式来制作。

2.1.spec文件的格式

    用如下命令生成asterisk.spec

cd ~/rpmbuild
vi ./SPECS/asterisk.spec

         我将如下的内容输入到了文件中。

Name:          asterisk
Version:       1.8.15
Release:        1%{?dist}
Summary:        Design by wanzhao
Group:          Applications/Internet
License:        GPL
URL:            www.wanzhao.com
Source0:        certified-asterisk-1.8.15-current.tar.gz
 
%description
Design by Wanzhao
 
%prep
cd $RPM_BUILD_DIR
tar xzvf ../SOURCES/certified-asterisk-1.8.15-current.tar.gz
 
%build
cd $RPM_BUILD_DIR/certified-asterisk-1.8.15-cert5
./configure
make
 
%install
cd $RPM_BUILD_DIR/certified-asterisk-1.8.15-cert5
make install
make samples 
cd ../BUILDROOT
cp -fr /etc/asterisk ./asterisk-1.8.15-1.x86_64/
 
%files
/asterisk/
 
%clean
rm -rf $RPM_BUILD_DIR/certified-asterisk-1.8.15-cert5

2.2asterisk内容说明

Name:

软件包的名字,最终RPM软件包是用该名字与版本号,释出号及体系号来命名软件包的。

Version:

软件版本号。仅当软件包比以前有较大改变时才增加版本号。

Release:

软件包释出号。一般我们对该软件包做了一些小的补丁的时候就应该把释出号加1。

Copyright:

软件包所采用的版权规则。具体有:GPL(*软件),BSD,MIT,Public Domain(公共域),Distributable(贡献),commercial(商业),Share(共享)等,一般的开发都写GPL。

Group:

软件包所属类别,具体类别有:

Amusements/Games (娱乐/游戏)

Amusements/Graphics(娱乐/图形)

Applications/Archiving (应用/文档)

Applications/Communications(应用/通讯)

Applications/Databases (应用/数据库

Applications/Editors (应用/编辑器)

Applications/Emulators (应用/仿真器)

Applications/Engineering (应用/工程)

Applications/File (应用/文件)

Applications/Internet (应用/因特网)

Applications/Multimedia(应用/多媒体)

Applications/Productivity (应用/产品)

Applications/Publishing(应用/印刷)

Applications/System(应用/系统)

Applications/Text (应用/文本)

Development/Debuggers (开发/调试器)

Development/Languages (开发/语言)

Development/Libraries (开发/函数库)

Development/System (开发/系统)

Development/Tools (开发/工具)

Documentation (文档)

System Environment/Base(系统环境/基础)

System Environment/Daemons (系统环境/守护)

System Environment/Kernel (系统环境/内核)

System Environment/Libraries (系统环境/函数库)

System Environment/Shells (系统环境/接口)

User Interface/Desktops(用户界面/桌面)

User Interface/X (用户界面/X窗口)

User Interface/X Hardware Support (用户界面/X硬件支持)

Source:

源程序软件包的名字。如果有多个文件或部分可以写作:Source0……;source1……;Source3……;……

%description:

软件包详细说明,可写在多个行上。

%prep

这个段是预处理段,通常用来执行一些解开源程序包的命令,为下一步的编译安装作准备。%prep和下面的%build,%install段一样,可以执行shell命令。如我们在就加入了tar命令、cd命令等。

% build段

本段是编译段,所要执行的命令为生成软件包服务,如./configure、make 命令。

%install段

本段是安装段,其中的命令在安装软件包时将执行,如make install等命令。根据不同的软件,命令会有所不同。

%files段

本段是文件段,用于定义生成的rpm包所包含的文件。所以要打到rpm包里的文件都要在这里列出来。如果缺少这个段,则无法生成二进制的rpm文件。

%clean段

本段是生来清理由前面的步骤生成的垃圾文件的。同样,这个段由shell命令组成。

3.打包

如果只打包二进制rpm包可以用下面的命令:

rpmbuild –bb ****.spec

如果只打包源代码rpm包可以用如下命令:

rpmbuild –bs ****.spec

如果二进制rpm包和源代码rpm包都需要,则用如下命令:

rpmbuild –ba ****.spec

 

4.参考资料:

http://wiki.centos.org/HowTos/SetupRpmBuildEnvironment

http://tecadmin.net/create-rpm-of-your-own-script-in-centosredhat/

https://fedoraproject.org/wiki/How_to_create_a_GNU_Hello_RPM_package

http://www.ibm.com/developerworks/cn/linux/l-rpm/