rpm包管理功能全解
前言:
程序包管理器功能:
将编译好的应用程序的各组成文件打包成一个或几个程序包文件,从而更方便地实现程序包的安装、升级、卸载和查询等管理操作;
、程序包的组成清单(每个程序包都单独实现)
文件清单
安装或卸载时运行的脚本
2、数据库(公共)
程序包的名称和版本;
依赖关系;
功能说明;
安装生成的各文件的文件路径及校验码信息;
等等等..
rpm包的数据库存放在/var/lib/rpm/(CentOS中存储rpm包数据库的路径)如图:
获取程序报包的各种途径:
系统发行版的光盘或官方的文件服务器(或镜像站点):
……..
特定项目的官方站点
httpd.apache.org
www.zabbix.com
第三方组织:
(a) EPEL
搜索引擎
(4)自己动手制作
防止程序包有后门建议:检查其合法性
来源合法性;
程序包的完整性;
————rpm命令管理程序包的基本功能:
安装,卸载,查询,升级,校验,数据库维护。
命令:rpm [options] [package_file]
[OPTIONS]:
安装:-I ,--install
升级:-U, --UPDATE, -F,--freshen
卸载:-e,--erase
查询:-q,--query
校验:-V,
数据库维护:--builddb,--initdb
安装:
rpm {-i|--install} [install-options]PACKAGE_FILE ...
(通用选项):
-v:verbose,详细信息
:更详细的输出
(安装选项)
:hash marks输出进度条;每个#表示2%的进度;
通常使用:rpm -ivh PACKAGE_FILE ... 如图:
:测试安装,检查并报告依赖关系及冲突消息等,并没有真正的安装;
:忽略依赖关系;不建议;(使用此选项虽然可以安装该程序包,但并不一定会运行,因为并没有安装有依赖的安装包。)
:重新安装 如图:
注:rpm包可以自带四类脚本
- preinstall:安装过程开始之前运行的脚本,%pre
- :安装过程完成后安装的脚本,%post
- :卸载过程真正开始执行之前运行的脚本,%preun
- :卸载过程完成之后执行的脚本,%postun
- :都不执行
- :不执行安装过程开始之前运行的脚本
- :不执行安装过程完成后安装的脚本
- :不执行卸载过程真正开始执行之前运行的脚本
- 不执行卸载过程完成之后执行的脚本
:不检查包签名信息,不检查来源合法性;
不使用会有警告提示没有秘钥 如图:
使用后将不会检查签名信息,如图:
:不检查包完整性信息;
升级:
rpm {-U|--upgrade} [install-options] PACKAGE_FILE
rpm {-F|--freshen}[install-options] PACKAGE_FILE ...
-U:升级或安装;(没有老版本直接安装)
:只升级
或
:强制升级(升级后可能会影响依赖关系);
对zsh进行升级会显示升级版本和清除的版本,如图
注意:
(1) 不要对内核做升级操作;Linux支持多内核版本并存,因此,直接安装新版本内核;
(2) 如果某原程序包的配置文件安装后曾被修改过,升级时,新版本的程序提供的同一个配置文件不会覆盖原有版本的配置文件,而是把新版本的配置文件重命名(FILENAME.rpmnew)后提供;
卸载:
rpm {-e|--erase}[--allmatches] [--nodeps] [--noscripts] [--test] PACKAGE_NAME
(注:卸载时指定的是包名)
:卸载所有匹配指定名称的程序包的各版本;
:忽略依赖关系
:测试卸载,dry run模式
卸载我们刚装的zsh只需指定安装包名称,不需要路径,如图
查询:
rpm {-q|--query}[select-options] [query-options]
[select-options]:
:查询指定的程序包是否已经安装,及其版本信息
没有安装如图:
安装过如图:
:查询所有已经安装过的包:(通常后面跟上正则表达式查询)
如图:
:查询指定的文件由哪个程序包安装生成;
查询/etc/issue文件是由那个安装包生成的,如图:
:用于实现对未安装的程序包执行查询操作;
如图:
:查询指定的CAPABILITY由哪个程序包提供;
查询zsh是有那个程序包提供 如图:
:查询指定的CAPABILITY被哪个包所依赖;
查询bash由那些安装包依赖:如图
[query-options]
:查询rpm包的changelog;
查询dash的changelog 如图:
:程序安装生成的所有文件列表;
查询dash安装生成的所有文件列表,如图
:程序包相关的信息,版本号、大小、所属的包组,等;
查询zsh程序包相关的信息版本号、大小、所属包租的信息 如图
:查询指定的程序包提供的配置文件;
查询zsh程序包提供的配置文件,如图:
:查询指定的程序包提供的文档;
查询zsh程序包提供的文档:如图
:列出指定的程序包提供的所有的CAPABILITY;
查询bash程序包提供的capability:如图
:查询指定的程序包的依赖关系;
查询bash程序包的依赖关系:如图
:查看程序包自带的脚本片断;
查询bash程序包的脚本片段:如图
查询用法总结:
(查询安装包信息) -qf FILE(查询指定的文件由那个安装包组成), -qc PACKAGE(查询指定的安装包的配置文件),-ql PACKAGE(查询指定的安装包生成的所有文件),-qd PACKAGE(查询指定的安装包提供的文档)
(查询未安装的程序包的信息), -qpl PACKAGE_FILE(查询未安装的程序包可以生成的所有文件), -qpc PACKAGE_FILE,(查询未安装的程序包的配置文件). -qpd PACKAGE(查询未安装程序包提供的文档)
校验:
校验程序包安装完之后有没有被更改过
rpm {-V|--verify} [select-options][verify-options]
如果安装完成之后没有做出过更改则不会提示信息,当我更改zsh了生成的列表里面随意的一个文件之后再做出校验系统就会有所提示,如图:
左边的提示符显示的信息:每个”点”字符表示一种属性,所表示的意义如下
S file Sizediffers:大小
:权限
:完整性内容
:主次设备号不匹配
:readlink路径不匹配
:属主更改
:属组更改
:最近的时间戳更改
:某些性能被更改
如图:
,S表示大小被改变,5表示数据指纹信息md5被更改,T表示时间戳被更改。
同时也可以选择那些属性不查询
:
:不校验依赖关系
:不检查文件
:不检查包完整性
:不检查脚本信息
:不检查签名信息
:不检查resdlink的路径是否匹配
:不检查文件的完整性信息
:不检查大小的改变
:不检查属主的变化
:不检查属组
:不检查时间戳的改变
不检查权限的改变
:不检查相应的文件属性
程序包来源合法性验证:
数字签名:
第一步:制作者进行单向加密定长输出包的特征码
第二步,再利用私钥加密特征码附加到程序包后面,附加到程序包后的加密过的特征码就是数 字签名,用户拿到程序后利用公钥解密私钥验证来源是否合法。
完整性验证:
用户用公钥解密后得到特征码进行比较验证该包的完整性。
互联网通过CA获得公钥
CentOS发行版中程序包的公钥存放在/etc/pki/rpm-grp/RPM-GPG-KEY-CentOS-#
导入公钥:rpm --import /etc/pki/rpm-grp/RPM-GPG-KEY-CentOS-#
导入之后安装程序包时就不会出现警告NOKEY的信息:如图
验证:程序包安装时会自动验证。
如果要手动验证:rpm –K PACKAGE_FILE
如图
rpm数据库:/var/lib/rpm,rpm包安装后生成的所有信息都放在这里
查询操作就是通过此处的数据库进行的。
所以数据库的完整性就非常重要。
获取使用帮助:
:man rpm
:man rpmdb
rpm{--initdb|--rebuilddb} [--dbpath DIRECTORY] [--root DIRECTORY]
:初始化数据库,当前无任何数据库时可初始化创建一个新的;当前有时则不执行任何 操作;
:重新构建,通过读取当前系统上所有已经安装过的程序包进行重新创建。
总结:安装程序包在linux系统中有着至关重要的作用,其中的查询机制更是在各种环境中经常用到,所 以熟练掌握安装程序命令和查询命令是非常有必要的,需要不断的操作积累经验来增强记忆。