码迷,mamicode.com
首页 > 其他好文 > 详细

RPM包管理功能全解

时间:2017-10-25 14:23:51      阅读:876      评论:0      收藏:0      [点我收藏+]

标签: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       阿里云镜像

http://mirrors.sohu.com        搜狐镜像

http://mirrors.163.com           网易镜像

2、项目的官方站点

3、第三方组织

EPEL:ExtraPackages for Enterprise Linux(企业版Linux附加软件包)

搜索引擎

        http://pkgs.org

        http://rpmfind.net

        http://rpm.pbone.net        

 

四、       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:重新构建数据库,会覆盖原有数据库


RPM包管理功能全解

标签:linux

原文地址:http://jojohyj.blog.51cto.com/11654339/1975963

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!