Linux中rpm包的管理

1.相关概念  

     1.程序包管理器功能:1.应用程序打包:有特定格式 ; 2. 对兼容的程序包进行管理: 
           【注意:制作成的二进制格式程序与平台有相关性,所以,通常需要制作各种流行平台所兼容的版本】

     2.C程序包编译到机器识别的过程:   源代码(文本)--> 预处理 --> 编译 --> 汇编 --> 链接 

         编译时,根据是否将被调用的库文件直接打包进生成的二进制程序文件,编译方式可分为两类:
                    动态链接:不将被调用的库文件打包进来,而是运行时去装载它;
                    静态链接:将被调用的库文件打包进来,将来运行时,可自己完全独立运行,而无须外部库文件运行

      3.程序包:
          源代码:appname-VERSION.tar.gz, appname-VERSION.tar.bz2, appname-VERSION.tar.xz
          包管理器(rpm)格式:   appname-VERSION-RELEASE.ARCH.rpm 

           常见的包管理器两类:

          1. .deb: 主要是Debian系列采用的

           2. .rpm: 全名叫Red hat Package Manager, 也作RPM is Package Manager


      4.rpm包命名格式:appname-VERSION-RELEASE.ARCH.rpm 
        
               VERSION:
                    major: 主版本号
                    minor: 次版本号
                    release: 发行号
               RELEASE: 包自身的修订号;有时候还会包含适用于的OS信息;比如bash-4.3.2-2.centos6.x86_64.rpm中的2.centos6
               ARCH: 适用的平台
                    x86: i386, i486, i586, i686
                    x86_64: x86_64, amd64
                    powerpc: ppc
                    noarch: 跟平台无关;


       5.rpm包中的两种分包机制:
                1.核心包,主包:命名与源项目名称一致;eg: bash-4.3.2-2.centos6.x86_64.rpm 
                    
                2.子包(支包):命令为源项目名称后附加支包中的文件提供的功能组成。eg:  bash-devel-4.3.2-2.centos6.x86_64.rpm 
                   

      6.linux生产环境中国常用的获取程序包的途径:
          1、系统的发行光盘镜像或官方站点(或站点镜像服务器);

               挂载光盘:# mount -r /dev/cdrom /media/cdrom 
                常用官方站点,镜像:
                    搜狐站点: mirrors.sohu.com
                     网易站点:mirrors.163.com
                     阿里站点:mirrors.aliyun.com

          2、程序包的官方站点

          3、第三方组织:epel
               教室:http://172.16.0.1/fedora-epel/6/

          4、搜索引擎
               http://rpmfind.net
               http://rpm.pbone.net
               http://pkgs.org

           【注意:安装包之前一定要验正的其合法性(即来源合法性和包的合法性)】
            
            

     7. 脚本有四类,即:


    •  preinstall: 安装过程开始之前执行的脚本;

    • postinstall: 安装过程完成之后执行的脚本;

    •  preuninstall: 卸载开始之前执行的脚本 ;

    •  postuninstall: 卸载过程完成之后执行的脚本;

   

     
      2.CentOS系统上程序rpm包管理相关命令(安装、升级、卸载、查询、检验)

    

      1.rpm的安装

           #rpm {-i|--install} [install-options] PACKAGE_FILE1...

               选项:

                     -h: hash,以#来表示安装进度;

             -v, --verbose:显示安装过程中的详细信息;
                   -vv(-vvv):显示安装更详细过程
             --nodeps:忽略依赖关系:(有 副作用,能安装成功,但未必能成功运行;)
            --replacepkgs:覆盖安装:重新安装并覆盖原有的文件 
             --force:   强制安装: 
             --test:不执行真正的安装过程,而仅报告依赖关系及冲突信息等;
              【注意:安装时常用的组合: -ivh, -ivvh】

         2. RPM的升级:(安装中的选项一样在升级中可以用,例如:--test,--nodeps,--force,--oldpackage:降级到旧版本)

           #rpm {-U|--upgrade} [install-options] PACKAGE_FILE ...

                选项:

                    -U: 升级或安装

           #rpm {-F|--freshen} [install-options] PACKAGE_FILE ...

                  选项:

                         -F:升级

           【注意:常用选项组合:-Uvh, -Fvh】

           【注意:一定不要对内核执行升级;Linux允许多内核共存,所以,可以直接安装多个不同版本内核;】

           【注意:如果程序包的配置文件安装后曾被修改,升级时,新版本的文件不会覆盖老版本的配置文件,而把新版本的配置文件重命名(加后缀.rpmnew)后保存;】

    

     3.RPM包的卸载( 移除已经安装的程序包

           #rpm {-e|--erase} [--allmatches] [--nodeps] [--test] PACKAGE_NAME ...

                    (简单用法:rpm -e PACKAGE_NAME...

                  选项:

               --nodeps:忽略依赖关系;
               --test: 测试卸载;dry-run模式;
               --allmatches: 如果一个程序包同时安装多个版本,则此选项一次全部卸载之;

          注意:如果程序包的配置文件安装后曾被修改,卸载时,此文件通常不会被删除,而是被重命名(加后缀.rpmsave)后留存;

      4.rpm查询(   查询某包是否已经安装,以及检查安装的所有包;还可以查看某包的详细信息;)

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

          [select-options]

               1、查询某包或某些包是否安装:# rpm -q PACKAGE_NAME... 

            

               2、查询已经安装的所有包:# rpm -qa 

            

               3、查询某文件是由哪个包安装生成:# rpm -qf /PATH/TO/SOMEFILE 

            

               4、查询尚未安装的包文件的相关信息( -p): # rpm -qpi PACKAGE_FILE

          [query-options]

               1、查询某包的简要说明信息:

                    # rpm -qi PACKAGE_NAME

               2、查询某包安装生成的文件列表:

                     #rpm -ql PACKAGE_NAME

               3、查询某包安装完成后生成的所有配置文件:

                     #rpm -qc PACKAGE_NAME

               4、查询某包安装完成后生成的所有帮助文件:

                     #rpm -qd PACKAGE_NAME

               5、查看某包制作时随版本变化的changelog信息:

                     #rpm -q --changelog PACKAGE_NAME

               6、查询某包提供的capabilities:

                     #rpm -q --provides PACKAGE_NAME

               7、查询某包所依赖的capabilities:

                     #rpm -q --requires PACKAGE_NAME

               8、查询某包安装或卸载时执行脚本:

                     #rpm -q --scripts PACKAGE_NAME

                         

     5.RPM的校验( 即查询包安装之后生成的文件是否发生了改变)

           #rpm {-V|--verify} [select-options] [verify-options](常见用法: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


     1. 程序包的合法性验正:
           1.来源合法:

                即程序包由我们信任的制作者提供, 通常依赖于制作者的数字签名,其中签名是作者使用自己的私钥加密程序包的特性码进行的; 

               
           2.内容合法:
                即程序包未被二次修改;完整性校验成功 , 通常依赖于制作者提供的程序特征码; 
                验正方式:安装者用同样的特征码提取算法提取程序包的特征码,并与原作者提供的相比较;

      2. 验正其光盘中程序包的来源及完整性:
               # rpm --import /path/to/RPM-GPG-KEY-FILE

               例如:# rpm --import RPM-GPG-KEY-CentOS-6

               验正:#rpm {-K|--checksig} PACKAGE_FILE
                    --nosignature: 不检查来源合法性
                    --nodigest: 不检查完整性

      6.rpm管理器数据库数据库路径在:/var/lib/rpm目录下)

           1.重建数据库:

                #rpm {--initdb|--rebuilddb} [-v] [--dbpath DIRECTORY]

                    选项:

               --initdb: 初始化数据库,即数据库完全不存时,可新建之;

               --rebuilddb: 无论当前数据存在与否,都会直接重建此库;



本文出自 “Jason” 博客,请务必保留此出处http://tanjie.blog.51cto.com/10027618/1631960

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。