rpm——软件包管理工具

  一、软件包管理简介 

    1软件包组成 

    我们都在windows系统中安装过软件,基本就是用鼠标点击下一步,因而有些人认为安装软件是一件非常容易的事,无论是在何种操作系统上。然而,事实并非如此。在Linux系统上安装软件的方法完全不同于在Windows上安装,至少不会是简单的用鼠标点击下一步就行了。要想在Linux系统上安装软件包,首先要了解软件包的组成。

    软件包由二进制程序、库文件、配置文件、帮助文件等重要部分组成。

    软件包的安装目录如下:

       二进制程序:

          默认:/bin, /sbin, /usr/bin, /usr/sbin, /usr/local/bin, 

                /usr/local/sbin

          自定义:/usr/local/APP/{bin,sbin}

        库文件(开发库和运行库):

             默认:/lib64, /usr/lib64, /usr/local/lib64

          自定义: /usr/local/APP/lib

       配置文件:

          默认:/etc

          自定义/usr/local/APP/etc或conf目录

        帮助文件:

          默认:/usr/share/man, /usr/local/share/man           

          自定义:/usr/local/APP/man

    2软件包管理

    问:安装软件包时,会在很多不同的目录下存放文件,如果要卸载软件包,怎样才能卸载得干净呢?

    答:如果在安装软件包时,把安装存放软件包文件的目录记录下来,卸载时,根据这个记录就能把软件包卸载得干净。这就是软件包管理器中数据库的作用了!

    在Linux系统中,一般会使用软件包管理工具对软件包进行管理。        

    程序包管理器功能:将编译好的程序打包成一个文件或有限的几个文件,可用于实现安装、卸载、升级、查询等功能; 

     程序包管理器中应该包含:

       (1)数据库:

           程序名及版本

           程序的依赖关系:X --> Y,Z (X依赖于Y、Z)

           程序的功能性说明

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

       (2)程序的组成清单:

           文件清单

           安装卸载时运行的脚本

    常见的软件包管理器有:        

            Debian: dpkg,(以.deb后缀结尾)

          RedHat: rpm(redhat package manager),(以.rpm后缀结尾)

  二、rpm包介绍

    RPM是RedHat Package Manager(RedHat软件包管理工具)的缩写,这一文件格式名称虽然打上了RedHat的标志,但是其原始设计理念是开放式的,现在包括OpenLinux、S.u.S.E.以及Turbo Linux等Linux的分发版本都有采用,可以算是公认的行业标准了。

    利用rpm软件包管理工具可以把软件包打包成rpm格式(以.rpm为后缀),rpm包可以用rpm工具统一管理。

    1、rpm包命名格式    

      rpm包命名格式name-version-relase.arch.rpm

        name : 表示软件包的名字,包括主包名和分包名           

                分包机制:

                核心包,主包:命名与源程序一致

                    bash-4.2.3-3.centos7.x86_64.rpm

                子包:(在主包名后加上子包的功能性描述字串)

                     bash-a-4.2.3-3.centos7.x86_64.rpm

                    bash-b-4.2.3-3.centos7.x86_64.rpm

                    bash-devel-4.2.3-3.centos7.x86_64.rpm

        version:包源代码的版本号          

                version:    major.minor.release

                主版本号.次版本号.源代码的发行版本号

          relaserpm自身的发行号,与程序源码的发行号无关,仅用于标识对rpm包不同制作的修订;同时,release还包含此包适用的OS

                        如:bash-4.2.3-3.centos5

        arch :该程序包使用的硬件平台

              如:x86: i386, i486, i586, i686等;

               x86_64: x86_64

               powerpc: ppc

               noarch: 依赖于虚拟机

    2、rpm包获取的途径       

        (1)发行的光盘或站点服务器

            镜像:

                http://mirrors.163.com

                http://mirrors.sohu.com

      (2)项目的官网

            源代码

            rpm

      (3)很多第三方机构或个人制作并公开发布许多rpm包(不一定安全)

            http://rpmfind.net

            http://rpm.pbone.net

      (4)可靠的途径:EPEL(建议使用可靠的包)

           Fedora-EPEL(Fedora官方维护,会验证包的合法性和可靠性)

    3、rpm包的合法性验正        

        rpm包的合法性验正主要包括:

            a、来源合法性

            b、包的完整性 

      (包制作者制作完成之后会附加数字签名于包上)     

        包的制作者使用单向加密提取原始数据的特征码,而后使用自己的私钥加密这段特性码,附加原始数据后面。

        验正过程:

        前提:必须有可靠机制获取到包制作者的公钥;

        (1)使用制作者的公钥解密加密的特征码,能解密则意味着来源合法;

        (2)使用与制作者同样的意向加密算法提取原始数据的特征码,并与解密出来的特征作比对,相同,则意味着完整性没问题;

  三、rpm的核心功能

    1、安装程序包

     安装程序包:

        rpm [option] /path/to/package_file (要指明包文件才能安装)

            -i: install  安装指定的程序包

            -v: 显示详细的安装信息

            -vv: 显示更详细的安装信息

            -vvv: 显示更多的详细安装信息(比-vv更详细)

            -h: 使用“#”显示安装进度,一个“#”表示%2的安装进度      

        组合选项:-ivh   

            --test: 仅作测试,没有真正执行安装     

        如果依赖于其它包:

        (1)解决依赖关系

        (2)忽略依赖关系

            能安装上,但有可能无法运行;

                --nodeps (忽略依赖关系)    

        重新安装:

        --replacepkgs 

        如果原有配置文件作了修改,很有可能不执行替换,而是将应该安装生成的配置文件重命名为 .rpmnew      

        2、卸载程序包:

        rpm [option] package_name

        -e: erase 卸载指定包名的程序包

        如果被其它包所依赖:

        (1)将依赖于此包的所有包一并卸载

        (2)忽略依赖关系

            能卸载,但依赖于此包程序包可能会运行不正常;

                --nodeps (忽略依赖关系)

        如果包的配置文件安装后曾被改动过,卸载时,此文件将不会卸载,而是被重命名并保留,例如:

        warning: /etc/zprofile saved as /etc/zprofile.rpmsave         

        3、升级程序包:

        新版本替换老版本

        rpm [option] /path/to/package_file

        (1)升级或安装

            -Uvh   (如果装有老版本的,则升级,否则,则安装    

        (2)纯升级

            -Fvh  (如果装有老版本的,则升级,否则,退出       

        --force: 强制升级    

        注意:不应该对内核执行升级操作,而是安装

        系统允许多内核并存

        4、查询操作:

        (1)查询某包是否安装

            rpm -q package_name...     

        (2)查询所有已经安装的包

            rpm -qa  

        按条件过滤:rpm -qa | grep 'PATTERN' 

        (3)查询包的描述信息

            rpm -qi package_name

        (4)查询某包安装生成了哪些文件

            rpm -ql package_name

            a、查询某包安装生成了哪些配置文件

                rpm -qc package_name

            b、查询某包安装生成了哪些帮助文件

                rpm -qd package_name

            c、查询程序包的相关脚本

                rpm -q --scripts package_name

                脚本有四类:

                preinstall:安装前脚本

                postinstall: 安装后脚本

                preuninstall: 卸载前脚本

                postuninstall: 卸载后脚本

        (5)查询某文件是由哪个包安装生成的

            rpm -qf /path/to/some_file

        (6)对尚未安装的包执行查询

            rpm [option] /path/to/package_file

                -qpi :查询尚未安装的包的描述信息

                -qpl :查询尚未安装的包安装后会生成哪些文件

                -qpc :查询尚未安装的包安装后会生成哪些配置文件

                -qpd :查询尚未安装的包安装后会生成哪些帮助文件

        5、校验:

        用于检查包安装生成的文件属性是否发生变化

        rpm -V package_name

               S file Size differs (大小发生了改变)

               M Mode differs (includes permissions and file type) (权限发生改变了,包括文件类型)

               5 digest (formerly MD5 sum) differs (MD5校验码发生了改变)

               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 (能力发生改变了)

             某属性无变化,显示为.

        6、rpm包来源合法性及完整性检验:

        前提:在当前系统上导入包的制作者的公钥

        导入:

            rpm --import /path/to/key_file

            # rpm -qa gpg-pubkey*

            显示所有已经导入的gpg格式的公钥

            # rpm -qi gpg-pubkey-NAME

            显示密钥的详细信息

        检查包:安装过程中会自动执行

        手动检查:

            rpm -K /path/to/package_file

            rpm --checksig /path/to/package_file

                不检查包完整性:

                    rpm -K --nodigest

                不检查来源合法性:

                    rpm -K --nosignature

        7、数据库重建:

        数据库目录:/var/lib/rpm

        重建:

            rpm --initdb:初始化

                如果事先没有库,会新建一个;如果有,则不新建;

            rpm --rebuilddb: 重建

                直接重建,覆盖原有的数据库

    


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章