RPM包管理总结

RPM包管理与YUM的使用总结

 

一、rpm包管理

简介

在GNU/Linux操作系统中,RPM和DPKG为最常见的两类软件包管理工具,他们分别应用于基于RPM软件包的Linux发行版本和DEB软件包的Linux发行版本。软件包管理工具的作用是提供在操作系统中安装,升级,卸载需要的软件的方法,并提供对系统中所有软件状态信息的查询。

 

定义:

RPM (The RPM PackageManager),是由Red Hat公司开发的一个Linux软件包安装与管理程序,是以一种数据库记录的方式来将所需要的软件安装到你的Linux系统的一套管理机制。用户可以方便地在Linux系统中安装、升级和删除软件,以及在一个统一的界面中对所有的RPM软件包进行管理。

RPM软件包分为二进制包(Binary)、源代码包(Source)和Delta包三种。二进制包(.rpm)可以直接安装在计算机中,而源代码包将会由RPM自动编译、安装。源代码包经常以src.rpm作为后缀名

特点

将你要安装的软件先编译过,并且打包成为RPM机制的包装档案,透过包装好的软件里头默认的数据库记录,记录这个软件要安装的时候必须具备的相依属性软件,当安装在你的Linux主机时,RPM会先依照软件里面的数据查询Linux主机的相依属性软件是否满足,若满足则予以安装,若不满足产则不予安装。那么安装的时候就将该软件的信息整个写入RPM的数据库中,以便未来的查询、验证与反安装。

rpm包的命令格式

Name-Version-Relase.Arch.rpm

eg:bash-4.1.2-15.el6_4.x86_64

Name:软件的名称,bash

Version: 版本信息。同源代码(4.1.2)

源代码的version:major.minor.release

Release: rpm自身释放的发行号(次数),通常是编译的次数。与程序源码的发行号无关,仅用于标识对rpm包不同制作的修订;同时,release还包含此包适用的OS

Arch:硬件平台,

x86: i386, i486, i586, i686等;

x86_64: 针对64位的CPU进行优化编译设定

powerpc: ppc

noarch: 依赖于虚拟机,没有任何硬件等级上的限制。

例如:bash-4.2.3-3.centos5.x86_64.rpm

获取rpm包的途径:

1、发行的光盘或站点服务器

镜像:

http://mirrors.163.com

http://mirrors.sohu.com

http://centos.ustc.edu.cn/centos/

2、项目的官网

源代码

rpm包

3、很多第三方机构或个人制作并公开发布许多rpm包

http://rpmfind.net

http://rpm.pbone.net

4、可靠的途径:EPEL

        EPEL是Extra Packages forEnterprise Linux的缩写,企业版 Linux 附加软件包。https://fedoraproject.org/wiki/EPEL/zh-cn

rpm包的合法性验证:

包制作者制作完成之后会附加数字签名于包上;

来源合法性

包的完整性

包的制作者使用单向加密提取原始数据的特征码,而后使用自己的私钥加密这段特性码,附加原始数据后面。

验证过程:

前提:必须有可靠机制获取到包制作者的公钥;

1、使用制作者的公钥解密加密的特征码,能解密则意味着来源合法;

2、使用与制作者同样的意向加密算法提取原始数据的特征码,并与解密出来的特征作比对,相同,则意味着完整性没问题;

rpm命令使用方法:

RPM软件包的安装、删除、升级、查看和验证等所有的操作都由rpm这一命令来进行的。rpm命令有12种模式,不同模式有不同的命令模式,能完成不同的管理功能。常用的模式的有:

安装模式:rpm  {-i |--install}  [install-options]  PACKAGE_File …

升级模式:rpm  {-U|--upgrade}  [install-options]  PACKAGE_File …

卸载(删除)模式:rpm {-e|--erase} [erase-options]PACKAGE_Name …

查询模式:rpm  {-q |--query }  [select-options]  [query-options]

验证模式:rpm  {-V |--verify}  [select-options]  [verify-options]

一般选项:可以用于rpm命令的所有模式。

-h :用#显示完成的进度。

--version:显示当前使用的RPM版本。

选择选项:select-options,用于查询和验证模式。

-a:查询所安装的软件包。

-f,--file FILE :查询拥有<文件>的软件包,即是哪一个软件包安装的<解文件>。

查询选项:query-options,可用于查询和验证模式。

-i,--info:显示软件包的信息,包括名称、版本、描述信息。

-l,--list:列出这个软件包内所包含的文件。

--provides:显示这个软件包所提供的功能。

-R,--requires:查询安装该软件包所需要的其他软件包。

-s,--state:列出软件包中所有文件的状态。

验证选项:verify-options,只能用于验证模式。

--nodeps:不验证依赖的软件包。

--nofiles:不验证软件包文件的属性。

安装选项:install-options,用于安装模式和升级模式。

--force:同--replacepkgs,--replacefiles一样,就算要安装的软件版本已经安装在系统上,或者是系统上现在的版本比要安装的版本高,依然强制覆盖安装。

--nodeps:使用RPM安装前,RPM会检查该软件包的依赖关系,即正确运行该软件包所需的其他软件是否已经安装。使用该选项将忽略软件包所依赖的其他软件强制安装。但不推荐这种做法,因为这样安装的软件大部是不能运行的。

--test:模拟安装,软件包并不会实际安装到系统中,只是检查并显示可能存在的冲突。

删除选项:erase-options,只能用于删除模式。

--nodeps:忽略其他依赖该软件包的软件,强制删除该软件包。正常情况下不建议这样做,因为删除软件包后,其他相关的软件就不能运行了。

--test:不真正删除,只是模拟。

rpm包管理器的常见使用场景

安装软件包:-i --install

软件包的安装分为两个阶段,首先是安装准备阶段,在准备阶段会检查磁盘空间、软件是否已安装、依赖软件包是否已安装等,准备阶段完成后才会进行软件包的安装。

-i,--install 安装新软件包。可用于内核的升级和安装可以同时保留老内核版本和新版本两个内核

-h,--hash 用#(hash)符显示rpm安装过程
-v,--verbose详述安装过程

-vv ,显示调试信息

常用组合选项:-ivh

--test:安装准备阶段,模拟安装,检查为了检查一个软件包的安装是否会有冲突,可以事先使用--test选项进行模拟安装,例如

[[email protected] Packages]# rpm-ivh --test zsh-4.3.10-7.el6.x86_64.rpm 
Preparing...                ###########################################[100%]
[[email protected] Packages]# rpm-ivh zsh-4.3.10-7.el6.x86_64.rpm 
warning:zsh-4.3.10-7.el6.x86_64.rpm: Header V3 RSA/SHA1 Signature, key ID c105b9de:NOKEY
Preparing...                ###########################################[100%]
   1:zsh                  ###########################################[100%]

RPM软件包有可能会依赖于其他软件包,也就是说在安装了特定的软件包之后才可以安装该软件包。如果软件依赖于其它包则:

1、解决依赖关系

如果多个包之间相互依赖,可以同时使用rpm命令安装多个包,或者使用yum进行安装。

有依赖关系包的会报错,error: Faileddependencies:。根据提示安装所依赖包,其中一些>=、<=符号。

>=:表示必须要大于或等于某个版本。

<=:表示要小于或等于某个版本。

2、忽略依赖关系

--nodeps,强制安装软件包,但有可能无法运行;一般不建议。

[[email protected]]# rpm -ivh --test libgnomecanvas-devel-2.26.0-4.el6.x86_64.rpm 
error: Faileddependencies:
         gtk-doc is needed bylibgnomecanvas-devel-2.26.0-4.el6.x86_64
         gtk2-devel >= 2.1.2 is needed bylibgnomecanvas-devel-2.26.0-4.el6.x86_64
         libart_lgpl-devel >= 2.3.8 is neededby libgnomecanvas-devel-2.26.0-4.el6.x86_64
         libglade2-devel >= 2.6.3-2 is neededby libgnomecanvas-devel-2.26.0-4.el6.x86_64
         pkgconfig(gail) is needed bylibgnomecanvas-devel-2.26.0-4.el6.x86_64
         pkgconfig(gtk+-2.0) is needed bylibgnomecanvas-devel-2.26.0-4.el6.x86_64
 
[[email protected]]# rpm -ivh --nodeps libgnomecanvas-devel-2.26.0-4.el6.x86_64.rpm 
Preparing...               ########################################### [100%]
   1:libgnomecanvas-devel   ###########################################[100%]

--force:同 --replacepkgs,--replacefiles一样,就算要安装的软件版本已经安装在系统上,或者是系统上现在的版本比要安装的版本高,依然强制覆盖安装。

卸载程序包:-e,-- erase

rpm [option] package_name

-e: erase 删除软件包

--test模拟删除,可以先检查被删除软件包是否有依赖软件包

--nodeps,强制删除,忽略依赖关系,但依赖于此包程序包可能会运行不正常;同安装的选项类似。

注意:在卸载时,如果原有配置文件作了修改,系统提示警告信息,并将安装生成的配置文件重命名为以 .rpmsave结尾。

[[email protected] Packages]# rpm -e --test libgnome 
error: Failed dependencies:
         libgnome-2.so.0()(64bit)is needed by (installed) libbonoboui-2.24.2-3.el6.x86_64
         libgnome-2.so.0()(64bit)is needed by (installed) gnome-power-manager-2.28.3-7.el6_4.x86_64
         libgnome-2.so.0()(64bit)is needed by (installed) gnote-0.6.3-3.el6.x86_64
         libgnome-2.so.0()(64bit)is needed by (installed) mousetweaks-2.28.2-1.el6.x86_64
         libgnome >= 2.8.0 isneeded by (installed) gnome-python2-gnome-2.28.0-3.el6.x86_64
         libgnome is needed by(installed) gnome-terminal-2.31.3-8.el6.x86_64
 
[[email protected] Packages]# rpm -e --nodeps libgnome


查询软件包:-q--query

使用rpm命令可以查看指定软件包的详细信息、安装的文件清单、依赖的软件包清单、某个软件包是否已经安装、系统中所有已安装软件包的清单等信息。

常用组合选项:

-q,--query查询某软件包是否安装,如果有则表示软件全名。

格式:rpm -qpackage_name...

# rpm -q bash

bash-4.1.2-15.el6_4.x86_64

-aq      ,--all查询系统中所有已经安装的软件包列表

按条件过滤:rpm -qa | grep ‘PATTERN‘等同于选项-qi

-iq--info查询软件包的详细描述信息。输出中包括软件名称(name)、版本(Version)、修正版(Release)、软件包的安装时间(Install Date)、安装软件包的文件名称(Source RPM)、程序的占用空间(Size)

 [[email protected] Packages]# rpm -qi bash
    Name        : bash                         Relocations: (not relocatable)
    Version     : 4.1.2                             Vendor: CentOS
    Release     : 15.el6_4             Build Date: Thu 18 Jul 201309:21:24 PM CST
    Install Date: Mon 30 Jun 2014 12:27:55 PM CST      Build Host: c6b10.bsys.dev.centos.org
    Group       : SystemEnvironment/Shells     Source RPM:bash-4.1.2-15.el6_4.src.rpm
    Size        : 3139291                          License: GPLv3+
    Signature   : RSA/SHA1, Thu 18Jul 2013 09:46:10 PM CST, Key ID 0946fca2c105b9de
    Packager    : CentOS BuildSystem<http://bugs.centos.org>
    URL         :http://www.gnu.org/software/bash
    Summary     : The GNU BourneAgain shell
    Description :
    The GNU Bourne Again shell (Bash) is a shell or command language
    interpreter that is compatible with the Bourne shell (sh). Bash
    incorporates useful features from the Korn shell (ksh) and the C shell
    (csh). Most sh scripts can be run by bash without modification.

-lq,--list   查询系统中已安装软件包生成的文件列表。

rpm -ql package_name

    [[email protected] ~]# rpm -ql bash
    /bin/bash
    /bin/sh
    /etc/skel/.bash_logout
    /etc/skel/.bash_profile
    /etc/skel/.bashrc
    /usr/bin/bashbug-64
    /usr/share/doc/bash-4.1.2/COPYING
    … … … ….

-cq,--configfiles查询某包安装生成了哪些配置文件

#rpm -qc bash

/etc/skel/.bash_logout

/etc/skel/.bash_profile

/etc/skel/.bashrc

-dq,--docfiles查询某包安装生成了哪些帮助文件

#rpm -qd bash

--scripts查询程序包的相关脚本

#rpm -q --scripts bash

显示的脚本有四类:

preinstall:在安装之前运行脚本

postinstall: 在安装之后脚本

preuninstall: 在卸载之前脚本

postuninstall: 在卸载之后脚本

-fq,--queryformat QUERYFMT查询某文件是由哪个软件包安装生成的。
        格式:   rpm -qf /path/to/some_file

# rpm -qf/bin/cat

coreutils-8.4-31.el6.x86_64

-p,--package PACKAGE_FILE:对尚未安装的软件执行相关查询

格式:    rpm [option] /path/to/package_file

可以结合选项-qpi、-qpl、-qpc、-qpd使用,查看未安装软件包的相关信息。

    [[email protected] Packages]# rpm -q zsh
    package zsh is not installed
    [[email protected] Packages]# rpm -qpc zsh-4.3.10-7.el6.x86_64.rpm 
    /etc/skel/.zshrc
    /etc/zlogin
    /etc/zlogout
    /etc/zprofile
    /etc/zshenv
    /etc/zshrc

-Rq--requires查看已安装的某个软件包所依赖的软件包清单。格式:rpm –qR 软件包名称

[[email protected] Packages]# rpm -qR vim-common
/bin/sh  
config(vim-common) = 2:7.2.411-1.8.el6
libc.so.6()(64bit)  
libc.so.6(GLIBC_2.2.5)(64bit)  
libc.so.6(GLIBC_2.3)(64bit)  
libc.so.6(GLIBC_2.3.4)(64bit)  
libc.so.6(GLIBC_2.4)(64bit)  
rpmlib(CompressedFileNames) <= 3.0.4-1
rpmlib(FileDigests) <= 4.6.0-1
rpmlib(PayloadFilesHavePrefix) <= 4.0-1
rtld(GNU_HASH)  
rpmlib(PayloadIsXz) <= 5.2-1

升级程序包:

格式:rpm [option]/path/to/package_file

-U--upgrade升级或安装。如果有老版本,则升级为新版本,否则安装。

由于版本过低,希望升级到更高的版本。新版的软件包安装文件覆盖旧版本的文件。

用户要注意的是:rpm会自动反安装相应软件包的老版本。如果老版本软件的配置文件通新版本的不兼容,rpm会自动将其保存为另外一个文件,用户会看到下面的信息:
saving /etc/foo.conf as /etc/foo.conf.rpmsave
这样用户就可以自己手工去更改相应的配置文件。
另外如果用户要安装老版本的软件,用户就会看到下面的出错信息:

-Uvh,如果有老版本,则升级为新版本,否则安装。

-F--freshen纯升级,如果没有老版本,则不升级。

组合选项:-Uvh 、-Fvh

升级后的版本可能会有依赖关系的冲突等;

--force: 强制升级

注意:内核升级一般使用安装-ivh,而不是升级-Uvh(直接升级),系统允许多内核并存。

软件包校验:-V--verify

-V--verify用于检查包安装生成的文件属性是否发生变化。

格式:rpm -V package_name

检验项目共九项,结果以下面8个字母来和一个可能的属性标记:

S : 表示文件大小;

M : 表示权限;

5 : 表示MD5检查和;

D : 表示主从设备号;

L : 表示符号连接;

U : 表示属主;

G : 表示属组;

T : 表示最后修改时间根据文件类型的不同检验的项目也不同

P:caPabilities differ

c %config  configuration file.

d %doc  documentation file.

l %license  license file.

r %readme  readme file.

某属性无变化,显示为.

示例:

[[email protected] Packages]# vi /etc/zshrc

[[email protected] Packages]# rpm -V zsh

S.5....T.  c /etc/zshrc

表示zsh包的配置文件/etc/zshrc文件大小、MD5、修改时间发生改变。

rpm包来源合法性及完整性检验:

在安装软件的时候,会warning提示  NOKEY相关信息,说明rpm包对来源合法性验证有警示信息。需要在当前系统上导入包的制作者的公钥

    [[email protected] Packages]# rpm -vhizsh-4.3.10-7.el6.x86_64.rpm
    warning: zsh-4.3.10-7.el6.x86_64.rpm:Header V3 RSA/SHA1 Signature, key ID c105b9de: NOKEY
    Preparing...                ###########################################[100%]
      1:zsh                  ###########################################[100%]

导入格式:#rpm --import/path/to/key_file

导入光盘镜像软件包公钥:

#rpm --import/media/cdrom/RPM-GPG-KEY-CentOS-6

# rpm -qa gpg-pubkey*    显示所有已经导入的gpg格式的公钥

# rpm -qi gpg-pubkey-NAME   #显示密钥的详细信息

示例:

    [[email protected] Packages]# rpm -K zsh-4.3.10-7.el6.x86_64.rpm 
    zsh-4.3.10-7.el6.x86_64.rpm: RSA sha1 ((MD5) PGP) md5 NOT OK (MISSINGKEYS: (MD5) PGP#c105b9de) 
    [[email protected] Packages]# rpm --checksig zsh-4.3.10-7.el6.x86_64.rpm 
    zsh-4.3.10-7.el6.x86_64.rpm: RSA sha1 ((MD5) PGP) md5 NOT OK (MISSINGKEYS: (MD5) PGP#c105b9de) 
    [[email protected] Packages]# rpm --import ../RPM-GPG-KEY-CentOS-6
    [[email protected] Packages]# rpm --checksig zsh-4.3.10-7.el6.x86_64.rpm 
    zsh-4.3.10-7.el6.x86_64.rpm: rsa sha1 (md5) pgp md5 OK
    [[email protected] Packages]# rpm -K zsh-4.3.10-7.el6.x86_64.rpm 
    zsh-4.3.10-7.el6.x86_64.rpm: rsa sha1 (md5) pgp md5 OK

手动检查:

#rpm -K/path/to/package_file

#rpm --checksig/path/to/package_file

不检查包完整性:

#rpm -K --nodigest

不检查来源合法性:

#rpm -K --nosignature

数据库重建:

通过rpm 命令查询一个rpm 包是否安装了,也是要通过rpm 数据库来完成的;有时rpm 系统出了问题,不能安装和查询,可能会是数据库出现问题,可以使用下面命令重建;

rpm包数据库目录:/var/lib/rpm

#rpm --initdb:初始化数据库

##如果事先没有库,会新建一个;如果有,则不新建;

#rpm --rebuilddb: 重建数据库

##直接重建,覆盖原有的数据库

时间: 2024-08-02 10:22:39

RPM包管理总结的相关文章

Linux的rpm包管理

我们都知道,windows的程序无法直接在linux中运行,windows中大量的木马和病毒也无法被linux识别,所有的软件包都必须针对linux再做单独的开发. 软件包分类 源码包 (把源代码直接开放的包) 脚本安装包(源码包写一个安装界面,不需要手动安装) 二进制包(RPM包.系统默认包) 源码包的优点: 1.开源,如果有足够的能力,可以修改源代码 2.可以自由选择所需的功能 3.软件是编译安装,所以更加适合自己的系统,更加的稳定也效率更高 4.卸载方便 缺点: 1.安装步骤较多,尤其在安

linux软件包管理——rpm包管理

软件运行环境API:Application Programming Interface 应用程序接口(应用程序和操作系统之间的接口) 凡是符合该api标准的应用程序都可以在支持该api的操作系统上编译通过 程序源代码 --> 预处理 --> 编译 --> 汇编 --> 链接  静态编译:自身包含所有需要调用的库文件  动态编译:自身不包含,需要时调用共享库文件(.so文件)ABI:Application Binary Interface 应用程序二进制接口 规定了二进制文件的格式.

RPM包管理命令rpm

RPM包管理器是Linux系统中最早的软件包管理软件之一,也是目前最流行的软件包管理器,许多发行版都使用RPM作为默认的软件包管理软件. RPM软件包名称格式: samba-client-3.0.33-3.7.el5.i386.rpm samba-client为软件包的名称:3.0.33-3.7中的3.0.33表示软件包的主要版本号,紧跟在后面的3.7表示软件发布的次要版本号:el5表示适用于Red Hat Enterprise Linux 5 系统,fc6表示适用于Fedora Core Li

13个演示实例搞定RPM包管理工具

写在前面:如果此文有幸被某位朋友看见并发现有错的地方,希望批评指正.如有不明白的地方,愿可一起探讨. RPM是个什么东西? RPM以前是"RedHat Package Manager"的简称,现改为"RPM is Package Manager".在Linux/Unix操作系统上,RPM包管理工具允许系统管理员安装.更新.卸载.查询.验证和管理RPM包.下图为RPM包管理工具所具备的基本功能. 准备工作 为了更好的演示RPM包管理工具,我们需要将光盘镜像挂载到文件系

rpm包管理器用法详解

1,简介 rpm(Red Hat Pakage Manager),现在更名为RPM Package Manager,是一款业界公认的标准包管理器.所谓包管理器,就是把编译好的应用软件的各组成部分组成一个或几个程序包文件,从而实现程序包的安装,升级,卸载和查询等相关操作.广泛应用与redhat,centos,opensuse等发行版本上.当然,Dibian系列用的包管理器是dpkg. 2.rpm的组成 二进制程序,配置文件,帮助手册,以及如何组织,安装等其他元数据信息,不过,rpm都能理解. 3,

linux软件包管理之一(rpm包管理)

开场白 1.软件的安装卸载是很平常的事情,但是在linux上面却也这么的不简单.Linux的其中一个哲学思想就是 一个程序只做一件事,并且做好. 组合小程序来完成复杂任务.这样做有很多好处.但世界上的东西总是两面的,有得必有失.各个小程序之间往往会存在着复杂的依赖关系. 2.再往前走一步.软件最初的安装方式只有一种,那就是源代码编译安装,这种方式安装的软件更贴近本机的系统运行环境,但也更复杂.不仅要解决软件之间的依赖关系(所依赖的软件还要再编译安装),还要配置开发编译环境(可能会抓狂的),一切都

rpm包管理功能全解

rpm包管理功能全解            linux rpm问题:怎样查看rpm安装包的安装路径                     rpm -qa l grep  xxxxxx.rpm                    rpm的命令:rpm  [OPTIONS]  [PACKAGE_FILE]            安装:-i, --install            升级:-U, --update, -F, --freshen            卸载:-e, --erase 

RPM 包管理与 yum安装源码包

RPM工具 RPM 是 Red HatPackage Manager 的缩写,是由Redhat所开发一款包管理程序.目前Redhat系的Linux使用rpm可以完成软件的安装.查询.卸载.升级等工作. 需要注意的是,RPM包之间存在依赖性的问题:在安装一个包的过程中可能需要安装其它包,并且其它包又有所依赖的包.所以必须先安装好所有所依赖的包后才能安装自己想要安装的包. 获取程序包的途径:优先选择系统附带的光盘或到官方的服务器下载:项目的官方站点下载. 每个rpm包名称都由"-"和&qu

【Linux相识相知】rpm包管理

我们日常在使用Windows的时候,如果要安装某个软件,最简单的方法就是在程序包的官网直接下载软件包到本地,一般是以.exe或者.msi格式的文件,然后一直下一步下一步就能安装成功了,但是在使用linux的操作系统的时候也许不是这么的友好,即使现在有的linux发行版也可以通过简单的搜索点击安装来实现软件包的安装,但这并不一种很好的安装方法,因为你必须安装桌面环境,消耗和占用一定的内存资源,除非只是你日常使用.本次博客就如何使用rpm命令来实现centos上的软件包的安装与管理,rpm也许不是最

tar ,cpio打包解压. shell脚本for,while,until循环. rpm包管理,select循环菜单,函数function,yum

tar  tar -cf 路径+文件名字后续.tar  +路径 创建归档压缩 tar cf /testdir/etc.tar /etc/ tar cvf 可以查看解压过程 tar tvf 预览作用 tar xvf 解压文件 tar zcvf /testdir/etc2.tar.gz /etc/ 解压再压缩到指定路径,文件格式 tar jcvf cpio 复制 从或到文件 cpio 命令是通过重定向的方式将文件进行打包备份,还原恢复的工具,它可以解压以".cpio"或者".ta