rpm包管理

一、什么是RPM

    RPM全称为“RedHat Package Manager”,看名字就知道这是RedHat公司搞出来的,后来因为RPM发展的很好,逐渐成为了一种通用的标准,就更名为“RPM is Package Manager"。

    RPM最大的特点就是将软件先编译,并打包成为RPM机制的安装包,包中包含了该软件安装时所必须依赖属性软件信息,如果这些被依赖的软件已经安装,则安装包可顺利安装完成,否则软件将会安装失败。

    RPM安装时会将该软件的信息写入到RPM数据库中,那么软件的查询、验证、升级、卸载等操作都可以从数据中直接调用执行。

二、认识RPM包

    1、RPM包的命名格式

        name-version-release.OS.arch.rpm

        解释:

            name:软件名称。

            version:major.minor

                major:主版本号;

                minor:次版本号;

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

            arch:适用于的硬件平台;

                x86:i386,i486,i586,i686等;

                x86_64:支持64位CPU;

                noarch:依赖于虚拟机。

            例如:bash-4.2.3-3.centos5.x86_64.rpm

    2、分包机制

        对于一个功能比较多的软件来说,而用户可能并不会用户其所有的功能,那么OS Vendor(系统发行商)在制作RPM包时只会用将他们认为用户会经常用到的功能打包成为与源程序名一致的核心包,而将其它的功能再次的打包成为子包;比如:bash程序有20个功能,常用功能有8个,特殊功能A:3个,特殊功B:6个,二次开发相关功能:3个,那么其RPM的形式有可能是这样的:

        核心包:

            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

        如果需要用到子包中的功能的话,就需要把对应的子包进行安装。

    3、获取rpm包的途径

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

    镜像:

        http://mirrors.163.com

        http://mirrors.sohu.com

2)项目的官网

    源代码

    RPM包

3)很多第三方机构或个人制作并公开发布许多rpm包

http://rpmfind.net

http://rpm.phone.net

          可靠的途径:EPEL

              Fedora-EPEL

    4、RPM包的合法性验证

        RPM包的制作者使用单向加密提取原始数据的特征码,而后使用自己的私钥加密这段特征码,附加在原始数据后面,如果想要正确的安装RPM包必须使用可靠机制获取到包制作者的公钥;其公钥的作用:

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

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

三、RPM包管理器的使用

    1、安装程序包

        命令格式:rpm [option] package_name

            option:        

                -i:安装;

                -v:显示信息;

                -h:显示进度;

                -vv:显示详细信息;

                -vvv:显示更加详细信息;

                组合选项:-ivh;

                –test:仅作测试,不真正执行安装;

                     rpm -ivh –test 程序包

                –nodeps:忽略依赖关系;

                    忽略依赖关系可以将软件安装上,但可能无法运行;

                –replacepkgs:重新安装;

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

13.png

    2、卸载程序包

        命令格式:rpm [option] package_name

            option:

                -e:卸载;

                –nodeps:忽略依赖关系;

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

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

1.1.png

    3、升级程序包

        命令格式:rpm [option] package_file

            option:

                -Uvh:升级或安装;

                -Fvh:纯升级;

                     必须存在老版本,否则不安装;

                –force:强制升级;

        注意:不应该对内核执行升级操作;而要安装。系统允许多内核并存。

    4、查询操作

        1)查询某包是否已安装

            rpm -q package_name

1.1.png

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

            rpm -qa

1.png        3)查询包的描述信息

            rpm -qi package_name

3.png

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

            rpm -ql package_name

4.png

        5)查询某包安装生成了哪些配置文件

            rpm -qc package_name

5.png

        6)查询某包安装生成了哪些文档(帮助文件)

            rpm -qd package_name

6.png        7)查询程序包的相关脚本

            rpm -q –scripts package_name

            脚本有四类:

                preinstall:安装前脚本

                postinstall:安装后脚本

                preuninstall:卸载前脚本

                postuninstall:卸载后脚本

7.png

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

            rpm -qf /path/to/some_file

8.png

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

            rpm [option] /path/to/package_file

                option:

                    -qpi:包描述信息;

                    -qpl:包会生成哪些文件;

                    -qpc:包会生成哪些配置文件;

                    -qpd:包会生成哪些帮助文件;

1.1.png1.png

    5、RPM包的校验

        校验:检查包安装生成的文件属性是否发生变化

            rpm -V package_name

1.png        httpd的内容没有被修改的情况下rpm -V httpd命令不会有任何输出结果,但上例中出现了一行奇怪的符号,说明httpd的属性已经发生了变化,下面来我看一下前面的文字所代表的含义:

            S:文件的容量大小是否被改变;

            M:文件的类型或文件的属性是否被改变;

            5:MD5指纹的内容已发生了变化;

            D:设备的主/次代码已经改变;

            L:Link路径已被改变;

            U:文件的所有者已被改变;

            G:文件的属组已被改变;

            T:文件的创建时间被改变。

        文件名前还有个c,这一位代表不同的文件类型:

            c:配置文件;

            d:文档;

            g:鬼文件;

            l:授权文件;

            r:自述文件。

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

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

                rpm –import /path/to/key-file

                rpm -qa gpg-pubkey*     显示所有已经导入的gpg格式的公钥

                rpm -qi gpg-pubkey-NAME  显示密钥的详细信息

            CentOS系统安装好后,会将原厂的gpg公钥存放在以下目录中:

1.png

            导入这个公钥:

2.png            查看已经导入的公钥:3.png

            显示公钥的详细信息:

4.png          检查包

                手动检查:

                    rpm -K /path/to/package_file

                    rpm –checksig /path/to/pachage_file             

                不检查包完整性:

                     rpm -K –nodigest

                不检查来源合法性:

                     rpm -K –nosignature

1.1.png

    6、RPM数据库重建

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

            数据库重建:

                rpm –initdb 

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

                rpm –rebuilddb 

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

原创文章,作者:petmaster,如若转载,请注明出处:http://www.178linux.com/2327

(0)
petmasterpetmaster
上一篇 2015-05-11
下一篇 2015-05-11

相关推荐

  • 软件包管理

    软件包管理 在linux中有人多的软件使用,比如我们使用的ifconfig,fdisk,btrfs文件系统等。可能这些软件在你原有的linux系统中并不存在,那么我们如何去使用这些工具呢。我们知道windows在需要软件的时候需要安装,当然对于linux系统一样需要安装。在linux下常用的安装工具我们使用的是rpm程序包(当然我们这边是针对CentOS而言…

    Linux干货 2016-08-19
  • ansible实践

    本偏文章以上图拓扑部署 首先准备了6台为centos7的主机(确保selinux和iptables不会成阻碍!关闭他们) 我们先来安装ansible吧! 配置EPEL源过后使用 yum -y install ansible  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 出师不利啊,安装ansible就失败了。!!!!!! 看了一下…

    Linux干货 2017-01-27
  • linux网络管理(基础-IP、MAC、TCP)

    linux网络管理 计算机网络 MACMAC(Media Access Control或者Medium Access Control)地址,意译为媒体访问控制、介质访问控制,或称为物理地址、硬件地址,用来定义网络设备的位置。在OSI模型中,第三层网络层负责IP地址,第二层数据链路层则负责MAC地址。因此一个主机会有一个MAC地址,而每个网络位置会有一个专属于…

    Linux干货 2016-09-09
  • lvm逻辑卷管理

    #LVM 逻辑卷管理 一、创建pv        创建pv可以在物理硬盘(裸盘上创建),MBR类型的分区(要更改分区类型为linux lvm: 8e )。GPT分区也要更改分区类型为8e00 Linux LVM 。    还可以在RAID上创建。注意要在没有数据的分区上…

    Linux干货 2016-09-02
  • shell脚本语言的for循环使用方法和案例

    在shell语言中bash是用的最多的,其语法简单。以指令为核心快速解决常用的问题。所有语言中逻辑控制是必不可少的,它可以帮助我们减少不必要的重复性工作。今天我们就来说说所有语言都会使用的神奇的for循环,学了它以后不仅知道如果规避重复的工作,还能理解程序的运行原理。         for循环是什么?&nb…

    Linux干货 2017-04-16
  • 使用lxc搭建虚拟机

        使用lxc可以帮助我们搭建轻量级的虚拟机,这种虚拟机的对资源要求不高,非常适合在硬件条件受限时建立多台虚拟机的情况,有助于我们完成需要多节点参与的实验环境。     下面来演示lxc的搭建过程: 一、确保NetworkManager服务是停止的。 二、将宿主机的网卡模拟为…

    Linux干货 2015-06-17