第十五章、Linux程序包管理之rpm
目录
- 程序包管理器的基本功能
- 如何获取程序包
- rpm命令的使用
rpm全称为redhat package manager,是Redhat公司的包管理工具;软件包以.rpm为后缀结尾;
15.1、程序包管理器的基本功能
讲编译好的应用程序的各组成文件打包成一个或多个程序包文件,从而更方便实现程序包的安装、升级、卸载、查询、等操作;
15.2、如何获取程序包
1、系统发行版的光盘或官方的文件服务器;例如:http://mirrors.aliyun.com
2、项目的官方站点
3、第三方组织
(a)EPEL
(b)搜索引擎
http://pkgs.org
http://rpmfind.net
http://rpm.pbone.net
4、自己动手,制作rpm包
15.3、rpm命令
使用格式
rpm [OPTION] [PACKAGE_FILE]
安装:-i
升级:-U,-F
卸载:-e
查询:-q
校验:-V
数据库维护:--builddb, --initdb
15.3.1、安装
使用格式
rpm -ivh PACKAGE_FILE
常用选项
-v:详细信息
-h:显示进度条,由50个#号组成,每个#表示%2进度
--test:测试安装,检查并报告依赖关系及冲突消息;
--nodeps:忽略依赖关系;
--repacepkgs:重新安装;
示例
[root@www Packages]# rpm -ivh tree-1.6.0-10.el7.x86_64.rpm
准备中... ################################# [100%]
正在升级/安装...
1:tree-1.6.0-10.el7 ################################# [100%]
# 重新安装
[root@www Packages]# rpm -ivh --replacepkgs tree-1.6.0-10.el7.x86_64.rpm
准备中... ################################# [100%]
正在升级/安装...
1:tree-1.6.0-10.el7 ################################# [100%]
# 测试安装
[root@www Packages]# rpm -ivh --test php-5.4.16-36.el7_1.x86_64.rpm
错误:依赖检测失败:
httpd-mmn = 20120211x8664 被 php-5.4.16-36.el7_1.x86_64 需要
php-common(x86-64) = 5.4.16-36.el7_1 被 php-5.4.16-36.el7_1.x86_64 需要
php-cli(x86-64) = 5.4.16-36.el7_1 被 php-5.4.16-36.el7_1.x86_64 需要
httpd 被 php-5.4.16-36.el7_1.x86_64 需要
# 忽略依赖关系安装
[root@www Packages]# rpm -ivh --nodeps php-5.4.16-36.el7_1.x86_64.rpm
准备中... ################################# [100%]
正在升级/安装...
1:php-5.4.16-36.el7_1 ################################# [100%]
15.3.2、升级
使用格式
rpm -Uvh PACKAGE_FILE
rpm -Fvh PACKAGE_FILE
常用选项
-U:升级或安装,如果程序已经安装则升级,如果未安装则安装程序包;
-F:升级
--oldpackage:降级
--force:强制升级
注意:
1、不要对内核做升级操作,Linux支持多内核版本并存,因此,直接安装新内核;
2、如果某程序包的配置文件安装后曾被修改过,升级时,新版本的程序提供的同一个配置文件不会覆盖原有版本的配置文件,而是把新版本的配置文件重命名(FILENAME.rpmnew)后提供;
15.3.3、卸载
使用格式
rpm -e PACKAGE_FILE
常用选项
--nodeps:卸载时忽略依赖关系;
--test:测试卸载,但不真正执行;
示例
[root@www Packages]# rpm -q php
php-5.4.16-36.el7_1.x86_64
[root@www Packages]# rpm -e php
[root@www Packages]# rpm -q php
未安装软件包 php
15.3.4、查询
使用格式
rpm {-q|--query} [select-options] [query-options]
常用选项
[select-options]
PACKAGE_NAME:查询指定的程序包是否已经安装,及其版本;
-a:查询所有已安装上的包;
-f FILE:查询指定的文件由哪个程序包安装生成;
-p PACKAGE_FILE:用于实现对未安装的程序包执行查询操作;
--whatprovides CAPABILITY:查询指定的CAPABILITY由那个程序包提供;
--whatrequires CAPABILITY:查询指定的CAPABILITY被哪个包所依赖;
[query-options]
--changelog:查询rpm包的chagelog,每次rpm包升级都做了哪些改动;
-l:程序包安装生成的所有文件列表;
-i:程序包相关的信息,版本号,大小,所属的包组等;
-c:查询指定的程序包提供的配置文件;
-d:查询指定的程序包提供的帮助文档;
--provides:列出指定的程序包提供的所有CAPABILITY;
-R:查询指定的程序包的依赖关系;
--scripts:查询程序包自带的脚本片段;
常用方法组合
rpm -qi PACKAGE_FILE
rpm -ql PACKAGE_FILE
rpm -qc PACKAGE_FILE
rpm -qd PACKAGE_FILE
rpm -qpl PACKAGE_FILE
rpm -qpi PACKAGE_FILE
rpm -qpc PACKAGE_FILE
15.3.5、校验
使用格式
rpm -V PACKAGE_NAME
15.3.6、包来源合法性验证
导入信任的包制作者的密钥
对于centos发行版来说使用
[root@www ~]# rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
验证
1、安装此组织签名的程序时会自动验证;
2、手动验证:rpm -K PACKAGE_FILE
15.3.7、数据库重建
rpm管理器数据库路径:/var/lib/rpm
获取帮助
centos6: man rpm
centos7: man rpmdb
使用格式
rpm {--initdb | --builddb}
--initdb:初始化数据库,当前无任何数据库可初始化创建一个新的,当前有时不执行任何操作;
--rebuilddb:重新构建,通过读取;