一、什么是RPM
RPM全称为“RedHat Package Manager”,看名字就知道这是RedHat公司搞出来的,后来因为RPM发展的很好,逐渐成为了一种通用的标准,就更名为“RPM is Package Manager"。
RPM最大的特点就是将软件先编译,并打包成为RPM机制的安装包,包中包含了该软件安装时所必须依赖属性软件信息,如果这些被依赖的软件已经安装,则安装包可顺利安装完成,否则软件将会安装失败。
RPM安装时会将该软件的信息写入到RPM数据库中,那么软件的查询、验证、升级、卸载等操作都可以从数据中直接调用执行。
二、认识RPM包
1、RPM包的命名格式
name-version-release.OS.arch.rpm
解释:
name:软件名称。
version:major.minor
major:主版本号;
minor:次版本号;
release:rpm自身的发行号,与程序源码的发行号无关,仅用于标识对rpm包不同制作的修订;同时,release还包含此包适用的OS。
arch:适用于的硬件平台;
x86:i386,i486,i586,i686等;
x86_64:支持64位CPU;
noarch:依赖于虚拟机。
例如:bash-4.2.3-3.centos5.x86_64.rpm
2、分包机制
对于一个功能比较多的软件来说,而用户可能并不会用户其所有的功能,那么OS Vendor(系统发行商)在制作RPM包时只会用将他们认为用户会经常用到的功能打包成为与源程序名一致的核心包,而将其它的功能再次的打包成为子包;比如:bash程序有20个功能,常用功能有8个,特殊功能A:3个,特殊功B:6个,二次开发相关功能:3个,那么其RPM的形式有可能是这样的:
核心包:
bash-4.2.3-3.centos7.x86_64.rpm
子包:
bash-a-4.2.3-3.centos7.x86_64.rpm
bash-b-4.2.3-3.centos7.x86_64.rpm
bash-devel-4.2.3-3.centos7.x86_64.rpm
如果需要用到子包中的功能的话,就需要把对应的子包进行安装。
3、获取rpm包的途径
1)发行的光盘式站点服务器
镜像:
http://mirrors.163.com
http://mirrors.sohu.com
2)项目的官网
源代码
RPM包
3)很多第三方机构或个人制作并公开发布许多rpm包
http://rpmfind.net
http://rpm.phone.net
可靠的途径:EPEL
Fedora-EPEL
4、RPM包的合法性验证
RPM包的制作者使用单向加密提取原始数据的特征码,而后使用自己的私钥加密这段特征码,附加在原始数据后面,如果想要正确的安装RPM包必须使用可靠机制获取到包制作者的公钥;其公钥的作用:
1、使用制作者的公钥解密加密的特征码,能解密则意味着来源合法;
2、使用与制作者同样的意向加密算法提取原始数据的特征码,并与解密出来的特征作比对,相同,由意味着完整性没问题;
三、RPM包管理器的使用
1、安装程序包
命令格式:rpm [option] package_name
option:
-i:安装;
-v:显示信息;
-h:显示进度;
-vv:显示详细信息;
-vvv:显示更加详细信息;
组合选项:-ivh;
–test:仅作测试,不真正执行安装;
rpm -ivh –test 程序包
–nodeps:忽略依赖关系;
忽略依赖关系可以将软件安装上,但可能无法运行;
–replacepkgs:重新安装;
如果原有配置文件作了修改,很有可能不执行替换,而是将应该由安装生成的配置文件重命名为.rpmnew;
2、卸载程序包
命令格式:rpm [option] package_name
option:
-e:卸载;
–nodeps:忽略依赖关系;
软件能卸载,但依赖于此包的程序可能运行不正常;
注意:如果包的配置文件发生改变,安装后曾被改动过,卸载时,此文件不会卸载,而是被重命名并保留。
3、升级程序包
命令格式:rpm [option] package_file
option:
-Uvh:升级或安装;
-Fvh:纯升级;
必须存在老版本,否则不安装;
–force:强制升级;
注意:不应该对内核执行升级操作;而要安装。系统允许多内核并存。
4、查询操作
1)查询某包是否已安装
rpm -q package_name
2)查询所有已经安装的包
rpm -qa
3)查询包的描述信息
rpm -qi package_name
4)查询某包安装生成了哪些文件
rpm -ql package_name
5)查询某包安装生成了哪些配置文件
rpm -qc package_name
6)查询某包安装生成了哪些文档(帮助文件)
rpm -qd package_name
7)查询程序包的相关脚本
rpm -q –scripts package_name
脚本有四类:
preinstall:安装前脚本
postinstall:安装后脚本
preuninstall:卸载前脚本
postuninstall:卸载后脚本
8)查询某文件是由哪个包安装生成的
rpm -qf /path/to/some_file
9)对尚未安装的包执行查询
rpm [option] /path/to/package_file
option:
-qpi:包描述信息;
-qpl:包会生成哪些文件;
-qpc:包会生成哪些配置文件;
-qpd:包会生成哪些帮助文件;
5、RPM包的校验
校验:检查包安装生成的文件属性是否发生变化
rpm -V package_name
httpd的内容没有被修改的情况下rpm -V httpd命令不会有任何输出结果,但上例中出现了一行奇怪的符号,说明httpd的属性已经发生了变化,下面来我看一下前面的文字所代表的含义:
S:文件的容量大小是否被改变;
M:文件的类型或文件的属性是否被改变;
5:MD5指纹的内容已发生了变化;
D:设备的主/次代码已经改变;
L:Link路径已被改变;
U:文件的所有者已被改变;
G:文件的属组已被改变;
T:文件的创建时间被改变。
文件名前还有个c,这一位代表不同的文件类型:
c:配置文件;
d:文档;
g:鬼文件;
l:授权文件;
r:自述文件。
rpm包来源合法性及完整性检验:
前提:在当前系统上导入包的制作者的公钥
rpm –import /path/to/key-file
rpm -qa gpg-pubkey* 显示所有已经导入的gpg格式的公钥
rpm -qi gpg-pubkey-NAME 显示密钥的详细信息
CentOS系统安装好后,会将原厂的gpg公钥存放在以下目录中:
导入这个公钥:
查看已经导入的公钥:
显示公钥的详细信息:
检查包
手动检查:
rpm -K /path/to/package_file
rpm –checksig /path/to/pachage_file
不检查包完整性:
rpm -K –nodigest
不检查来源合法性:
rpm -K –nosignature
6、RPM数据库重建
数据库目录:/var/lib/rpm
数据库重建:
rpm –initdb
初始化:如果事先没有库会新建一个;如果有,则不新建;
rpm –rebuilddb
重建:直接重建,覆盖原有的数据库。
原创文章,作者:petmaster,如若转载,请注明出处:http://www.178linux.com/2327