标签:linux
RPM包管理总结
一、 简介
RPM全名是redhatpackage manage ,是用来管理软件的各种操作,包括安装、更新、删除、查询、认证。它最大的特点是将软件事先编译,然后打包成为RPM机制的包文件,并且包中记录了此软件在安装时需要的其他依赖软件。在安装时RPM会根据记录比较本地主机数据库中的记录是否满足依赖,若满足则安装,并且把此软件的信息也写入数据库,不满足则不予安装。
二、 RPM包命名格式
RPM包分为主包和子功能包
主包:name-version-release.(os).arch.rpm
子包:name-function-version-release.(os).arch.rpm
name:包名
version:源码的版本号,version的格式为major.minor.release,major源代码的主版本号、minor为次版本号、release为源代码的发行次数
release:rpm包的发行号
os:操作系统(可有可无)
arch:硬件架构,有i386、i486、i586、i686、x86_64、powerpc等,其中noarch指无硬件架构限制
function:说明子包的功能特性
三、 RPM包的获取途径
1、系统光盘或者或者官方文件服务器或者各个镜像站点
http://mirrors.aliyun.com 阿里云镜像
2、项目的官方站点
3、第三方组织
EPEL:ExtraPackages for Enterprise Linux(企业版Linux附加软件包)
搜索引擎
四、 rpm命令的使用
rpm命令按照用途可以分为 安装、升级、卸载、查询、校验、数据库维护这六个区块,下面我们就对各个区块的常用使用方法进行说明
1、安装
rpm {-i|--install} [install-option] PACKAGE_FILE(包完整文件名)…
-i或者—install为安装选项,一般会配合-v、-h参数一同使用。-v为显示具体的安装信息,-h为显示安装进度。
[install-option] 为安装选项下具体功能选项,常用的有
--nodeps | 安装时忽略软件的依赖关系强制安装 |
--nodigest | 安装时不验证包数据的完整性 |
--nosignature | 安装时不验证包的数字签名即不验证包的来源合法性 |
--noscripts | 禁止软件在安装前或后自动执行某些脚本 |
--replacefiles | 如果在安装时遇到某个文件已经安装,则覆盖该文件 |
--replacepkgs | 如果在安装时遇到该软件已经安装,则覆盖安装 |
--force | 强制安装,--replacefiles和—replacepkgs的综合体 |
--justdb | 只更新软件在数据库中的信息 |
--test | 不安装只是测试软件能否安装到当前环境,若不能会给出提示 |
--prefix | 将软件安装到想要的路径中,后面接路径名 |
2、更新
rpm {-U|--upgrade} [install-options]PACKAGE_FILE(包完整文件名) ...
rpm {-F|--freshen} [install-options]PACKAGE_FILE(包完整文件名) ...
同安装一样,更新也会和-h、-v选项一同使用
-Uvh | 后面接的软件若不存在,则予以安装,存在则更新 |
-Fvh | 后面接的软件若不存在,则不安装,存在则更新 |
3、卸载
rpm {-e|--erase} [erase-option] PACKAGE_NAME(已安装的软件名) ...
[erase-option]
--allmatches | 卸载所有匹配后面接的软件名的程序包 |
--nodeps | 忽略依赖关系,强制卸载。但卸载后依赖此软件的其他软件会不能使用 |
--noscripts | 在卸载过程前或后不执行任何脚本 |
--test | 只测试,不真正卸载 |
4、查询
rpm {-q|--query} [select-options][query-options]
rpm在查询时是查询/var/lib/rpm这个数据库中的信息,并且rpm还可以查询未安装的rpm文件内的信息
[query-option]
-i | 列出该软件的详细信息 |
-l | 列出软件安装生成的所有文件列表 |
-c | 列出该软件的配置文件 |
-d | 列出该软件的说明文件 |
-R | 查询该软件的依赖关系 |
-s | 列出软件包中所有文件的状态 |
--provides | 列出这个软件包提供的功能 |
--scripts | 列出这个软件包在安装或卸载前后可以运行的脚本 |
--changelog | 显示软件包的历史更改信息 |
[select-options]
-a | 列出所有已经安装的软件 |
-f FILE | 后面接文件名,查询该文件属于哪个程序 |
--whatprovides CAPABILITY | 查询指定的CAPABILITY由哪个程序包提供 |
--whateequires CAPABILITY | 查询哪些程序包依赖此CAPABILITY |
[root@jojohyj ~]# rpm-q --whatprovides zsh 由程序名查找rpm包名
zsh-4.3.11-4.el6.centos.2.x86_64
5、校验
rpm {-V|--verify} [select-options] [verify-options]
[verify-options]
--nodeps | 不验证包的依赖关系 |
--nodigest | 不验证包的完整性 |
--nosignature | 不验证包的来源可靠性 |
-f FILE | 验证某个文件的完整性 |
一般我们校验时都最好都检查下,所以直接使用rpm -V package_name 即可。
校验后无任何显示输出,说明包的完整性;如果有变化,会显示具体的变化项目
S:文件容量被改变
M:文件属性被改变
5:MD5和被改变,即数据的内容被改变
D:设备的主、次代码被改变
L:link路径被改变
U:文件属主被改变
G:文件属组被改变
T:文件的修改时间被改变
P:功能被改变
[root@jojohyj ~]# rpm-V logrotate
..5....T. c /etc/logrotate.conf
显示logrotate这个程序中的/etc/logrotate.conf这个文件的数据内容和修改时间有过变动
五、 rpm包来源合法性及包完整性验证机制
rpm包的制作者通过单向加密技术提取出包数据的特征码,特征码用于确保包数据的完整性,如果包中数据被改动,那特征码也一定会发生改变。之后包制作者使用非对称加密技术,利用其中的私钥对之前产生的特征码进行加密,此加密被称为数字签名,并公布与私钥对应的公钥给下载者,由于公钥只能解密对应的私钥,若数字签名被改动,则公钥不能解密,说明下载来源出现问题,从而保证了rpm包的来源合法性。之后下载者通过同样的单向加密技术对rpm包提取特征码,如果提取出的特征码和原特征码一致,就说明rpm包中的数据没有被改动过,从而保证了rpm包的数据完整性
导入包制作者的公钥,这里使用的是centos7的公钥位置
rpm –import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
对于其他版本的GPG密钥位置,我们可以对GPG-KEY进行搜索位置来确定后再安装
find /etc -name “*GPG-KEY*” 或者 locate GPG-KEY
导入完成后,我们可以查看密钥的具体软件名称和它的基本信息
[root@jojohyj ~]# rpm -qa | grep pubkey 查找安装后的公钥软件名称
gpg-pubkey-f4a80eb5-53a7ff4b
[root@jojohyj ~]# rpm -qigpg-pubkey-f4a80eb5-53a7ff4b 查询公钥软件的信息
Name : gpg-pubkey
Version : f4a80eb5
Release : 53a7ff4b
Architecture: (none)
Install Date: Tue 30 May 2017 08:23:05 PM CST
Group : Public Keys
Size : 0
License : pubkey
Signature : (none)
Source RPM : (none)
Build Date : Mon 23 Jun 201406:19:55 PM CST
Build Host : localhost
Relocations : (not relocatable)
Packager : CentOS-7 Key(CentOS 7 Official Signing Key) <security@centos.org>
Summary : gpg(CentOS-7 Key(CentOS 7 Official Signing Key) <security@centos.org>)
我们在安装rpm包时,会自动执行验证签名,我们也可以手动验证
rpm -K /path/to/rpmpackage_file
[root@jojohyj ~]# rpm -K zsh-5.0.2-28.el7.x86_64.rpm
zsh-5.0.2-28.el7.x86_64.rpm: rsa sha1 (md5) pgp md5 OK 签名没有问题
[root@jojohyj ~]# rpm -K zsh-4.3.11-4.el6.centos.2.x86_64.rpm
zsh-4.3.11-4.el6.centos.2.x86_64.rpm: RSA sha1 ((MD5) PGP) md5 NOT OK (MISSING KEYS:(MD5) PGP#c105b9de) 公钥没有安装,所以检查签名有问题
六、 rpm数据库重建
通过rpm 命令查询一个rpm 包是否安装了,也是要通过rpm 数据库来完成的;有时rpm 系统出了问题,不能安装和查询,可能会是数据库出现问题,可以使用下面命令重建
rpm --initdb:如果事先没有数据库,则会新建一个,如果已经存在数据库则不进行任何操作
rpm –rebuilddb:重新构建数据库,会覆盖原有数据库
标签:linux
原文地址:http://jojohyj.blog.51cto.com/11654339/1975963