RPM的使用

概述

RPM 是 Red Hat PackageManager 的缩写,本意是Red Hat 软件包管理,顾名思义是Red Hat 贡献出来的软件包管理;在Fedora 、Redhat、Mandriva、SuSE、YellowDog等主流发行版本,以及在这些版本基础上二次开发出来的发行版采用;

RPM包里面都包含什么?里面包含可执行的二进制程序,这个程序和Windows的软件包中的.exe文件类似是可执行的;RPM包中还包括程序运行时所需要的文件,这也和Windows的软件包类似,Windows的程序的运行,除了.exe文件以外,也有其它的文件;

一个RPM 包中的应用程序,有时除了自身所带的附加文件保证其正常以外,还需要其它特定版本文件,这就是软件包的依赖关系;依赖关系并不是Linux特有的,Windows操作系统中也是同样存在的;比如我们在Windows系统中运行3D游戏,在安装的时候,他可能会提示,要安装Direct 9 ;Linux和Windows原理是差不多的。

一 命名格式

源代码:name-VERSION.tar.gz

      VERSION: major.minor.release

例子:

        nginx-1.8.0.tar.gz

        1:是主版本号 

        8:是次版本号 

        0:是发行号

rpm包命名方式:

        name-VERSION-release.arch.rpm

        VERSION:major.minor.release

        release.arch:rpm包的发行号

        archetecture(架构或平台):i386,x64(amd64), ppc, noarch

例子:

        bash-4.1.2-33.el6.x86_64

        4:是主版本号

        1:是次版本号

        2:修订

        33:是第几次发布版本

        el6:适用于RHEL6或兼容Centos6

        x86_64:CPU架构系统平台

        el6 :enterprice linux  6   RHEL 6或centos 6

        el5: rhel5

        

拆包:主包和支包

        主包:name-VERSION-release.arch.rpm

        支包:name-function-VERSION-release.arch.rpm

        function:devel(开发), utils(工具程序), libs(库文件), …

包之间存在依赖关系

比如说x包依赖Y包 但是Y包又依赖z包

前端工具:自动解决依赖关系;

        yum:rpm包管理器的前端工具;

        apt-get (apt-cache):deb包管理器的前端工具;

        zypper:suse的rpm管理器前端工具;

        dnf:Fedora 22+系统上rpm包管理器的前端工具;

        

二 程序包管理器的组成:

程序包管理:

功能:将编译好的应用程序的各组成文件打包一个或几个程序包文件,从而方便快捷地实现程序包的安装、卸载、查询、升级和校验等管理操作;

1、程序的组成组成清单 (每个包独有)

         文件清单

         安装或卸载时运行的脚本

2、数据库(公共)

         程序包名称及版本

         依赖关系;

         功能说明;

         安装生成的各文件的文件路径及校验码信息;


rpm包的数据库文件:/var/lib/rpm/

blob.png

三 获取程序包的途径:

                1 系统发版的光盘或官方的服务器;

                         CentOS镜像:

                         http://mirrors.aliyun.com

                         http://mirrors.sohu.com

                         http://mirrors.163.com

                        

                2 项目官方站点 例如:http://www.zabbix.com/

                3 第三方组织:

                         Fedora-EPEL

                         搜索引擎:

                         http://pkgs.org

                         http://rpmfind.net

                         http://rpm.pbone.net

                4 自己制作rpm包

建议:安装前请务必注意以下几点:

                1、检查其合法性;

                2、来源合法性;

                3、程序包的完整性;

什么是EPEL

  如果既想获得 RHEL 的高质量、高性能、高可靠性,又需要方便易用(关键是免费)的软件包更新功能,那么 Fedora Project 推出的 EPEL(Extra Packages for Enterprise Linux)正好适合你。EPEL(http://fedoraproject.org/wiki/EPEL)是由 Fedora 社区打造,为 RHEL 及衍生发行版如CentOS、Scientific Linux 等提供高质量软件包的项目。


四 CentOS系统上rpm命令管理程序包

 安装、卸载、升级、查询、校验、数据库维护

rpm命令:

        rpm [OPTIONS]  [PACKAGE_FILE]

        安装:-i, –install

        升级:-U, –update, -F, –freshen

        卸载:-e, –erase

        查询:-q, –query

        校验:-V, –verify

        数据库维护:–builddb, –initdb

提示:

-Fvh是升级RPM包的命令,它表示如果后面的软件包没有安装在系统上,则这个软件包不会安装。也就是说只有安装到系统上的软件包才会被升级。

    安装:

            rpm {-i|–install} [install-options]PACKAGE_FILE …

             -v: verbose

             -vv: 更详细的输入

             -h: 以#显示程序包管理执行进度;每个#表示2%的进度

            

             rpm -ivh PACKAGE_FILE …

                 [install-options]

             –test: 测试安装,但不真正执行安装过程;dry run模式;

             –nodeps:忽略依赖关系;

             –replacepkgs: 重新安装;

             –nosignature: 不检查来源合法性;

             –nodigest:不检查包完整性;

            

             –noscipts:不执行程序包脚本片断;

                 %pre: 安装前脚本; –nopre

            

                 %post: 安装后脚本; –nopost

                 %preun: 卸载前脚本; –nopreun

                 %postun: 卸载后脚本;  –nopostun

示例1:

 rpm -ivh php-bcmath-5.3.3-22.el6.x86_64.rpm

blob.png

这个有报错一个是KEY 那个没有关系,下面这个报错是依赖关系问题

 rpm -ivh –nodeps php-bcmath-5.3.3-22.el6.x86_64.rpm  (–nodeps:忽略依赖关系 就可以安装上了,但是不建议使用)

blob.png

    升级与降级:

            rpm {-U|–upgrade} [install-options]PACKAGE_FILE …

            rpm {-F|–freshen} [install-options]PACKAGE_FILE …

             

            -U:升级或安装,如果事先安装了老版本包则升级,没有安装老版本包则安装此包

            -F:升级,如果事先没有安装老版本的包则不升级

            –oldpackage:降级;

            –force:强制升级;

注意:

    1.不要对内核做升级操作;Linux支持多内核版本并存,因此,直接安装新版本内核;

    2.如果某原程序包的配置文件安装后曾被修改过,升级时,新版本的程序提供的同一个配置文件不会覆盖原有版本的配置文件,而是把新版本的配置文件重命名(FILENAME.rpmnew)后提供;

    查询:

        rpm {-q|–query} [select-options][query-options]

         

        [select-options]

        -a, –all:查询所有已经安装过的包;

        -f  FILE:查询指定的文件由哪个程序包安装生成;

        -p, –package PACKAGE_FILE:用于实现对未安装的程序包执行查询操作;

        –whatprovides CAPABILITY:查询指定的CAPABILITY由哪个程序包提供;查询提供了 CAPABILITY 功能的软件包。

        –whatrequires CAPABILITY:查询指定的CAPABILITY被哪个包所依赖;查询所有需要 CAPABILITY 功能才能运行的软件包。

 

        [query-options]

        –changelog:查询rpm包的历史变更信息changlog;

        -l, –list:程序安装生成的所有文件列表;

        -i, –info:程序包相关的信息,版本号、大小、所属的包组,等;

        -c, –configfiles:查询指定的程序包提供的配置文件;

        -d, –docfiles:查询指定的程序包提供的说明文档;

        –provides:列出指定的程序包提供的所有的CAPABILITY;

        -R, –requires:查询指定的程序包的依赖关系;

        –scripts:查看程序包自带的脚本片断;

示例2:查看所有已经安装的软件包

blob.png

示例3:查询某个软件是否已经安装

blob.png

示例4:查询某一文件属于哪个软件包

blob.png

示例5:查询一个已经安装的软件包包含哪些文件

blob.png

示例6:查询一个已经安装的软件包的详细信息

blob.png

示例7:查看某一个已经安装的软件包的配置文件有哪些

blob.png

示例8:查看一个已经安装的包自带的说明说明文档

blob.png

示例9:查询一个已经安装的软件包依赖于什么软件包

blob.png

示例10:查询一个软件包中的脚本片段

blob.png

    卸载:

            rpm {-e|–erase} [–allmatches] [–nodeps] [–noscripts]

            [–notriggers] [–test] PACKAGE_NAME …

    校验:

            rpm {-V|–verify} [select-options][verify-options]

             

            -V:后面接软件名称,若该软件所含的文件被改动过才会列出来

            -Va:列出目前系统上面所有可能被改动过的文件

            -Vp:后面加的是文件名称,列出该软件内可能被改动过的文件

            -Vf:列出某个文件是否被改动过

             

            S file Size differs:文件的容量大小是否被改变

            M Mode differs (includespermissions and file type):文件的类型或文件的属性(rwx)是否被改变

            5 digest (formerly MD5 sum)differs:MD5这一种指纹码的内容已经不同

            D Device major/minor numbermismatch:设备的主/次代码已经改变

            L readLink(2) path mismatch:Link路径已被改变

            U User ownership differs:文件的所有者已被改变

            G Group ownership differs:文件的所有属用户组已被改变

            T mTime differs:文件的创建时间已被改变

            P capabilities differ:capabilities已经改变

提示:当一个软件包的文件被被动过,那么它的显示就会是:

            SM5DLUGTP c filename

            c表示文件的类型

             

            c:config file:设置文件

            d:documentation:文档文件

            g:ghost file:“鬼”文件,通常是该文件不被某个软件所包含,较少发生

            l:linense file:授权文件

            r:read line:自述文件

示例11:查看某个已经安装的软件包中的哪些文件被改动过,没有显示就代表没有被改动。

blob.png

示例12:列出系统上所有的rpm包中的文件中被改动的文件有哪些(针对所有rpm包中的所有文件查询)

blob.png

示例13:查看某个文件是否被改动过,没有改动就不显示(这个文件一定要属于某个rpm包才行)

blob.png

包来源合法性验正及完整性验正:

    1.完整性验正

    2.来源合法性验正

获取并导入信任的包制作者的密钥:

导入所需要公钥:

        对于CentOS发行版来说:rpm–import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6

    验正:

        1.安装此组织签名的程序时,会自动执行验正;

        2.手动验正:rpm -K PACKAGE_FILE

例子14:手动验证 php-bcmath-5.3.3-22.el6.x86_64.rpm

blob.png

rpm包数据库重建:

        rpm管理器数据库路径:/var/lib/rpm/

        查询操作就是通过此处的数据库进行;

        rpm {–initdb|–rebuilddb} [–dbpathDIRECTORY] [–root DIRECTORY]

            –initdb:如果事先不存在数据库,则新建之;否则,不执行任何操作;

            –rebuilddb:重新构建,通过读取当前系统上所有已经安装过的程序包进行重新创建;

            –dbpath:指明要创建数据库的目录

例子14:如果rpm数据库系统损坏可以使用此命令重建

blob.png    

原创文章,作者:liangkai,如若转载,请注明出处:http://www.178linux.com/11369

评论列表(1条)

  • stanley
    stanley 2016-02-14 09:51

    已置顶