1. RPM包介绍     

       RPM 是RPM Package Manager(RPM软件包管理器)的缩写,一种用于互联网下载包的打包及安装工具,它包含在某些Linux分发版中。它生成具有.RPM扩展名的文件。

       常见的包管理器如下:

           Debian: dpkg, .deb

           RedHat: rpm(redhatpackage manager), .rpm

                 RPM is PackageManager


2.rpm包的命名格式

            name-version-relase.arch.rpm

          version:major.minor.release,同源代码

          release:rpm自身的发行号,与程序源码的发行号无关,仅用于标识对rpm包不同制作的修订;同时,release还包含此包适用的OS

         eg:bash-4.2.3-3.centos5

 

        arch: 适用于的硬件平台

             x86: i386,i486, i586, i686

                x86_64:x86_64

                powerpc: ppc

         noarch: 依赖于虚拟机

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

 

        一个程序有20个功能:常用功能有8个,特殊A:3个,特殊B6个,二次开发相关功能。

        分包机制:

                    核心包,主包:命名与源程序一致

                                           bash-4.2.3-3.centos7.x86_64.rpm

                    子包:

                                          bash-a-4.2.3-3.centos7.x86_64.rpm

                                           bash-b-4.2.3-3.centos7.x86_64.rpm

                      bash-devel-4.2.3-3.centos7.x86_64.rpm //开发包

 

  OS Vendor: 系统发行商提供的包


3.获取rpm包的途径

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

           镜像:

                   http://mirrors.163.com

                   http://mirrors.sohu.com

      2、项目的官网

                   源代码

                   rpm

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

                    http://rpmfind.net

                    http://rpm.pbone.net

 

      可靠的途径:EPEL

                   Fedora-EPEL

 

      rpm包的合法性验正:

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

                   来源合法性

                   包的完整性

 

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

        验正过程:

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

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

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



4.rpm程序包的安装/卸载/更新/查询/校验/库重建

4.1  rpm程序包的安装    

rpm [option]/path/to/package_file

        -i: install

        -v:显示详细信息

        -vv:

        -vvv:

        -h: %表示安装进度

        组合选项:-ivh

         --test: 仅作测试,有真正执行安装

 

  如果依赖于其它包:

        1、解决依赖关系

        2、忽略依赖关系

        能安装上,但有可能无法运行;

        --nodeps

 

   重新安装:

         --replacepkgs

 

    如果原有配置文件作了修改,很有可能不执行替换,而是将应该安装生成的配置文件重命名为 .rpmnew

 

4.2 rpm程序包的卸载

    rpm [option]package_name

         -e: erase

 

    如果被其它包所依赖:

          1、将依赖于此包的所有包一并卸载

          2、忽略依赖关系

             能卸载,但依赖于此包程序包可能会运行不正常;

             --nodeps

 

    如果包的配置文件安装后曾被改动过,卸载时,此文件将不会卸载,而是被重命名并保留,例如

warning: /etc/zprofile saved as /etc/zprofile.rpmsave

 

 

4.3 rpm程序包的升级

      新版本替换老版本

      rpm [option]/path/to/package_file

      1、升级或安装

            -Uvh

      2升级(一定要有老版本)

              -Fvh

                  --force: 强制升级

 

    注意:不应该对内核执行升级操作,而是安装。系统允许多内核并存

 

4.4 rpm程序包的查询

     1查询某包是否安装

             rpm -q package_name...

 

     2查询所有已经安装的包

             rpm -qa

             按条件过滤:rpm -qa | grep'PATTERN'

 

     3、查询包的描述信息

              rpm -qi package_name

      

     4、查询某包安装生成了哪些文件

              rpm -ql package_name

 

             (1) 查询某包安装生成了哪些配置文件

              rpm -qc package_name

 

             (2) 查询某包安装生成了哪些帮助文件

              rpm -qd package_name

 

             (3) 查询程序包的相关脚本

               rpm -q--scripts package_name

 

     脚本有四类:

               preinstall:安装前脚本

               postinstall:安装后脚本

               preuninstall:卸载前脚本

               postuninstall:年前后脚本

 

     5查询某文件是由哪个包安装生成的

        rpm -qf /path/to/some_file

 

    6、对尚未安装的包执行查询

                 rpm [option]/path/to/package_file

                      -qpi

                      -qpl

                      -qpc

                      -qpd

 

4.5 rpm程序包的校验

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

                 rpm -Vpackage_name

                  S file Size differs

                  M Mode differs (includes permissions andfile type)

                  5 digest (formerly MD5 sum) differs

                  D Device major/minor number mismatch

                  L readLink(2) path mismatch

                  U User ownership differs

                  G Group ownership differs

                  T mTime differs

                  P caPabilities differ

 

                 某属性无变化,显示为.

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

 

           前提:在当前系统上导入包的制作者的公钥

                 导入:

                      rpm --import/path/to/key_file

 

                      # rpm -qagpg-pubkey*

                      显示所有已经导入的gpg格式的公钥

 

                      # rpm -qigpg-pubkey-NAME

                      显示密钥的详细信息

 

                 检查包:安装过程中会自动执行

 

                 手动检查:

                      rpm -K/path/to/package_file

                      rpm--checksig /path/to/package_file

 

                            不检查包完整性:

                                  rpm-K --nodigest

                            不检查来源合法性:

                                  rpm-K –nosignature

     

4.6 rpm程序包的数据库重建

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

 

           重建:

                 rpm --initdb:初始化

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

 

                 rpm --rebuilddb: 重建

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

 

    

    总而言之,RPM程序包设计的功能如下:安装、卸载、查询、升级、校验、公钥导入、合法性验正、库重建,新手学习整理,若有错误或遗漏还望指正。