RPM包管理

 

 在linux中有有两种常见的软件管理器,分别Redhat的为RMP与Debian的dpkg。我们学习的Centos主要以RPM为主。RPM The RPM PackageManager),是由Red Hat公司开发的一个Linux软件包安装与管理程序,是以一种数据库记录的方式来将所需要的软件安装到你的Linux系统的一套管理机制。用户可以方便地在Linux系统中安装、升级和删除软件,以及在一个统一的界面中对所有的RPM软件包进行管理。 

获取rpm包的途径:

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

           镜像:

             http://mirrors.163.com

             http://mirrors.sohu.com

        2、项目的官网

             源代码

             rpm

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

             http://rpmfind.net

             http://rpm.pbone.net

        4、可靠的途径:EPEL

        https://fedoraproject.org/wiki/EPEL/zh-cn

  

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:不真正删除,只是模拟。

 

安装软件包:-i --install

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

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

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

    -vv ,显示调试信息  

     常用组合选项:-ivh

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

 

 1 

  2

 3

 4

 5

 6

 

[[email protected]~]# rpm-ivh --test zsh-4.3.10-7.el6.x86_64.rpm 

 Preparing...                ###########################################[100%]

 [[email protected]~]# 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,强制安装软件包,但有可能无法运行;一般不建议。

 

 1

 2

 3

 4

 5

 6

 7

 8

 9

 10

 11

 12

 

[[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结尾。

 

1

 2

 3

 4

 5

6

 7

 8

 9

 10

 

[[email protected]~]# 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]~]# 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   

 

 1

 2

 3

 4

 5

 6

 7

 8

 9

 10

 11

 12

 13

 14

 15

 16

 

 [[email protected]~]# 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

 

  1

 2

 3

 4

 5

 6

 7

 8

 9

 

    [root@stu19 ~]# 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使用,查看未安装软件包的相关信息。

 

 1

 2

 3

 4

 5

 6

 7

 8

 9

 

    [[email protected]~]# rpm -q zsh

     package zsh is not installed

     [[email protected]~]# 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 �CqR 软件包名称

 

 1

 2

 3

 4

 5

 6

 7

 8

 9

 10

 11

 12

 13

 

[[email protected]~]# 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会自动将其保存为另外一个文件,用户会看到下面的信息:
saving /etc/foo.conf as /etc/foo.con
f.rpmsave这样用户就可以自己手工去更改相应的配置文件。
另外如果用户要安装老版本的软件,用户就会看到下面的出错信息

用户要注意的是:rpm会自动反:

 -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 : 表示最后修改时间根据文件类型的不同检验的项目也不同 

     PcaPabilities differ

     c %config  configuration file.

     d %doc  documentation file.

     l %license  license file.

     r %readme  readme file.

 

    某属性无变化,显示为.

     示例:

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

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

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

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

  

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

 

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

 

 1

 2

 3

 4

 

    [[email protected]~]# 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   #显示密钥的详细信   

    手动检查:

    #rpm -K/path/to/package_fil

    #rpm --checksig/path/to/package_file 

 

    不检查包完整性:

     #rpm -K --nodigest

     不检查来源合法性:

     #rpm -K --nosignature

  

数据库重建:

 

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

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

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

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

        #rpm --rebuilddb重建数据库

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

 综合上述可以总结为下表:

option

参数解释

Example

安装

-i

安装

-v|-vv|-vvv

显示详细信息

-h

以#显示安装进度一个#表示2%的进度

rpm -ivh zsh-4.3.10-5.el6.x86_64.rpm

--nodeps

忽略依赖关系

--test

测试安装

--replacepkgs

重新安装(安装的包已经安装了)

升级

-U   -Uvh

升级+安装

-F    -Fvh

升级(此包已经安装了)

--force

有冲突强制升级

--nodeps

忽略包依赖性关系

卸载

-e

卸载

rpm  -e  包名

--nodeps

忽略包依赖性关系

查询

-q  |--query

rpm -q|--query  包名

-qa

查看所有已经安装的包

rpm -qa  查看所有包名

rpm -qa |  grep 包名查看某个包名

-qi

查看包的摘要信息

-qf

查看文件是有那个包安装的

rpm  -qf  /path/to/file

-ql

查看包安装生成的文件清单

-qc

查看包安装生成的配置文件

-qd

查看包安装生成的帮助文档

-q  --scripts

查看相关的脚本

rpm -q--script   包名

-qp[i|l|d|c]

查看尚未安装包的详细信息

rpm -qpi /path/to/rpm_file

校验

-V

rpm -V   包名

数据库管理

--initdb

新建

rpm  --initdb

--rebuilddb

重建

rpm  --rebuilddb

 

你可能感兴趣的:(rpm,管理程序)