1. RPM包介绍
RPM 是RPM Package Manager(RPM软件包管理器)的缩写,一种用于互联网下载包的打包及安装工具,它包含在某些Linux分发版中。它生成具有.RPM扩展名的文件。
常见的包管理器如下:
Debian: dpkg, .deb
RedHat: rpm(redhatpackage manager), .rpm
RPM is PackageManager
2.rpm包的命名格式
name-version-relase.arch.rpm
version:major.minor.release,同源代码
release:rpm自身的发行号,与程序源码的发行号无关,仅用于标识对rpm包不同制作的修订;同时,release还包含此包适用的OS
eg:bash-4.2.3-3.centos5
arch: 适用于的硬件平台,
x86: i386,i486, i586, i686等;
x86_64:x86_64
powerpc: ppc
noarch: 依赖于虚拟机
例如:bash-4.2.3-3.centos5.x86_64.rpm
一个程序有20个功能:常用功能有8个,特殊A:3个,特殊B:6个,二次开发相关功能。
分包机制:
核心包,主包:命名与源程序一致
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 //开发包
OS Vendor: 系统发行商提供的包
3.获取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包的合法性验正:
包制作者制作完成之后会附加数字签名于包上;
来源合法性
包的完整性
包的制作者使用单向加密提取原始数据的特征码,而后使用自己的私钥加密这段特性码,附加原始数据后面。
验正过程:
前提:必须有可靠机制获取到包制作者的公钥;
1、使用制作者的公钥解密加密的特征码,能解密则意味着来源合法;
2、使用与制作者同样的意向加密算法提取原始数据的特征码,并与解密出来的特征作比对,相同,则意味着完整性没问题;
4.rpm程序包的安装/卸载/更新/查询/校验/库重建
4.1 rpm程序包的安装
rpm [option]/path/to/package_file
-i: install
-v:显示详细信息
-vv:
-vvv:
-h: 用%表示安装进度
组合选项:-ivh
--test: 仅作测试,有真正执行安装
如果依赖于其它包:
1、解决依赖关系
2、忽略依赖关系
能安装上,但有可能无法运行;
--nodeps
重新安装:
--replacepkgs
如果原有配置文件作了修改,很有可能不执行替换,而是将应该安装生成的配置文件重命名为 .rpmnew
4.2 rpm程序包的卸载
rpm [option]package_name
-e: erase
如果被其它包所依赖:
1、将依赖于此包的所有包一并卸载
2、忽略依赖关系
能卸载,但依赖于此包程序包可能会运行不正常;
--nodeps
如果包的配置文件安装后曾被改动过,卸载时,此文件将不会卸载,而是被重命名并保留,例如
warning: /etc/zprofile saved as /etc/zprofile.rpmsave
4.3 rpm程序包的升级
新版本替换老版本
rpm [option]/path/to/package_file
1、升级或安装
-Uvh
2、纯升级(一定要有老版本)
-Fvh
--force: 强制升级
注意:不应该对内核执行升级操作,而是安装。系统允许多内核并存
4.4 rpm程序包的查询
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
4.5 rpm程序包的校验
用于检查包安装生成的文件属性是否发生变化
rpm -Vpackage_name
S file Size differs
M Mode differs (includes permissions andfile 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
# rpm -qagpg-pubkey*
显示所有已经导入的gpg格式的公钥
# rpm -qigpg-pubkey-NAME
显示密钥的详细信息
检查包:安装过程中会自动执行
手动检查:
rpm -K/path/to/package_file
rpm--checksig /path/to/package_file
不检查包完整性:
rpm-K --nodigest
不检查来源合法性:
rpm-K –nosignature
4.6 rpm程序包的数据库重建
数据库目录:/var/lib/rpm
重建:
rpm --initdb:初始化
如果事先没有库,会新建一个;如果有,则不新建;
rpm --rebuilddb: 重建
直接重建,覆盖原有的数据库
总而言之,RPM程序包设计的功能如下:安装、卸载、查询、升级、校验、公钥导入、合法性验正、库重建,新手学习整理,若有错误或遗漏还望指正。