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

(0)
上一篇 2016-02-14 09:49
下一篇 2016-02-14 09:52

相关推荐

  • GNU awk工具的使用解析

    GNU awk: 简介:awk是一个数据处理工具。它比较倾向于将一行分成多个“字段”来处理。所以,awk比较适合处理小型数据。 gawk – pattern scanning and processing language 实现原理: 基本用法:gawk [options] 'program' FILE program:PAT…

    Linux干货 2016-09-21
  • Linux运维不想早死的方法 一

    Linux运维不想早死的方法 一 为了提高工作效率,减少工作时间,爱惜生命,远离辐射;务必做好以下几点: 1,一定用快捷键         这里简单的说下几个常用的快捷按键。 Ctrl + l     清屏,相当于clear命令。 Ctrl…

    Linux干货 2017-03-26
  • LAMP运行环境搭建及部署php程序软件

    前言     Linux+Apache+MySQL+PHP是大多数web服务器的运行环境,能熟练配置此运行环境是每个运维的必备基本技能,本文以安装MySQL管理工具PHPmyadmin以及博客软件wordpress为例,演示编译安装LAMP运行环境的过程。 一、实验拓扑图 二、安装步骤 2.1 编译安装Apache h…

    2015-11-26
  • Linux软件包管理

      在我们的运维工作,总是避免不了安装某些软件,或者编译安装某些软件,我们知道操作系统当中的程序都是有程序员通过开发工具开发的来,程序员直接编写的纯文本的文档我们称之为源代码,但我们的计算机只能识别二进制程序,那么必须要将源代码变成计算机能识别的二进制程序,这里需要通过编译器来进行编译,将源码转换成二进制程序,再通过安装即可。 还有一类程序就是二进…

    Linux干货 2016-08-24
  • 马哥教育网络班21期-第五周课程练习

    1、显示/boot/grub/grub.conf中以至少一个空白字符开头的行; # grep -E "^[[::space]]\+.*" /boot/grub/grub.conf 2、显示/etc/rc.d/rc.sysinit文件中以#开头,后面跟至少一个空白字符,而后又有至少一个非空白字符的行;…

    Linux干货 2016-08-08
  • 手动自制Mini Linux

        linux系统内核非常的精简,而且基于一切皆文件的思想,使得我们可以再现有系统上挂载一个空硬盘,利用现有系统编译一个内核和相关程序文件并拷贝到空硬盘上。我们就可以用空硬盘来单独运行一个精简的linux系统,这对于依赖于注册表的windows系统来说是不可能实现的。本文简要介绍一下一个mini linux的安装制…

    Linux干货 2016-05-03

评论列表(1条)

  • stanley
    stanley 2016-02-14 09:51

    已置顶