Linux程序包管理(rpm)

程序包:由源代码通过编译成CPU可执行的二进制格式,再把这些文件(二进制程序、库文件、配置文件、帮助文件)组织成为一个或有限几个“包”文件。

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

           CentOS中rpm包的数据库在/var/lib/rpm/


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

对程序包的安装,升级,卸载和查询等管理操作是通过程序包管理器实现


各发行版中的程序包管理器:
debian:dpt, dpkg, 程序包文件标示为以".deb"结尾
redhat:rpm, 程序包文件标示为以".rpm"结尾
S.u.S.E:rpm, ".rpm",
Gentoo:ports

程序包的命名规则:

源代码包:name-VERSION.tar.gz
          VERSION:major.minor.release

      示例:redis-3.0.2.tar.gz

rpm包:name-VERSION-release.arch.rpm 
        VERSION:major.minor.release:程序包的版本号
             release.arch:rpm包的发行号和架构              
示例:redis-3.0.2-1.centos7.x64.rpm 


拆包:源代码安装时可以指定功能,但程序包都是别人或组织以大众需求进行编译而成的,为了避免安装一堆用不到的功能,所以常常是不同功能的文件打包在不同的包内。以主包为基准包含主要的功能,后面就是各种不同的支包(开发包,库包,工具包等等)。                

主包:name-VERSION-release.arch.rpm 
支包:name-function-VERSION-release.arch.rpm (function:devel, utils, libs, ...)
获取程序包的途径:(1) 系统发行版的光盘或官方的文件服务器(或镜像站点):
            http://mirrors.aliyun.com, 
            http://mirrors.sohu.com,
            http://mirrors.163.com 
            (2) 项目的官方站点
            (3) 第三方组织:
            (a) EPEL
            (b) 搜索引擎
                http://pkgs.org
                http://rpmfind.net 
                http://rpm.pbone.net 
            (4) 自己做rpm包 


CentOS系统上可使用rpm命令管理程序包:

rpm命令:    
使用格式:rpm  [OPTIONS]  [PACKAGE_FILE]
选项OPTIONS: 安装:-i, --install

         升级:-U, --update, -F, --freshen
         卸载:-e, --erase
         查询:-q, --query
         校验:-V, --verify
         数据库维护:--builddb, --initdb
            
1.安装:-i
使用格式:rpm {-i|--install} [install-options]PACKAGE_FILE ...
安装选项[install-options]:-h:hash marks输出进度条;每个#表示2%的进度;
                  -v:verbose,详细信息
                  -vv:更详细的输出
                  --test:测试安装,检查并报告依赖关系及冲突消息等;
                  --nodeps:忽略依赖关系(不建议,安装之后可能无法正常使用))
                  --replacepkgs:重新安装(不会修改之前的配置文件)
                  --nosignature:不检查包签名信息,不检查来源合法性;
                  --nodigest:不检查包完整性信息;
常见使用搭配:rpm  -ivh --test PACKAGE_FILE ...
            :rpm  -ivh  PACKAGE_FILE ...
使用示例

测试安装

wKiom1bt-CewIEKcAASw0lKGfUM223.bmp安装

                    
2.升级:-U,-F
使用格式:rpm {-U|--upgrade} [install-options] PACKAGE_FILE ...(升级或安装)
     rpm {-F|--freshen} [install-options] PACKAGE_FILE ...(升级)

选项:--oldpackage:降级;
    --force:强制升级;
常见使用搭配: rpm  -Uvh PACKAGE_FILE ...
          rpm  -Fvh PACKAGE_FILE ...
使用示例:

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


3.卸载:-e
使用格式:rpm {-e|--erase} [--allmatches] [--nodeps] [--noscripts] [--test] PACKAGE_NAME ...
                
选项:    --allmatches:卸载所有匹配指定名称的程序包的各版本;
        --nodeps:忽略依赖关系
        --test:测试卸载,dry run模式
        --noscripts 不运行脚本
常见使用搭配:rpm -e --nodeps --test PACKAGE_NAME ...
            rpm -e --nodeps PACKAGE_NAME ...    
            rpm -e --allmateches --nodeps PACKAGE_NAME ...
使用示例

    
4.查询:-q
使用格式:rpm {-q|--query} [select-options] [query-options]
            
指定查询对象的选项[select-options]:

         PACKAGE_NAME:查询指定的程序包是否已经安装,及其版本;
         -a, --all:查询所有已经安装过的包;
         -f  FILE:查询指定的文件由哪个程序包安装生成;
         -p, --package PACKAGE_FILE:用于实现对未安装的程序包执行查询操作;
         --whatprovides CAPABILITY:查询指定的CAPABILITY由哪个程序包提供;
         --whatrequires CAPABILITY:查询指定的CAPABILITY被哪个包所依赖;
                
查询动作选项:[query-options]:
         --changelog:查询rpm包的changlog;
         -l, --list:程序安装生成的所有文件列表;
         -i, --info:程序包相关的信息,版本号、大小、所属的包组,等;
         -c, --configfiles:查询指定的程序包提供的配置文件;
         -d, --docfiles:查询指定的程序包提供的文档;
         --provides:列出指定的程序包提供的所有的CAPABILITY;
         -R, --requires:查询指定的程序包的依赖关系;
         --scripts:查看程序包自带的脚本片断;
                
常见使用搭配: 
rpm -qi  PACKAGE_NAME:查询已安装的程序包的相关信息
rpm -qf FILE:查询此文件由哪个程序包安装生成
rpm -qc PACKAGE_NAME:查询此程序包提供的配置文件;
rpm -ql PACKAGE_NAME:查询此程序包安装生成的所有文件列表
rpm -qd PACKAGE_NAME:查询此程序包提供的文档;
rpm -qpi PACKAGE_FILE:查询此程序包文件的相关信息
rpm -qpl PACKAGE_FILE:查询此程序包文件安装会生成的所有文件列表
rpm -qpc PACKAGE_FILE:查询此程序包文件安装会提供的配置文件
......


使用示例:

Linux程序包管理(rpm)_第1张图片               
5.校验:-V
使用格式:rpm {-V|--verify} [select-options] [verify-options]
选项:--nodeps:校验依赖性
    --nodigest:不校验包完整性
    --nofiles:不校验文件属性是否发生改变
    ......

    如果不给选项则默认校验所有信息

示例:

Linux程序包管理(rpm)_第2张图片


S.5....T.   :校验输出字符串含义(一个九个字段, “.”表示此项校验通过):
           1, S: file Size differs
           2, M: Mode differs (includes permissions and file type)
           3, 5: digest (formerly MD5 sum) differs
           4, D: Device major/minor number mismatch
           5, L: readLink(2) path mismatch
           6, U: User ownership differs
           7, G: Group ownership differs
           8, T: mTime differs
           9, P: caPabilities differ
            
包来源合法性验正和完整性验正:
来源合法性验正:包的制作者计算出程序包文件的特征码,然后用自己的私钥进行加密。提供公�和程序包给用户,用户通过公钥对程序包解密。能够正常解密则认为此包来源合法。
完整性验正:然后通过计算程序包文件的特征码进行比对,如果一致,则认为其完整性通过。
        
获取并导入信任的包制作者的公钥:
CentOS发行版可以这样导入公钥:rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

导入信任的包制作者的密钥之后的验证过程

            (1) 安装此组织签名的程序时,会自动执行验正;
            (2) 也可选择手动验正:rpm -K PACKAGE_FILE

Linux程序包管理(rpm)_第3张图片


数据库重建:
rpm管理器数据库路径:/var/lib/rpm/,查询操作:通过此处的数据库进行
数据库管理命令:
rpm {--initdb|--rebuilddb} [--dbpath=DIRECTORY] [--root DIRECTORY]
   --initdb:初始化数据库,当前无任何数据库可实始化创建一个新的;当前有时不执行任何操作;
   --rebuilddb:重新构建,通过读取当前系统上所有已经安装过的程序包进行重新创建;
注意:获取此命令的帮助的方法中CentOS6和7中不同
            CentOS 6:man rpm
                CentOS 7:man rpmdb

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