您的位置:首页 > 产品设计 > 产品经理

RPM包管理详解

2015-04-12 16:43 197 查看
RPM
Red Hat开发的一种程序包管理器Red Hat Package Manager的缩写,因其简便易用,现已成为公认的行业标准,演变为RPM Package Manager的递归缩写;有特定的格式【1】;能够实现对兼容格式的程序包进行管理【2】:安装、卸载、升级、查询、校验等。

【1】RPM包的命名格式
appname-VERSION-RELEASE.ARCH.rpm
示例:bash-4.3.2-2.centos6.x86_64.rpm
VERSION:
major: 主版本号,上例中的4.3.2中的4
minor: 次版本号,上例中的4.3.2中的3
release: 发行号,上例中的4.3.2中的2
RELEASE: 包自身的修订号;有时候还会包含适用于的OS信息;上例中的2.centos6(第2次发行,适用于centos6)
ARCH: 适用的平台,上例中的x86_64
常见平台:
x86: i386, i486, i586, i686
x86_64:x86_64, amd64
powerpc:ppc
noarch:跟平台无关

程序包的获取途径

1、系统的发行光盘镜像或官方站点(或站点镜像服务器)
挂载光盘:





注意:光盘下的程序包存储于 Packages 目录下
官方站点,镜像:
mirrors.sohu.com
mirrors.163.com
mirrors.aliyun.com

2、程序包的官方站点

3、第三方组织:epel
示例:教室:http://172.16.0.1/fedora-epel/6/

4、搜索引擎
示例:http://rpmfind.net
http://rpm.pbone.net
http://pkgs.org
建议:安装之前要验证程序包的合法性(包括来源合法性及程序包的完整性),验证方法后文会提及。

【2】RPM程序包管理

安装
rpm {-i|--install} [install-options] PACKAGE_FILE1...
-v:显示安装过程的详细信息;
-vv,-vvvh:通过增加v的次数来加深显示的详细程度;
-h:hash,以#来显示安装进度(1个#表示2%的进度);
安装时的常用组合:-ivh
--test:测试安装,不执行真正的安装过程,仅报告依赖关系及冲突信息等;




注意:要安装的程序包前一定要跟上绝对路径或相对路径

--nodeps:忽略依赖关系;
副作用:能成功安装,但未必能成功运行;
程序包之间存在依赖关系(如下图所示)
由众多目的单一的小程序组成,结果程序之间存在相关性;





--replacepkgs:覆盖安装,重新安装并覆盖原有的文件;
--force:强制安装;
--relocate:重新指定程序包的安装路径(前提是程序包支持指定路径);
--oldpackage:降级到老版本;

升级
rpm {-U|--upgrade} [install-options] PACKAGE_FILE ...
-U:升级或安装 ,即要升级的老版本若不存就直接安装新版本程序包
rpm {-F|--freshen} [install-options] PACKAGE_FILE ...
-F:升级,即要升级的老版本若不存在就不会升级
可用选项同安装选项

注意:一定不要对内核执行升级操作;Linux允许多内核共存,所以可以直接安装多个不同版本的内核;
注意:如果程序包的配置文件安装后曾被修改,升级时,新版本的配置文件不会覆盖老版本的配置文件,而是把新版本的配置文件重命名(加后缀.rpmnew)后保存;

卸载
rpm {-e|--erase} [--allmatches] [--nodeps] [--test] PACKAGE_NAME ...
简单用法:rpm -e PACKAGE_NAME...
--nodeps:忽略依赖关系;
--test:测试卸载;dry-run模式;
--allmatches: 如果一个程序包同时安装多个版本,则此选项一次全部卸载之;
注意:如果程序包的配置文件安装后曾被修改,卸载时,此文件通常不会被删除,而是被重命名(加后缀.rpmsave)后留存;

查询
查询某包是否已经安装,查看安装的所有包,以及查看某包的详细信息
-rpm {-q|--query} [select-options] [query-options]

[select-options]:
1、查询某包或某些包是否安装:
rpm -q PACKAGE_NAME






2、查询已安装的所有包:
rpm -qa

3、查询某文件是由哪个包安装生成:
rpm -qf /PATH/TO/SOMEFILE





4、查询尚未安装的包文件的相关信息:
下边命令选项中间加p
例如:rpm -qpi PACKAGE_FILE1...

[query-options]:
1、查询某包的简要说明信息:
rpm -qi PACKAGE_NAME(安装包名)









2、查询某安装包安装生成的文件列表:
rpm -ql PACKAGE_NAME





3、查询某包安装后生成的所有配置文件:
rpm -qc PACKAGE_NAME





4、查询某包安装完成后生成的所有帮助文件:
rpm -qd PACKAGE_NAME





5、查看某包制作时随版本变化的changelog信息:
rpm -q --changelog PACKAGE_NAME





6、查询某包提供的功用capabilities:
rpm -q --provides PACKAGE_NAME

7、查询某包依赖的功用capabilities:
rpm -q --requires PACKAGE_NAME





8、查询某包安装、卸载时执行的脚本:
rpm -q --scripts PACKAGE_NAME





脚本有四类:
preinstall: 安装过程开始之前执行的脚本;
postinstall: 安装过程完成之后执行的脚本;
preuninstall: 卸载开始之前执行的脚本 ;
postuninstall: 卸载过程完成之后执行的脚本;

注意:安装和升级时需跟带完整路径的安装包名,卸载和查询时只需跟安装包名即可

校验
查询包安装之后生成的文件是否发生过改变
rpm {-V|--verify} [select-options] [verify-options]
简单用法: rpm -V PACKAGE_NAME




程序包的合法性验证
来源合法:
由我们信任的制作者提供;
依赖于:制作者的数字签名;签名是作者使用自己的私钥加密程序包的特征码生成的;

内容合法:
包未被二次修改,完整性验证成功;
依赖于:制作者提供的程序特征码;
验证方式:安装者用同样的特征码提取方法提取程序包的特征码,并与原作者提供的相比较;

验证光盘中程序包的来源及完整性:
导入:rpm --import /path/to/RPM-GPG-KEY-FILE
验证:rpm {-K|--checksig} PACKAGE_FILE








--nosignature: 不检查来源合法性
--nodigest: 不检查完整性

rpm管理器数据库
/var/lib/rpm
重建数据库:
rpm {--initdb|--rebuilddb} [-v] [--dbpath DIRECTORY]
默认重建在 /var/lib/rpm,只有需重新指定重建目录时才需跟此选项
--initdb:初始化数据库,即数据库完全不存在时,可新建之;
--rebuliddb:无论当前数据库存在与否,都会直接重建之;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  管理 rpm 程序包