设为首页 收藏本站
查看: 715|回复: 0

[经验分享] rpm包管理功能全解(CentOS系统)

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2015-12-24 09:28:01 | 显示全部楼层 |阅读模式
rpm包管理功能全解

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

           1、程序包的组成清单(每个程序包都单独实现)
                                文件清单
          安装或卸载时运行的脚本
                    2、数据库(公共)
                 程序包的名称和版本;
                 依赖关系;
                 功能说明;
             安装生成的各文件的文件路径及校验码信息;
             等等等..

           rpm包的数据库存放在/var/lib/rpm/(CentOS中存储rpm包数据库的路径)如图:

wKioL1Z6DWmS3jykAAAdAU36Pxc365.jpg
获取程序报包的各种途径:                           
                 (1)系统发行版的光盘或官方的文件服务器(或镜像站点):
                   http://mirrors.aliyun.com,
                   http://mirrors.sohu.com,
                   http://mirrors.163.com
                     ……..
                 (2)特定项目的官方站点
                    httpd.apache.org
                    www.zabbix.com
                 (3)第三方组织:
                        (a)  EPEL
                        (b)搜索引擎
                            http://pkgs.org
                            http://rpmfind.net
                            http://rpm.pbone.net
                 (4)自己动手制作      

                 防止程序包有后门建议:检查其合法性
                       来源合法性;
                       程序包的完整性;




————rpm命令管理程序包的基本功能:

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


    rpm命令:rpm [options] [package_file]

                                   [OPTIONS]:
                 安装:-I ,--install
                 升级:-U, --UPDATE, -F,--freshen
                 卸载:-e,--erase
                 查询:-q,--query
                 校验:-V, --verify
                 数据库维护:--builddb,--initdb



安装:
        rpm {-i|--install} [install-options]PACKAGE_FILE ...
           GENERAL OPTIONS(通用选项):
-v:verbose,详细信息
               -vv:更详细的输出
   [install-options](安装选项)
                -h:hash marks输出进度条;每个#表示2%的进度;
通常使用:rpm  -ivh  PACKAGE_FILE ...  如图: wKiom1Z6EXzAC0u7AAAeP2Ay4L4624.jpg       
             --test:测试安装,检查并报告依赖关系及冲突消息等,并没有真正的安装;
                --nodeps:忽略依赖关系;不建议;(使用此选项虽然可以安装该程序包,但并不一定会运行,因为并没有安装有依赖的安装包。)
                                                       --replacepkgs:重新安装  如图:
   wKiom1Z6EamyP2aPAAAenesnnEs855.jpg

                  注:rpm包可以自带四类脚本
  •              preinstall:安装过程开始之前运行的脚本,%pre
  •              postinstall:安装过程完成后安装的脚本,%post
  •              preuninstall:卸载过程真正开始执行之前运行的脚本,%preun
  •              postuninstall:卸载过程完成之后执行的脚本,%postun

  •                     --noscripts:都不执行
  •              --nopre:不执行安装过程开始之前运行的脚本
  •              --nopost:不执行安装过程完成后安装的脚本
  •                     --nopreun:不执行卸载过程真正开始执行之前运行的脚本
  •              --nopostun不执行卸载过程完成之后执行的脚本


       --nosignature:不检查包签名信息,不检查来源合法性;
不使用会有警告提示没有秘钥 如图:
wKiom1Z6EgKTR3QPAAALYcQtQiM893.jpg
使用后将不会检查签名信息,如图:
wKioL1Z6EjOhkxZbAAAVG5Obqk8121.jpg
       --nodigest:不检查包完整性信息;


升级:
                   rpm {-U|--upgrade} [install-options] PACKAGE_FILE
rpm {-F|--freshen}[install-options] PACKAGE_FILE ...
-U:升级或安装;(没有老版本直接安装)
       -F:只升级           
rpm -Uvh PACKAGE_FILE ... 或 rpm  -Fvh PACKAGE_FILE ..
       --oldpackages:降级                                                --force:强制升级(升级后可能会影响依赖关系);
                      对zsh进行升级会显示升级版本和清除的版本,如图
wKiom1Z6EvqCfQbNAAAd6tXcQUg754.jpg


注意:
(1) 不要对内核做升级操作;Linux支持多内核版本并存,因此,直接安装新版本内核;
(2) 如果某原程序包的配置文件安装后曾被修改过,升级时,新版本的程序提供的同一个配置文件不会覆盖原有版本的配置文件,而是把新版本的配置文件重命名(FILENAME.rpmnew)后提供;

卸载:
    rpm {-e|--erase}[--allmatches] [--nodeps] [--noscripts] [--test] PACKAGE_NAME
                     (注:卸载时指定的是包名)
             --allmatches:卸载所有匹配指定名称的程序包的各版本;
             --nodeps:忽略依赖关系
             --test:测试卸载,dry run模式
                                 卸载我们刚装的zsh只需指定安装包名称,不需要路径,如图
            wKioL1Z6E4vRAnmgAAAVL0j18So466.jpg

查询:
     rpm {-q|--query}[select-options] [query-options]   
         [select-options]:
          PACKAGE_NAME:查询指定的程序包是否已经安装,及其版本信息
  没有安装如图:
wKiom1Z6E8OTUqPhAAAIZ9X2N3w373.jpg
    安装过如图:
wKiom1Z6E9Ww1xhVAAAIa6BXpbU017.jpg
            -a, --all:查询所有已经安装过的包:(通常后面跟上正则表达式查询)
             如图:
          wKioL1Z6FBiShqr9AAAJdosF28M183.jpg
            -f  FILE:查询指定的文件由哪个程序包安装生成;
          查询/etc/issue文件是由那个安装包生成的,如图:
          wKiom1Z6FCyQKZwJAAAKtVFBN4w159.jpg                
           -p,--package PACKAGE_FILE:用于实现对未安装的程序包执行查询操作;
      如图: wKiom1Z6FF3Q_cbZAAAZH5CsCXo195.jpg                     
            --whatprovidesCAPABILITY:查询指定的CAPABILITY由哪个程序包提供;
              查询zsh是有那个程序包提供 如图:
            wKioL1Z6FJqhBpK6AAALzDZSDt0690.jpg   
           --whatrequiresCAPABILITY:查询指定的CAPABILITY被哪个包所依赖;
               查询bash由那些安装包依赖:如图
          wKioL1Z6FLnBEqCTAAAiV5Frzbo647.jpg       
       [query-options]
          --changelog:查询rpm包的changelog;
               查询dash的changelog  如图:
wKioL1Z6FTmx5X7sAACIJHdEC7U896.jpg
          -l, --list:程序安装生成的所有文件列表;
            查询dash安装生成的所有文件列表,如图
         wKiom1Z6FUmjnFJgAAAMWh-ogII279.jpg
          -i, --info:程序包相关的信息,版本号、大小、所属的包组,等;
           查询zsh程序包相关的信息版本号、大小、所属包租的信息  如图
wKioL1Z6FX2RQ9lrAABttZ81Svo167.jpg
          -c,--configfiles:查询指定的程序包提供的配置文件;
              查询zsh程序包提供的配置文件,如图:
wKioL1Z6FZbybhXRAAAXTRFv6UA110.jpg
          -d,--docfiles:查询指定的程序包提供的文档;
              查询zsh程序包提供的文档:如图
wKioL1Z6Fa_wTQCxAACXwPcjUcA672.jpg
         --provides:列出指定的程序包提供的所有的CAPABILITY;
           查询bash程序包提供的capability:如图
          wKiom1Z6FbSSHaVyAAAPy3_IotU995.jpg
         -R,--requires:查询指定的程序包的依赖关系;
            查询bash程序包的依赖关系:如图
      wKiom1Z6FdLyhNyMAABRhcZS8TE260.jpg
          --scripts:查看程序包自带的脚本片断;
              查询bash程序包的脚本片段:如图
      wKiom1Z6Fe_yJTcaAAAu2APOwIw488.jpg


查询用法总结:
    -qi PACKAGE(查询安装包信息) -qf FILE(查询指定的文件由那个安装包组成), -qc PACKAGE(查询指定的安装包的配置文件),-ql PACKAGE(查询指定的安装包生成的所有文件),-qd PACKAGE(查询指定的安装包提供的文档)
    -qpi PACKAGE_FILE(查询未安装的程序包的信息), -qpl PACKAGE_FILE(查询未安装的程序包可以生成的所有文件), -qpc PACKAGE_FILE,(查询未安装的程序包的配置文件). -qpd PACKAGE(查询未安装程序包提供的文档)


校验:
校验程序包安装完之后有没有被更改过
rpm {-V|--verify} [select-options][verify-options]   
如果安装完成之后没有做出过更改则不会提示信息,当我更改zsh了生成的列表里面随意的一个文件之后再做出校验系统就会有所提示,如图:
wKioL1Z6Fn_jmjHsAAALhQJ-IA0393.jpg

左边的提示符显示的信息:每个”点”字符表示一种属性,所表示的意义如下
S  file Sizediffers:大小
       M Mode differs (includes permissions andfile type):权限
       5 digest (formerly MD5 sum) differs:完整性内容
       D Device major/minor number mismatch:主次设备号不匹配
       L readLink(2) path mismatch:readlink路径不匹配
       U User ownership differs:属主更改
       G Group ownership differs:属组更改
       T mTime differs:最近的时间戳更改
       P  caPabilitiesdiffer:某些性能被更改
如图: wKiom1Z6FqGhN6MPAAABmMgkt6M441.jpg ,S表示大小被改变,5表示数据指纹信息md5被更改,T表示时间戳被更改。

   同时也可以选择那些属性不查询
        [verify-options]         :      
        --nodeps:不校验依赖关系
        --nofiles:不检查文件
       --nodigest:不检查包完整性
       --noscripts:不检查脚本信息
       --nosignature:不检查签名信息      
       --nolinkto:不检查resdlink的路径是否匹配
                --nofiledigest (formerly --nomd5):不检查文件的完整性信息      
           --nosize:不检查大小的改变
           --nouser:不检查属主的变化
           --nogroup:不检查属组   
           --nomtime:不检查时间戳的改变
           --nomode;不检查权限的改变           
           --nordev:不检查相应的文件属性

程序包来源合法性验证:
数字签名:
第一步:制作者进行单向加密定长输出包的特征码
第二步,再利用私钥加密特征码附加到程序包后面,附加到程序包后的加密过的特征码就是数                           字签名,用户拿到程序后利用公钥解密私钥验证来源是否合法。

            完整性验证:
                                用户用公钥解密后得到特征码进行比较验证该包的完整性。
            互联网通过CA获得公钥

CentOS发行版中程序包的公钥存放在/etc/pki/rpm-grp/RPM-GPG-KEY-CentOS-#
导入公钥:rpm  --import  /etc/pki/rpm-grp/RPM-GPG-KEY-CentOS-#
导入之后安装程序包时就不会出现警告NOKEY的信息:如图
    wKioL1Z6Fznz3vBGAAAJw-jpYU0546.jpg
    wKiom1Z6Fz3CRVg1AAAU3Ok_aXo199.jpg
验证:程序包安装时会自动验证。
如果要手动验证:rpm –K PACKAGE_FILE
如图
wKioL1Z6F2LzmZQfAAARX5hItRg984.jpg


rpm数据库:/var/lib/rpm,rpm包安装后生成的所有信息都放在这里
查询操作就是通过此处的数据库进行的。
所以数据库的完整性就非常重要。

获取使用帮助:
         CentOS 6:man rpm
         CentOS 7:man rpmdb

rpm{--initdb|--rebuilddb} [--dbpath DIRECTORY] [--root DIRECTORY]
  --initdb:初始化数据库,当前无任何数据库时可初始化创建一个新的;当前有时则不执行任何            操作;
  --rebuilddb:重新构建,通过读取当前系统上所有已经安装过的程序包进行重新创建。

总结:安装程序包在linux系统中有着至关重要的作用,其中的查询机制更是在各种环境中经常用到,所   以熟练掌握安装程序命令和查询命令是非常有必要的,需要不断的操作积累经验来增强记忆。


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-155547-1-1.html 上篇帖子: RPM包管理功能全解 下篇帖子: fedora下安装配置minidlna
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表