一、 RPM功能描述
l 打包
l 安装
l 卸载
l 升级
l 校验
l 数据库管理
二、 RPM包命名格式
1. 命名格式举例
name-version-relase.arch.rpm
例如:bash-4.2.3-3.centos5.x86_64.rpm
2. 分段描述
包名 |
版本号 |
RPM发行号 |
系统信息 |
平台信息 |
后缀 |
bash |
4.2.3(同打包的源代码一致) |
3(rpm自身的发行号,与程序源码的发行号无关,仅用于标识对rpm包不同制作的修订) |
Centos5(此包适用的OS) |
X86_64( 适用于的硬件平台) 举例: x86: i386, i486, i586, i686等; x86_64: x86_64 powerpc: ppc noarch: 依赖于虚拟机 |
.rpm |
三、 RPM分包机制
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
4、可靠的途径:EPEL
Fedora-EPEL
四、 rpm包的合法性验证
linux源程序包制作者制作完成之后会附加数字签名于包上,保证了包的来源合法性和完整性。
l 加密过程
包的制作者使用单向加密提取原始数据的特征码,而后使用自己的私钥加密这段特性码,附加原始数据后面。
l 验证过程
前提:必须有可靠机制获取到包制作者的公钥;
1、使用制作者的公钥解密加密的特征码,能解密则意味着来源合法;
2、使用与制作者同样的意向加密算法提取原始数据的特征码,并与解密出来的特征作比对,相同,则意味着完整性没问题;
五、 RPM包管理器使用
1. 安装程序包
命令 |
选项参数 |
文件名 |
Rpm |
-ivh:常用组合 |
/path/to/package_file |
Rpm |
-vvv:安装时显示更详细信息 |
/path/to/package_file |
Rpm |
–test:测试是否可正常安装 |
/path/to/package_file |
Rpm |
–nodeps:忽略依赖关系安装,安装后可能无法正常运行 |
/path/to/package_file |
Rpm |
–replacepkgs:重新安装(如果原有配置文件作了修改,很有可能不执行替换,而是将应该安装生成的配置文件重命名为 .rpmnew) |
/path/to/package_file |
2. 卸载程序包
命令 |
选项参数 |
文件名 |
Rpm |
-e:卸载程序包 |
package_name |
Rpm |
–nodeps:忽略依赖关系将依赖于此包的所有包一并卸载,但依赖于此包的程序包可能会运行不正常。 |
package_name |
Rpm |
–replacepkgs:重新安装(如果原有配置文件作了修改,很有可能不执行替换,而是将应该安装生成的配置文件重命名为 .rpmnew) |
package_name |
注意:如果包的配置文件安装后曾被改动过,卸载时,此文件将不会卸载,而是被重命名并保留,例如:warning: /etc/zprofile saved as /etc/zprofile.rpmsave
3. 升级程序包
命令 |
选项参数 |
文件名 |
Rpm |
-Uvh:升级或安装 |
/path/to/package_file |
Rpm |
-Fvh:纯升级(若升级的程序包与其他程序包存在依赖关系,升级后其他程序包会运行异常,存在版本冲突问题;) |
/path/to/package_file |
Rpm |
–force:强制升级 |
/path/to/package_file |
注意:不应该对内核执行升级操作,而是安装。系统允许多内核并存。
4. 查询操作
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:查询某包安装会生成哪些帮助文件
六、 几种常见使用场景
1. Rpm包安装后生成的文件属性是否发生改变,是否被恶意更改?
标准语句:rpm -V package_name
举例:以zsh程序包为例
1)修改其配置文件,新增“#NEWLINE”行;
2)rpm –V zsh 检测;
3)S代表文件大小,新增5字节且修改时间有改变;
注意:某属性无变化,显示为 .
各字符代表的意义:
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
2. 包来源合法性及完整性检验
此处以检测光盘程序包检测为例;
1)导入前,安装程序包时提示无密钥
2)导入包的制作者的公钥
rpm –import /media/CentOS/RPM-GPG-KEY-CentOS-6
3) 显示所有已经导入的gpg格式的公钥
4)显示密钥的详细信息
5)再次安装zsh程序包,无提示信息(检查包:安装过程中会自动执行)
6)手动检查操作,两种办法如图(来源合法性和完整性)
7)手动检查操作(来源合法性)
8)手动检查操作(包完整性)
9)其他命令
清除已导入的密钥:rpm -e gpg-pubkey-NAME
3. Rpm程序管理器数据库重建
rpm数据库目录:/var/lib/rpm
rpm数据库重建操作:
rpm –initdb: 初始化(如果事先没有库,会新建一个;如果有,则不新建;)
rpm –rebuilddb: 重建(直接重建,覆盖原有的数据库)
原创文章,作者:晚明伤哥,如若转载,请注明出处:http://www.178linux.com/8425