RPM简介

            其设计理念最初是“借鉴”Ddbian的DPT打包成红帽自己的包管理器RedHat Package Manager即

RPM,但是其后来者居上,现在RPM已经成为了世界的包管理标准,所以改名为RPM is Package Manager

SUSE由于一直没有属于自己的包管理器也使用RPM,但是SUSE有自己的理念,RedHat发现SUSE的理念更好

然后将其收录其中,使得其更加强大。

     RPM功能:

        将原本需要自己编译的源代码先编译好,然后打包成RPM包,并将其拆包成主包与各种依赖于主包的支包,以方便用户的安装与功能的选择。并且会在本地建一个RPM数据库,里面有所有已经安装的软件的各种信息,包括名字版本、功能说明、依赖关系、安装路径等等,来方便用户的查询。

     RPM缺点:

        虽然RPM大大方便了用户,但是其并没有解决源码安装时候的依赖关系,这就要求用户安装某个

RPM时候其安装环境必须满足相应的条件,而且还要自己解决各种软件包之间的依赖关系。而且用户还必须先取得其要安装的RPM包。

    RPM用法:

       既然是软件包管理工具,那么就必须拥有安装、升级、卸载、查询、校验、建立软件数据库的功能。

        使用格式为:rpm 选项  包文件

        选项:

            -i:安装

            -U和-F:升级

            -e:卸载

            -q:查询

            -V:校验

            --builddb和--initdb:数据库维护

        安装

            rpm -ivh 包文件

            -v:显示详细信息

            -vv;显示更加详细的信息

                   -h:显示进度条  

       [root@bogon Packages]# rpm -ivh zsh-5.0.2-14.el7.x86_64.rpm 
        Preparing...                          ################################# [100%]
        Updating / installing...
        1:zsh-5.0.2-14.el7                 ################################# [100%]

                   --test:只是检测安装,并不真的安装,可以检查依赖关系和冲突信息。

        [root@bogon Packages]# rpm -ivh  --test php-common-5.4.16-36.el7_1.x86_64.rpm 
        error: Failed dependencies:
        libzip.so.2()(64bit) is needed by php-common-5.4.16-36.el7_1.x86_64

                  --nodeps:忽略依赖关系,不建议这么做,除非你自己很清楚不会出错。

        [root@bogon Packages]# rpm -ivh  --nodeps php-common-5.4.16-36.el7_1.x86_64.rpm 
        Preparing...                          ################################# [100%]
        Updating / installing...  
        1:php-common-5.4.16-36.el7_1       ################################# [100%]

               --replacepkgs:重新安装,但是其不会替换原包的配置文件。

        ]# vim /etc/zshrc  
        1 #
        2 # /etc/zshrc is sourced in interactive shells.  It
        3 # should contain commands to set up aliases, functions, 
        1 #
        2 # should contain commands to set up aliases, functions,
       [root@bogon Packages]# rpm -ivh --replacepkgs zsh-5.0.2-14.el7.x86_64.rpm 
        Preparing...                          ################################# [100%]
        Updating / installing...
          1:zsh-5.0.2-14.el7                 ################################# [100%]
       [root@bogon Packages]# vim /etc/zshrc 
        1 #
        2 # should contain commands to set up aliases, functions,

         这时候一般需要删除其配置文件再重新安装

     [root@bogon Packages]# rm -rf /etc/zshrc
     [root@bogon Packages]# rpm -ivh --replacepkgs zsh-5.0.2-14.el7.x86_64.rpm 
      Preparing...                          ################################# [100%]  
      Updating / installing...
        1:zsh-5.0.2-14.el7                 ################################# [100%]
     [root@bogon Packages]# vim /etc/zshrc
      1 #
      2 # /etc/zshrc is sourced in interactive shells.  It
      3 # should contain commands to set up aliases, functions,

        --nosignature:不检查包签名信息即不检查来源合法性

        --nogigest:不检查包的完整性   

[root@bogon Packages]# rpm -ivh --replacepkgs --nosignature zsh-5.0.2-14.el7.x86_64.rpm  
Preparing...                          ################################# [100%]
Updating / installing...
   1:zsh-5.0.2-14.el7                 ################################# [100%]
[root@bogon Packages]# rpm -ivh --replacepkgs --nodigest zsh-5.0.2-14.el7.x86_64.rpm 
Preparing...                          ################################# [100%]
Updating / installing...
   1:zsh-5.0.2-14.el7                 ################################# [100%]

         升级:rpm -Uvh或者-Fvh,前者是若程序包安装了则升级,若没安装则安装,后者只升级

              --oldpackage:降级

              --force:强制升级

         卸载:rpm -e

               --nodeps:强行卸载

               --test:测试卸载

         查询:rpm -q 包名

               不带除了q外的任何选项表示查询当前系统上是否安装了此包

            [root@bogon Packages]# rpm -q zsh
             zsh-5.0.2-14.el7.x86_64

             -qa 后面接包名和-q一样,带任何参数表示查询已经安装的全部包。

            [root@bogon Packages]# rpm -qa zsh
             zsh-5.0.2-14.el7.x86_64

             -qf:显示指定文件由哪个包生成

           [root@bogon Packages]# rpm -qf /bin/bash
            bash-4.2.46-19.el7.x86_64

             -ql;列出指定已安装的包生成的所有文件路径

             -qi:查询指定已安装包的详细信息

           [root@bogon Packages]# rpm -qi zsh
            Name        : zsh
            Version     : 5.0.2
            Release     : 14.el7
            Architecture: x86_64
            省略。。。。。

                   -qc:查询已安装包生成的配置文件路径

            [root@bogon Packages]# rpm -qc zsh
             /etc/skel/.zshrc
             /etc/zlogin
             /etc/zlogout
             /etc/zprofile
             /etc/zshenv
             /etc/zshrc

            -qd:查询已安装包生成的文档路径

           [root@bogon Packages]# rpm -qd zsh
            /usr/share/doc/zsh-5.0.2/BUGS
            /usr/share/doc/zsh-5.0.2/CONTRIBUTORS
            /usr/share/doc/zsh-5.0.2/FAQ
            /usr/share/doc/zsh-5.0.2/FEATURES
             省略。。。

            -q --pvovides:查询已安装包的某CAPABILITY

          [root@bogon Packages]# rpm -q --provides zsh
           config(zsh) = 5.0.2-14.el7
           zsh = 5.0.2-14.el7
           zsh(x86-64) = 5.0.2-14.el7

            -q --requires(-R):查询已安装包所需要(依赖)的CAPABILITY

          [root@bogon Packages]# rpm -q --requires zsh
           /bin/sh
           /bin/sh
           /bin/sh
           /bin/sh
           /bin/zsh
           /sbin/install-info
            省略。。。

           -q --whatprovides:查询指定程序的软件包名

         [root@bogon Packages]# rpm -q --whatprovides zsh
          zsh-5.0.2-14.el7.x86_64

           -q  --whaterequires:查询指定包被谁所需要(依赖)

         [root@bogon Packages]# rpm -q --whatrequires zsh
          no package requires zsh
         [root@bogon Packages]# rpm -q --whatrequires gcc
          systemtap-devel-2.8-10.el7.x86_64
          libquadmath-devel-4.8.5-4.el7.x86_64
          gcc-gfortran-4.8.5-4.el7.x86_64
          libtool-2.4.2-20.el7.x86_64
          gcc-c++-4.8.5-4.el7.x86_64

           -p:查询的是未安装包的信息,得配合别的选项使用不然没有任何意义

         [root@bogon Packages]# rpm -qp php-5.4.16-36.el7_1.x86_64.rpm 
          php-5.4.16-36.el7_1.x86_64
         [root@bogon Packages]# rpm -qpi php-5.4.16-36.el7_1.x86_64.rpm 
          Name        : php
          Version     : 5.4.16
          Release     : 36.el7_1
          Architecture: x86_64
          Install Date: (not installed)
          Group       : Development/Languages
          Size        : 4591798  
                省略、、、、

            所以当然就有-qpi  -qpd  -qpc -qpl等等意义与-qi -qd -qc -ql一样只是前面查询的是未安装的包,后面查询的是已安装的包。

            -q --scripts:查询指定包的脚本信息

        [root@bogon Packages]# rpm -q --scripts zsh
         postinstall scriptlet (using /bin/sh):
         if [ ! -f /etc/shells ] ; then
              echo "/bin/zsh" > /etc/shells
         else
             grep -q "^/bin/zsh$" /etc/shells || echo "/bin/zsh" >> /etc/shells
         fi
         if [ -f /usr/share/info/zsh.info.gz ]; then
         # This is needed so that --excludedocs works.
        /sbin/install-info /usr/share/info/zsh.info.gz /usr/share/info/dir \
             省略、、

            校验:-V  也是校验已安装的包,否则加上p

        [root@bogon Packages]# rpm -V zsh
        [root@bogon Packages]# 
        没有消息就是最好的消息
        [root@bogon Packages]# rpm -Vp php-5.4.16-36.el7_1.x86_64.rpm 
         Unsatisfied dependencies for php-5.4.16-36.el7_1.x86_64:
         httpd-mmn = 20120211x8664 is needed by php-5.4.16-36.el7_1.x86_64
         php-cli(x86-64) = 5.4.16-36.el7_1 is needed by php-5.4.16-36.el7_1.x86_64
         httpd is needed by php-5.4.16-36.el7_1.x86_64
         missing   c /etc/httpd/conf.d/php.conf
         missing   c /etc/httpd/conf.modules.d/10-php.conf
         missing     /usr/lib64/httpd/modules/libphp5.so
         missing     /usr/share/httpd/icons/php.gif
         missing     /var/lib/php/session

               包合法性和完整性验证:

            先获取包制作者的公钥到本地然后用rpm --import 公钥路径

                对于CentOS7:rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

            至于其他的自行去GPG值高的地方获取

            导入后安装时候会自动验证,要想手动验证

                 rpm -K 包文件

         [root@bogon Packages]# rpm -K php-5.4.16-36.el7_1.x86_64.rpm 
           php-5.4.16-36.el7_1.x86_64.rpm: rsa sha1 (md5) pgp md5 OK

          数据库重建:所有的查询、安装、升级、卸载都是根据数据来查询的,RPM数据库在/var/lib/rpm下。

            --initdb:当前系统没有数据库时候实行初始化数据库,如果有就重新创建

            --rebuilddb:重新创建,读取当前系统所有已安装的软件重新构建可以都可以用--dbpath指定路径

          [root@bogon ~]# mkdir /tmp/dbrebuild
          [root@bogon ~]# rpm --initdb --dbpath=/tmp/dbrebuild/
          [root@bogon ~]# ls /tmp/dbrebuild/
           Basenames     __db.002  Group       Obsoletename  Requirename  Triggername
           Conflictname  __db.003  Installtid  Packages      Sha1header
           __db.001      Dirnames  Name        Providename   Sigmd5
          [root@bogon ~]# ls /var/lib/rpm
           Basenames     __db.002  Group       Obsoletename  Requirename  Triggername
           Conflictname  __db.003  Installtid  Packages      Sha1header
           __db.001      Dirnames  Name        Providename   Sigmd5

         [root@bogon ~]# rpm --rebuilddb --dbpath=/tmp/dbrebuild  
         [ ~]# ls /tmp/dbrebuild/
         Basenames     Dirnames  Installtid  Obsoletename  Providename  Sha1header  Trigg         ername
         Conflictname  Group     Name        Packages      Requirename  Sigmd5