分享
 
 
 

简易rpm套件的制作

王朝other·作者佚名  2006-11-24
窄屏简体版  字體: |||超大  

在使用linux的过程中可能可能需要安装新的软件,升级已安装的软件或删除已安装的

软件,这就或多或少要涉及到rpm.

Rpm是redhat公司开发的一种源代码和二进制代码封装的方式,这种封装的方式能让用

户轻松的进行软件包的管理,包括软件包的安装、升级、删除、查询和管理。由于采用rpm

方式安装软件包无论是从二进制和源代码方面来讲,都比用.tar.gz的方式要简单的多.故用

rpm安装软件成了一个linux下安装软件的标准.对于一个有志于linux下软件软件编程的程

序员来说,掌握简易的rpm套件的制作对于推广自己的程序非常有用.

Rpm套件的制作大致可分为:

1. 取得.tar.gz格式的软件源程序和补丁文件.

2. 制作rpm套件的spec规格文件.

3. 执行rpm –ba 产生并测试rpm套件.

整个包装rpm套件的重心就在于如何定义完整的rpm套件规格文件(specification)以及包

装后的测试工作.制作rpm套件之前,必须先了解整个系统文件的目录结构与运行,因为某些

rpm套件的制作会常常牵扯到系统运行的问题,比如安装了某种新的shell,就必须在/etc/shells

中加入该shell的可执行文件路径和名称,才能正确的使用该shell.为了免除考虑这个顾虑,可

以先从无关系统运行的应用软件做起,等对linux系统相当熟悉了,再尝试这些涉及到系统运

行的rpm套件制作.

Rpm的Spec就如同编译程序时的Makefile,定义制作Rpm包的所有文件信息及制作流程,

其主要工作将源程序解压缩,为源程序打补丁,编译源程序,包装二进制码Rpm包,包装源代码

Rpm包,清除包装过程在Build目录产生的临时目录.

它山之石,可以攻玉.多看看他人已经编好的spec文件,是学习spec文件编写的捷径,用以

下命令将spec文件取出.

$:rpm –qlp *.src.rpm

$:rpm2cpio *.src.rpm|cpio –ivh *.spec

首先执行rpm –qlp查询,得知该套件中有个.spec文件,再执行rpm2cpio将rpm文件转换

成cpio文件格式,并将转换结果输出给cpio程序,把source rpm套件中的sepc文件解压取出.

打开一个spec文件,可以发现它可以分为以下几个段: %define、 %description、%prep、%build、

%install、%clean、%files、%changelog。

%define段主要用来做一些全局定义,如:版本号:Version;简单的概要:Summary;程

序的名称:Name;版权:Copyright;软件所属的组:Group;Source名称是最重要的位置,

这里定义Source的来源(一些tar.gz文件和一些补丁文件,若该软件的Source不仅只有一个

文件,可以指定多重源程序,只需要将"Source"和"Patch"标签编号,依次指定即可),用户必

须把该文件放在/usr/src/redhat/SOURCES目录下,rpm才可以进行包装工作;icon指名该套

件的图标,前提必须是一个gif文件,且位于/usr/src/redhat/source目录下;常常在安装某

软件是会出现某些依赖关系信息,告诉用户必须先安装某些套件才能安装这个rpm套件的

情况,需要制作这种功能的rpm套件,就是依赖"Requires"这个标签, Requires共有<、〉、<=、

=、 >=这五种.若某软件同时需要用到三四个函数库,则Requires标签就必须定义三四行.或

用逗号隔开写成一行.如: Requires: kdesupport.当然, %define段的标签还有几个,不过不

常用,这里就不再多说了.

%description段较为简单,主要是对该软件的一个简要的介绍.

%prep 段是spec的准备段,该段主要执行包装Rpm包的准备工作,检查标签语法是否正

确,检查/usr/src/redhat/SOURCES目录是否存放源程序及补丁文件,删除旧的软件源程序,

并替程序作untar、patch等工作。当然,这些工作可以写一些shell script来进行指定的

工作,但是如果真的写shell script来进行这些准备工作,可能会令人苦恼。于是rpm开

发人员为用户提供了%setup和%patch这两个命令来替用户处理这些繁杂的准备工作。

%setup 不加任何选项,仅将软件包打开。

%setup –n newdir 将软件包解压在newdir目录。

%setup -c 解压缩之前先产生目录。

%setup –b num 将第num个source文件解压缩。

%setup –T 不使用default的解压缩操作。

%setup –T –b 0 将第0个源代码文件解压缩。

%setup –c –n newdir 指定目录名称newdir,并在此目录产生rpm套件。

%patch 最简单的补丁方式,自动指定patch level。

%patch 0 使用第0个补丁文件,相当于%patch –p 0。

%patch –s 不显示打补丁时的信息。

%patch –T 将所有打补丁时产生的输出文件删除。

%build 段主要是用来完成程序的编译,通常情况下是一个make命令用来完成编译。

%install这个段较为复杂,该段主要执行安装的工作,在这里你可以写一些脚本将程序

加入菜单栏中,由于各个发行版不同,各个脚本也不通用,简单的就是执行make install

来完成程序的安装(视不同程序的安装而定)。

%clean段是spec的删除段,它是使用rm –f命令删除编译时的临时目录,一般用rm -rf

$RPM_BUILD_ROOT即可。

%files、%changelog段分别用来告诉用户软件安装的地方和软件的一些更新的日志等。

做完这些后,一个spec文件便就完成了,执行rpm –ba 产生并测试rpm套件,如果没出什么

错的话,便就会产生相应的二进制rpm包和源代码的srpm包。它们分别位于

/usr/src/Redhat/RPMS和/usr/src/Redhat/SRPMS目录下(注:我使用的是Redhat 7.0,不同的发

行版本路径有差别).

/*写得比较简单,不明白的地方我们共同交流*/

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有