啥是RPM?
原来RPM就是redhat package manager的缩写,这一文件格式名称虽然打上了RedHat的标志,但是其原始设计理念是开放式的,后来采取名称采取了递归缩写的方式,即:RPM Package Manager(RPM 软件包管理器)。现在包括OpenLinux、S.u.S.E.以及Turbo Linux等Linux的分发版本都有采用,可以算是公认的行业标准了。注:据说RPM文件在Linux系统中的安装最为简便
RPM是用来干嘛的?
软件包管理器嘛,听名字就知道是管理软件包的啊。也就是一种用于互联网下载包的打包及安装工具,它包含在某些Linux分发版中。它生成具有.RPM扩展名的文件。主要功能呢就是:打包、安装、卸载、升级、校验、数据库管理。
RPM包的名字是啥样的?
在用之前呢,要先明白RPM包的命名格式,不然废了半天劲下载下来的包,竟然发现不可用那就傻眼了。
name-version-relase.arch.rpm
name:就是包的名称
version:major.minor.release 版本号
relase:RPM包自身的发行号,与程序源码的发行号无关,仅用于标识RPM包不同制作
的修订;同时,relase还包含此包适用的OS。例如:bash-4.2.3-3.centos5
arch:标识RPM包适用的硬件平台
x86: i386, i486, i586, i686等;
x86_64: x86_64
powerpc: ppc
noarch: 依赖于虚拟机
例如:bash-4.2.3-3.centos5.x86_64.rpm
还有一点需要注意的是一个程序可能有很多的功能,比如常用的6个,特殊的2个,还包含二次开发的相关功能,我们需要的可能就是一些常用的功能,那些非常用的我们能不能不安装呢?其实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
获取RPM包的途径
1、发行的光盘或站点服务器
镜像:
http://mirrors.163.com
http://mirrors.sohu.com
2、项目的官网
源代码
rpm包
3、很多第三方机构或个人制作并公开发布许多rpm包
http://rpmfind.net
http://rpm.pbone.net
可靠的途径:EPEL
Fedora-EPEL
RPM包的合法性校验
我们知道现在无聊的骇客越来越多,那怎么保证我们从网站下载到我们PC上的数据没有在路上遭遇埋伏呢?对头,就是对下载到的RPM包进行合法性校验。一般情况下包的作者制作完成之后都会附加数字签名于包上,用于确定包的来源合法性及完整性。
包的制作者使用单向加密提取原始数据的特征码,而后使用自己的私钥加密这段特性码,附加原始数据后面。
验正过程:
前提:必须有可靠机制获取到包制作者的公钥;
1、使用制作者的公钥解密加密的特征码,能解密则意味着来源合法;
2、使用与制作者同样的意向加密算法提取原始数据的特征码,并与解密出来的特征作比对,相同,则意味着完整性没问题;
RPM包的安装
好的,经过前面的努力,我们终于拿到了我们想要的RPM包,那么要怎么用呢?听俺慢慢道来~
安装程序包:
rpm [option] /path/to/package_file
-i: install
-v:显示安装信息
-vv:更详细
-vvv:更更详细
-h: 显示安装进度
组合选项:-ivh 安装时显示安装信息及进度条
--test: 仅作测试,没有真正执行安装
如果安装时提示依赖于其它包的解决方法:
1、解决依赖关系
2、忽略依赖关系
使用 --nodeps 忽略依赖关系,但是安装上后可能无法运行。
重新安装:
--replacepkgs
如果原有配置文件作了修改,很有可能不执行替换,而是将应该安装生成的配置文件重命名为 .rpmnew
卸载程序包:
rpm [option] package_name
-e: erase
如果被其它包所依赖:
1、将依赖于此包的所有包一并卸载
2、忽略依赖关系
使用 --nodeps 忽略依赖关系,但是所有依赖于此包的程序可能会无法正常运行。
注意:如果包的配置文件安装后曾被改动过,卸载时,此文件将不会卸载,而是被重命名并保留,例如:warning: /etc/zprofile saved as /etc/zprofile.rpmsave
升级程序包:
rpm [option] /path/to/package_file
1、升级或安装
-Uvh
2、纯升级
-Fvh
升级版本后可能会引起版本冲突等;
可使用 --force 强制升级
注意:不应该对内核执行升级操作,而是安装,因为系统允许多内核并存。
EPM包的查询操作
1、查询某包是否安装
rpm -q package_name...
2、查询所有已经安装的包
rpm -qa
按条件过滤:rpm -qa | grep 'PATTERN'
3、查询包的描述信息
rpm -qi package_name
4、查询某包安装生成了哪些文件
rpm -ql package_name
(1) 查询某包安装生成了哪些配置文件
rpm -qc package_name
(2) 查询某包安装生成了哪些帮助文件
rpm -qd package_name
(3) 查询程序包的相关脚本
rpm -q --scripts package_name
脚本有四类:
preinstall:安装前脚本
postinstall: 安装后脚本
preuninstall: 卸载前脚本
postuninstall: 年前后脚本
5、查询某文件是由哪个包安装生成的
rpm -qf /path/to/some_file
6、对尚未安装的包执行查询
rpm [option] /path/to/package_file
-qpi
-qpl
-qpc
-qpd
校验:
用于检查包安装生成的文件属性是否发生变化,通过此信息可查看已安装的程序有无被人修改过,防黑必备。
rpm -V package_name
S file Size differs
M Mode differs (includes permissions and file type)
5 digest (formerly MD5 sum) differs
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
某属性无变化,显示为.
RPM来源合法性及完整性检验:
前提:在当前系统上导入包的制作者的公钥
导入:
rpm --import /path/to/key_file
显示所有已经导入的gpg格式的公钥
# rpm -qa gpg-pubkey*
显示密钥的详细信息
# rpm -qi gpg-pubkey-NAME
安装过程中会自动执行可以检查,想手动检查当然也是可以的。
手动检查:
rpm -K /path/to/package_file
rpm --checksig /path/to/package_file
不检查包完整性:
rpm -K --nodigest
不检查来源合法性:
rpm -K --nosignature
数据库重建
数据库目录:/var/lib/rpm
重建:
rpm --initdb:初始化
如果事先没有库,会新建一个;如果有,则不新建;
rpm --rebuilddb: 重建
会直接重建,覆盖原有的数据库