Linux――RPM包管理

    啥是RPM?

    原来RPM就是redhat package manager的缩写,这一文件格式名称虽然打上了RedHat的标志,但是其原始设计理念是开放式的,后来采取名称采取了递归缩写的方式,即:RPM Package Manager(RPM 软件包管理器)。现在包括OpenLinux、S.u.S.E.以及Turbo Linux等Linux的分发版本都有采用,可以算是公认的行业标准了。注:据说RPM文件在Linux系统中的安装最为简便


    RPM是用来干嘛的?

    软件包管理器嘛,听名字就知道是管理软件包的啊。也就是一种用于互联网下载包的打包及安装工具,它包含在某些Linux分发版中。它生成具有.RPM扩展名的文件。主要功能呢就是:打包、安装、卸载、升级、校验、数据库管理。


     RPM包的名字是啥样的?

    在用之前呢,要先明白RPM包的命名格式,不然废了半天劲下载下来的包,竟然发现不可用那就傻眼了。

     name-version-relase.arch.rpm

        name:就是包的名称

        version:major.minor.release 版本号

        relase:RPM包自身的发行号,与程序源码的发行号无关,仅用于标识RPM包不同制作

            的修订;同时,relase还包含此包适用的OS。例如:bash-4.2.3-3.centos5

        arch:标识RPM包适用的硬件平台

            x86: i386, i486, i586, i686等;

            x86_64: x86_64

            powerpc: ppc

            noarch: 依赖于虚拟机

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

还有一点需要注意的是一个程序可能有很多的功能,比如常用的6个,特殊的2个,还包含二次开发的相关功能,我们需要的可能就是一些常用的功能,那些非常用的我们能不能不安装呢?其实RPM包还有一种分包机制;

        核心包(也就是主包):命名与源程序一样

            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


    获取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包的合法性校验

    我们知道现在无聊的骇客越来越多,那怎么保证我们从网站下载到我们PC上的数据没有在路上遭遇埋伏呢?对头,就是对下载到的RPM包进行合法性校验。一般情况下包的作者制作完成之后都会附加数字签名于包上,用于确定包的来源合法性及完整性。

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

    验正过程:

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

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

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


    RPM包的安装

    好的,经过前面的努力,我们终于拿到了我们想要的RPM包,那么要怎么用呢?听俺慢慢道来~

    安装程序包:

     rpm [option] /path/to/package_file

        -i: install

        -v:显示安装信息

        -vv:更详细

        -vvv:更更详细

        -h: 显示安装进度

   

      组合选项:-ivh  安装时显示安装信息及进度条

        

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


    如果安装时提示依赖于其它包的解决方法:

     1、解决依赖关系

     2、忽略依赖关系

       使用 --nodeps 忽略依赖关系,但是安装上后可能无法运行。


    重新安装:

    --replacepkgs

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

    卸载程序包:

    rpm [option] package_name

    -e: erase

    如果被其它包所依赖:

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

     2、忽略依赖关系

       使用 --nodeps 忽略依赖关系,但是所有依赖于此包的程序可能会无法正常运行。


    注意:如果包的配置文件安装后曾被改动过,卸载时,此文件将不会卸载,而是被重命名并保留,例如:warning: /etc/zprofile saved as /etc/zprofile.rpmsave

    升级程序包:

    rpm [option] /path/to/package_file

     1、升级或安装

        -Uvh

     2、纯升级

        -Fvh


    升级版本后可能会引起版本冲突等;

      可使用 --force 强制升级

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


    EPM包的查询操作

    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

    校验:

    用于检查包安装生成的文件属性是否发生变化,通过此信息可查看已安装的程序有无被人修改过,防黑必备。

     rpm -V package_name

          S file Size differs  

          M Mode differs (includes permissions and file 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

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

     # rpm -qa gpg-pubkey*

    显示密钥的详细信息

      # rpm -qi gpg-pubkey-NAME

    

    安装过程中会自动执行可以检查,想手动检查当然也是可以的。

    手动检查:

     rpm -K /path/to/package_file

     rpm --checksig /path/to/package_file

    不检查包完整性:

     rpm -K --nodigest

    不检查来源合法性:

      rpm -K --nosignature


    数据库重建

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

    重建:

     rpm --initdb:初始化

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

     rpm --rebuilddb: 重建

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


你可能感兴趣的:(linux,rpm,rpm包管理)