自己制作rpm软件包(1)

系统 1883 0

http://www.linuxfly.org/post/130/

 我们都知道,在目前的Linux环境下,要安装新软件,通常有两种方式:一是使用源码安装;二是使用rpm软件包。使用源码安装可以让用户了解编译过 程,及定制一些模块,和修改编译参数,但其工作量通常都很大,而且要求用户有足够的计算机知识。而rpm软件包方式则相对来说比较简单,也易于管理和升 级。所以,当前Linux发行版的前十中,有八个都是使用基于二进制软件包方式的(deb和rpm格式可以互转)。同样的,红旗也是基于rpm的打包方 式。
  下面要写的,就是如何制作自己的rpm包。这通常是为了减轻工作上带来的麻烦,例如分发软件到客户手上,或统一版本升级等。
一、关于rpm包

引用
1、rpm包:简单来说,就是把已经编译好的二进制代码整合到一个文件里面, 并且加入一些判断,如安装位置、依赖或冲突的软件包、安装前或后自动运行的脚本等等;
2、兼容性:由于rpm包在制作的时候,是在特定的发行版或硬件上编译的,所以, 不同发行版、或同一发行版不同版本号的rpm包一般都是不能互相兼容的 ,甚至由于spec宏的问题,使用.src.rpm编译也未必可以成功;
3、大部分的软件作者在发布源代码的同时,也会提供rpm或.spec文件,除非没有.spec文件,否则不建议自行编写,并且在编写的时候, 应使用标准宏 ,以提高可读性。


二、准备工作
在编译RPM前,需要简单了解一下编译时使用到的目录。

引用
[root@ftpserver asianux]# pwd
/usr/src/asianux


这个是红旗上编译RPM时使用的根目录。(自定义%_topdir不算,下面会提到)

引用
[root@ftpserver asianux]# ll
total 40
drwxr-xr-x  2 root root 4096 May 31 13:21 BUILD
drwxr-xr-x  8 root root 4096 Apr  6 00:08 RPMS
drwxr-xr-x  2 root root 4096 May 31 13:21 SOURCES
drwxr-xr-x  2 root root 4096 May 31 13:21 SPECS
drwxr-xr-x  2 root root 4096 Nov 30  2006 SRPMS


这些是编译时使用到的目录,其作用如下:

引用
BUILD - 编译时的工作目录,包括解压和make都会放到这里
RPMS  - 根据硬件平台的不同,存放最后生成的RPM软件包
SOURCES - 存放源码包的地方,源码必须以.tar.gz方式打包好
SPECS - 存放编译RPM时的.spec脚本
SRPMS - 存放编译好的.src.rpm软件包


※有一种说法,就是不建议使用root用户去编译RPM包,而上述目录都必须使用root用户才能读写的。 所以,我们可以使用下面的方式在用户主目录中创建一系列准备目录:

echo "%_topdir $HOME/rpm" >> $HOME/.rpmmacros
mkdir $HOME/rpm
mkdir $HOME/rpm/SOURCES
mkdir $HOME/rpm/SPECS
mkdir $HOME/rpm/BUILD
mkdir $HOME/rpm/SRPMS
mkdir $HOME/rpm/RPMS
mkdir $HOME/rpm/RPMS/i386


那今后,你就可以用对应的用户在这些目录上编译RPM包了。 (小心,有些软件的rpm必须使用root编译)
※避免生成 debuginfo 包
打 包过程默认会创建 debuginfo 包。大部分情况下,打包的软件已经是稳定版,我们并不需要调试程序,而普通用户也没有能力调试,所以每次都生成 debuginfo 包就显得没有太大必要了。我们可以创建一个自己家目录下的 rpm 配置文件 .rpmmacros,写入一行定义来禁止打包过程生成 debuginfo 包:

引用
echo '%debug_package %{nil}' >> ~/.rpmmacros


三、编译rpm
我们先以clamav软件包为例,从下面可以找到.src.rpm或.spec文件,有了这两个文件,要生成rpm包通常都是很简单的。
下载地址: 点击
1、存放到对应的路径

cd SOURCES/
wget http://dag.wieers.com/rpm/packages/clamav/clamav-0.90.2-2.rf.src.rpm


2、开始编译

rpmbuild --rebuild clamav-0.90.2-2.rf.src.rpm


这个通常都是结尾部分,提示生成的rpm放在哪里:

引用
......
Wrote: /usr/src/asianux/RPMS/i386/clamav-0.90.2-2.rf.i386.rpm
Wrote: /usr/src/asianux/RPMS/i386/clamd-0.90.2-2.rf.i386.rpm
Wrote: /usr/src/asianux/RPMS/i386/clamav-db-0.90.2-2.rf.i386.rpm
Wrote: /usr/src/asianux/RPMS/i386/clamav-devel-0.90.2-2.rf.i386.rpm
Wrote: /usr/src/asianux/RPMS/i386/clamav-debuginfo-0.90.2-2.rf.i386.rpm
Executing(%clean): /bin/sh -e /var/tmp/rpm-tmp.73550
+ umask 022
+ cd /usr/src/asianux/BUILD
+ cd clamav-0.90.2
+ /bin/rm -rf /var/tmp/clamav-0.90.2-2.rf-root
+ exit 0
Executing(--clean): /bin/sh -e /var/tmp/rpm-tmp.73550
+ umask 022
+ cd /usr/src/asianux/BUILD
+ rm -rf clamav-0.90.2
+ exit 0


3、生成的rpm会放在这里

引用
[root@ftpserver asianux]# ll /usr/src/asianux/RPMS/
total 11176
-rw-r--r--  1 root root  748454 Jun  1 16:04 clamav-0.90.2-2.rf.i386.rpm
-rw-r--r--  1 root root 9503667 Jun  1 16:04 clamav-db-0.90.2-2.rf.i386.rpm
-rw-r--r--  1 root root  838685 Jun  1 16:04 clamav-debuginfo-0.90.2-2.rf.i386.rpm
-rw-r--r--  1 root root  238038 Jun  1 16:04 clamav-devel-0.90.2-2.rf.i386.rpm
-rw-r--r--  1 root root   73708 Jun  1 16:04 clamd-0.90.2-2.rf.i386.rpm


4、可以关注一下.src.rpm的内容,下一日志教程中会用到

引用
# cp clamav-0.90.2-2.rf.src.rpm /tmp
# cd /tmp
# rpm2cpio clamav-0.90.2-2.rf.src.rpm |cpio -idvm
clamav-0.90.2.tar.gz
clamav-milter.init
clamav.init
clamav.spec


可以看到,其实.src.rpm中就存放有:

引用
clamav-0.90.2.tar.gz - 源代码.tar.gz - 对应放在SOURCES目录 -解压后会放在BUILD目录
clamav.spec - 生成rpm的.spec脚本文件 - 对应放在SPECS目录
clamav-milter.init -初始化文件 - 在生成rpm的过程中,会放在BUILD目录
clamav.init -初始化文件- 在生成rpm的过程中,会放在BUILD目录


生成rpm的过程会进行上述的操作,只是在最后执行%clean时,所有临时文件被清空而已。
※旧的发行版,或者说旧的rpm套件,会使用类似rpm --rebuild进行rpm的生成工作。而在新的版本中,通常都是独立开来的。例如,在红旗上使用的就是:

引用
# rpm -qa|grep rpm-build
rpm-build-4.3.3-18_nonptl.2AX


有几个常用的参数可以了解一下:

引用
# rpmbuild --help
--rebuild    从 构建二进制软件包
-ba            从 构建源码和二进制软件包
-bb            从 只构建二进制软件包
-bs            从 只构建源码软件包
-ta             从 构建源码和二进制软件包
-tb             从 只构建二进制软件包
-ts             从 只构建源码软件包


标识如下:

引用
指的是.src.rpm
指得是.spec
指得是把源代码打包成的.tar.gz格式
构建源码包 指生成.src.rpm(也就是通过.tar.gz和.spec生成)
构建二进制软件包 指生成最后的.rpm
 

自己制作rpm软件包(1)


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论