RPM是Redhat PackageManager(RPM程序包管理器)的缩写,这一文件格式名称虽然打上了Redhat的标志,但是其原始设计理念是开放式的,现在包括OpenLinux、Suse以及Turbo Linux的分发版本也都有采用。RPM程序包管理器可分为安装、升级、卸载、查询、校验等五种功能,以下我们将会对这五种功能的相应的用法一一说明。
RPM程序包:
源代码:name-VERSION.tar.gz 源代码由RPM自动编译安装;
VERSION: major.minor.release 主版本号.次版本号.源代码的发行版本号
RPM包的命名格式:
name-VERSION-release.arch.rpm
VERSION: major.minor.release;
release.arch: RPM包的发型号,同时release还包含此包适用的os
release.os: 2.e17.i386.rpm
archetcture:i386,x64,ppc,noarch
例如:源代码经RPM编译后将会变成如下的包名:
redis-3.0.2.tar.gz -->redis-3.0.2-1.centos.x64.rpm
RPM包的依赖关系:
X,Y,Z
X--? Y,Z (X依赖于Y,Z)即要想安装X包,必须首先安装Y,Z这两个程序包;
当然,也有一些前端工具可以自动解决依赖关系:
yum:rhel系列系统上rpm包管理器的前端工具;
apt-get(apt-cache):deb包管理器的前段工具;
zypper:suse的rpm管理器的前段工具;
dnf:Fedora 22+系统上rpm包管理器的前端工具;
程序包管理器:
功能:将编译好的应用程序的各组成文件打包成一个或几个程序包文件,从而更方便地实现程序包的安装、升级、卸载和查询等管理操作:
1. 程序包的组成清单(每个程序包都单独实现)
文件清单
安装或卸载时运行的脚本
2. 数据库(公共)
程序包的名称和版本;
依赖关系;
功能说明;
安装生成的各文件的文件路径及校验码信息;
获取程序包的途径:
(1) 系统发行版的光盘或官方的文件服务器(或镜像站点):
(2) 项目的官方站点
(3) 第三方组织
(a) EPEL
(b) 搜索引擎
建议:检查其合法性
来源的合法性;
程序包的完整性;
Centos系统上rpm命令管理程序包:
安装、升级、卸载、查询和校验、数据库维护
rpm命令:rpm - RPM Package Manager
rpm [OPTIONS] [PACKAGE_FILE]
安装:-i,--install;
升级:-U,--update;-F,--freshen;
卸载:-e,--erase;
查询:-q,--query;
校验: -V,--verify;
数据库维护: --builddb,--initdb;
安装:rpm {-i|--install} [install-options]PACKAGE_FILE ...
rpm –ivh PACKAGES_FILE …
GENERAL OPTIONS:
-v:verbose,详细信息;
-vv:更详细的输出;
[install-options]
-h: hash marks输出进度条;每个#号表示2%的进度;
--test:测试安装,检查并报告依赖关系及冲突消息等;
--nodeps:忽略依赖关系,强烈不建议;
--replacepkgs:重新安装
注意:rpm可以自带脚本:
四类:--noscripts
preinstall:开始安装之前运行的脚本,%pre,--nopre
postinstall:安装过程完成之后运行的脚本,%post,--nopost
preuninstall:卸载过程真正开始执行之前运行的脚本,%preun,--nopreun
postuninstall:卸载过程完成之后运行的脚本,%postun,--nopostun
--nosignature:不检查包签名信息,不检查来源合法性;
--nodigest:不检查包完整性信息;
我们将通过以下实例对rpm的安装功能的用法进行具体说明:
1. 首先我们把虚拟机的centos6.6的光盘镜像挂载至本地/media/cdrom中,挂载为只读模式,切查看是否挂载成功;
2. 进入/media/cdrom/Packages目录,安装zsh-4.3.10-7.el6.x86_64.rpm;
查询:
rpm {-q|--query} [select-options][query-options]
[select-options]
PACKAGE_NAME:查询指定的程序包是否已经安装,及其版本;
-a,--all:查询所有的已经安装过的包;
-f FILE:查询指定的文件由那个程序包安装生成;
-p,--packagePACKAGE_FILE:用于实现对未安装的程序包执行查询操作
--whatprovides CAPABILITY:查询指定的CAPABILITY由哪个程序包提供;
--whatrequires CAPABILITY:查询指定的CAPABILITY被哪个包所依赖;
[query-options]
--changelog:查询rpm包的changelog;
-l,--list:程序安装生成的所有文件列表;
-i,--info:程序包的相关信息,版本号,大小,所属的组,等;
-c,--configfiles:查询指定的程序包提供的配置文件;
-d,--docfiles:查询指定的程序包提供的文档;
--provides:列出指定的程序包提供的所有的CAPABILITY;
-R,--requires:查询指定的程序包的依赖关系;
--scripts:查看程序包自带的脚本片段;
用法:
-qi PACKAGE: 程序包的相关信息,版本号,大小,所属的组,等;
-qf FILE:查询指定的文件由那个程序包安装生成;
-qc PACKAGE:查询指定的程序包提供的配置文件;
-ql PACKAGE:程序安装生成的所有文件列表;
-qd PACKAGE:查询指定的程序包提供的文档;
-qpi PACKAGE_FILE:对未安装的程序包的信息,版本等等进行查询操作;
-qpl PACKAGE_FILE:
-qpc PACKAGE_FILE:
-qlf FILE:查询指定的文件所在的安装包中文件分别被安装到哪个目录下;
升级:
rpm {-U|--upgrade} [install-options]PACKAGE_FILE ...
rpm {-F|--freshen} [install-options]PACKAGE_FILE ...
-U:升级或安装;
-F:升级
rpm -Uvh PACKAGE_FILE ...
rpm -Fvh PACKAGE_FILE ...
--oldpackage:降级;
--force:强制升级;
可以看出,rpm –U 选项既可以升级也可以安装,而-F选项只能升级。
卸载:
rpm {-e|--erase} [--allmatches][--nodeps] [--noscripts] [--test] PACKAGE_NAME ...
--allmatches:卸载所有匹配指定名称的程序包的各版本;
--nodeps:忽略依赖关系
--test:测试卸载,dry run模式
校验:
rpm {-V|--verify} [select-options][verify-options]
S file Size differs #文件大小
M Mode differs (includes permissionsand file type) #模式
5 digest (formerly MD5 sum) differs #MD5校验码
D Device major/minor number mismatch #设备号
L readLink(2) path mismatch#路径
U User ownership differs #所属用户
G Group ownership differs #所属组
T mTime differs #修改时间
P caPabilities differ #性能
例:
包来源合法性验证和完整性验证:
来源合法性验证:
完整性验证:
获取并导入信任的包制作者的秘钥:
对于centos发行版来说:rpm –import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
验正:
(1) 安装此组织签名的程序时,会自动执行验正;
(2) 手动验正:rpm -KPACKAGE_FILE
数据库的重建:
rpm管理器数据库路径:/var/lib/rpm/
查询操作:通过此处的数据库进行;
获取帮助:
Centos6:man rpm
Centos7:man rpmdb
rpm {--initdb|--rebuilddb} [--dbpathDIRECTORY] [--root DIRECTORY]
--initdb:初始化数据库,当前无任何数据库可初始化创建一个新的;当时有时不执行任何操作 --rebuilddb:重新构建,通过读取当前系统上所有已经安装过的程序包进行重新创建;