> CentOS > CentOS入门 >

CentOS系统之rpm包管理

一、概述

        RPM是RPM Package Manager(RPM软件包管理器)的缩写,现在包括Open Linux、S.u.S.E.以及Turbo Linux等Linux的分发版本都有采用,基于这种标准打包而成的软件包,为软件的使用提供了方便。

 

二、rpm包组成

(注:程序名使用APP代替)

程序包的组成格式:包括二进制程序、库文件、配置文件、帮助文件

程序包安装文件放置目录:

    1. 二进制程序:/bin, /sbin;  /usr/bin, /usr/sbin;  /usr/local/bin, /usr/local/sbin; 或者自定义目录                                               下:/usr/local/APP/bin,/usr/local/APP/sbin

    2. 库文件(开发库、运行库):针对64位系统的库文件放在/lib64;  /usr/lib64;  /usr/local/lib64; 或着自定义                                                            目录/usr/local/APP/lib64

    3.  帮助文件man:/usr/share/man, /usr/local/share/man, 或者自定义目录/usr/local/APP/man

                                 另外,程序包的帮助文件主要有:man、info、doc

注:有些特殊的应用程序不允许用户在自己的在命令行中直接执行,除非使用绝对路径。这些程序放置于libexec(            位于/usr/; /usr/local/; 或者自定义目录/usr/local/App/ 下)目录下。另外,有些第三方应用默认安装于/opt        目录

 

三、RPM程序包管理器

        RPM程序包管理器的功能是将编译好的程序打包成一个文件或有限的几个文件,可用于实现安装、卸载、升级、查询、校验、数据库管理等功能。主要包含两部分:数据库和程序组成清单。

        1. 数据库内容:

                                程序名及版本

                                依赖关系

                                功能性说明

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

         2. 程序组成清单:

                                文件清单

                                安装卸载时运行的脚本,包括安装前脚本、安装后脚步、卸载前脚本、卸载后脚本

 

四、rpm包使用。包括安装、卸载、升级、查询、校验记及包来源合法性及完整性检验   

1. 包命名、分包机制认识以及如何获取rpm包

    (1)包命名格式

            源码命名:程序名-版本号:name-version.tar.{gz,bz2,xz}

                            version:major.minor.release  主版本号.次版本号.修整号

                    例如:bash-4.2.3.tar.gz

             rpm包命名:程序名-版本号-包修正号.硬件平台:name-version-relase.arch.rpm

                                version:和源码格式相同

                                release: 包修正号。rpm自身的发行号,与程序源码的发行号无关,仅用于标识对rpm包不同制                                                   作的修订

                                arch: 适用于的硬件平台 

                                        x86: i386, i486, i586, i686等

            x86_64: x86_64

            powerpc: ppc

            noarch: 依赖于虚拟机(解释器)

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

    (2)分包机制

            一个程序有一定数量的功能。这些功能被打包成核心包(主包)和多个子包。

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

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

            子包:在名称后加上功能名命名

                例如 :

                          具有a功能的包命名: bash-a-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.pbone.net

         4. 可靠的途径

                             EPEL

                             Fedora-EPEL

2. rpm包管理器的常见使用场景

  (注;软件包名称使用 package_name代替)

    (1)安装程序包

                命令:rpm [option] /.../.../package_file (选项后跟软件包的路径)

                     命令选项:   

                              -i: 安装

                              -v:显示安装过程

                              -vv:显示详细安装过程

                              -vvv:显示更详细安装过程

                              -h: 使用#号显示安装进度

                              --test: 仅作测试,不执行安装

                                 例如:rpm -ivh --test /media/cdrom/Packages/zsh-4.3.10-7.el6.x86_64.rpm 

                              --nodeps: 忽略依赖关系

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

                              --replacepkgs 重新安装

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

                                             命名为 .rpmnew

        (2)卸载软件包

                命令:   rpm [option] package_name (选项后直接跟包名)

                    命令选项:

                                -e:erase 卸载

                                --nodeps: 忽略依赖关系卸载

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

                                             2. 如果包的配置文件安装后被改动过,卸载时此文件将不会卸载,而是被重命名并保留                                                  卸载时可能会有提示。例如:                                                  

                                                 [root@localhost ~]# rpm -e zsh

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

        (3)升级软件包

                命令:rpm [option] /.../.../package_file (选项后跟软件包的路径)

                    命令选项:

                                -Uvh: 升级或安装

                                 -Fvh:只升级

                                 --force:强制升级

                注:1. 由于依赖关系可能会带来升级后的版本冲突等,导致依赖于此包的其他包不能正常运行

                       2. 不应该对内核执行升级操作,而是安装系统允许多内核并存

         (4)软件包相关查询

                1. 查询软件包是否已经安装

                        命令:rpm -q package_name...

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

                        命令:rpm -qa 

                    另外,可按条件过滤查询指定的已安装的包,例如,查询已安装的内核:rpm -qa | grep '^kernel*'

                3. 查询已安装包的描述信息

                        命令:rpm -qi package_name

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

                        命令:rpm -ql package_name

                    更详细的:

                                (1)查询某已安装包安装生成了那些配置文件

                                          命令:rpm -qc package_name

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

                                          命令:rpm -qd package_name

                                (3)查询程序包的相关脚本

                                          命令:rpm -q --scripts package_name

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

                                          命令:rpm -qf /path/to/some_file

                        对尚未安装的包执行查询:

                              命令:rpm [option] /path/to/package_file

                                  命令选项:  

                                      -qpi:查询某为安装包的描述信息

                                      -qpl:查询某未安装包安装会生成那些文件

                                      -qpc:查询某未安装包安装会生成那些配置文件

                                      -qpd:查询某为安装包安装会生成那些文档

            (5)校验

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

                 命令:rpm -V package_name

                    例如:                          

                            [root@localhost ~]# rpm -V zsh

                            S.5....T.  c /etc/zprofile

                    各表示符代表意义:

                               S :文件大小改变

                               M: 权限和文件类型改变

                               5 :MD5校验码改变

                               D :设备文件的主设备号、次设备号改变

                               L :readLink路径改变

                               U: 属主改变

                               G: 属组改变

                               T :修改时间改变

                               P:功能改变 

                              .号 表示安装文件属性没有改变

              (6)rpm包来源合法性及完整性检验

                  以发行光盘rpm包检验为例:

                   1. 在当前系统上导入包的制作者的公钥

                              命令:rpm --import /media/cdrom/RPM-GPG-KEY-CentOS-6

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

                              命令:rpm -qa gpg-pubkey*

                            显示密钥的详细信息:

                              命令:rpm -qi /media/cdrom/RPM-GPG-KEY-CentOS-6

                          注:公钥导入后,包来原型及合法性检验会在软件包安装时执行。

                    2. 手动检查

                        例如,检查程序包zsh:

                            [root@localhost ~]# rpm -K /media/cdrom/Packages/zsh-4.3.10-7.el6.x86_64.rpm 

                            /media/cdrom/Packages/zsh-4.3.10-7.el6.x86_64.rpm: rsa sha1 (md5) pgp md5 OK

                         不检查包完整性:                                              

                            [root@localhost ~]# rpm -K --nodigest /media/cdrom/Packages/zsh-4.3.10-7.el6.x86_64.rpm

                            /media/cdrom/Packages/zsh-4.3.10-7.el6.x86_64.rpm: rsa (md5) pgp OK

                          不检查来源合法性:                                      

                            [root@localhost ~]# rpm -K --nosignature /media/cdrom/Packages/zsh-4.3.10-7.el6.x86_64.rpm

                            /media/cdrom/Packages/zsh-4.3.10-7.el6.x86_64.rpm: sha1 md5 OK

              (7)数据库重建

                    如过数据库损坏,则需要进行数据库重建。

                    注:数据库目录所在位置 /etc/var/lib/rpm

                    重建方式:

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

                                    命令:rpm --initdb

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

                                    命令:rpm --rebuilddb



(责任编辑:IT)