一、简介
RPM(Redhat Package Manager)是一个开放的软件包管理系统,用于Redhat、CentOS、Fedora等Linux 分发版的常见的软件包管理器。因为它允许分发已编译的软件,所以用户只用一个命令就可以安装软件。
RPM拥有功能强大的查询选项。我们可以搜索数据库来查询软件包或文件。RPM软件包中的文件是以压缩格式存放的,拥有一个定制的二进制头文件,其中包含有关包和内容的信息,可以让我们对单个软件包的查询简便又快速。
RPM另一个强大的功能是进行软件包的验证。如果我们担心误删了某个软件包中的某个文件,我们就可以对它进行验证。任何非正常现象将会被通知。如果需要的话还可以重新安装该软件包。在重新安装过程中,所有被修改过的配置文件将被保留。
RPM设计目标之一就是要保持软件包的原始特征, 就象该软件的原始发布者发布软件时那样。通过使用RPM我们可以拥有最初的软件和最新的补丁程序,还有详细的软件构建信息。
概括的说:RPM有五种基本的操作功能(不包括创建软件包):安装、卸载、升级、查询、和验证。
二、打包基础
2.1 打包环境
本文使用CentOS作为rpm打包的打包环境,同时安装一些打包必备的软件,针对不同软件的构建过程,我们还需要其他的编译打包工具,比如C/C++的make与gcc,Python的setuptools等,我们根据具体需求进行安装即可;
# 安装依赖软件包 |
2.2 软件包描述文件(SPEC)
制作一个rpm软件包就必须写一个软件包描述文件(SPEC),这个文件中包含了软件包的诸多信息,如软件包的名字、版本、类别、说明摘要、创建时要执行什么指令、安装时要执行什么操作、以及软件包所要包含的文件列表等等。
2.2.1 文件头
一般的spec文件头包含以下几个域:
Summary:用一句话概括该软件包尽量多的信息;
Name:软件包的名字,最终RPM软件包是用该名字与版本号,释出号及体系号来命名软件包;
Version:软件版本号。仅当软件包比以前有较大改变时才增加版本号;
Release:软件包释出号。一般我们对该软件包做了一些小的补丁的时候就应该把释出号加1;
Vendor:软件开发者的名字;
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:源程序软件包的名字。如 stardict-2.0.tar.gz;
%define:定义宏,例如
%define test 10
,这里定义了一个宏,名称为test,值为10,要使用这个宏,使用%{testMacro}
或者%testMacro
;%description:软件包详细说明,可写在多个行上;
2.2.2 %prep
预处理段,通常用来执行一些解开源程序包的命令,为下一步的编译安装作准备,%prep和下面的%build,%install段一样,除了可以执行RPM所定义的宏命令(以%开头)以外,还可以执行Shell命令,命令可以有很多行;
2.2.3 %setup
%setup 不加任何选项,仅将软件包打开。 |
2.2.4 %build
所要执行的命令为生成软件包服务,如make 命令
2.2.5 %install
将软件安装到虚拟根目录,其中的命令在安装软件包时将执行,如make install命令
2.2.6 %clean
清理一些临时文件,或是生产中不需要的文件
2.2.7 %files
指定安装时需要安装的文件列表,可以指定文件、目录,也可以使用通配符等。用于定义软件包所包含的文件,分为三类–说明文档(doc),配置文件(config)及执行程序,还可定义文件存取权限,拥有者及组别;
2.2.8 %changelog
修改日志,你可以将软件的每次修改记录到这里,保存到发布的软件包中,以便查询之用。每一个修改日志都有这样一种格式:第一行是:* 星期 月 日 年 修改人 电子信箱。其中:星期、月份均用英文形式的前3个字母,用中文会报错。接下来的行写的是修改了什么地方,可写多行。一般以减号开始,便于后续的查阅;
三、相关指令
3.1 打包指令
# 只生成二进制格式的rpm包(生成的文件会在对应的RPM目录下存在) |
3.2 解析包相关指令
# 列出rpm包包含的内容 |
四 示例
Name: clutter-gtk |