一、RPM简介

RPM 是RPM is Package Manager(RPM软件包管理器)的缩写,实现在Linux环境上安装、卸载各类软件,均以.rpm为后缀结尾。

二、rpm文件的命名格式

appname-VERSION-RELEASE.ARCH.rpm

(1)appname:包名

(2)VERSION:
                    major:主版本号
                    minor:次版本号
                    release:发行号

(3)RELEASE:包自身的修订号,有时候还会包含适用于的OS信息,比如bash-4.3.2-2.centos6.x86_64.rpm
          ARCH:适用的平台

                      x86:i386,i486,i586,i686,
                      x86_64:x86_64,amd6464
                      powerpc:ppc
                      noarch:跟平台无关

例:bash-4.3.2-2.centos.x86_64.rpm

对应包名:bash,版本:4.3.2 适用系统:centos ,适用平台:x86_64

三、rpm包的获取途径

1、系统的发行光盘镜像或官方站点(或站点镜像服务器)

附:光盘挂载方法

(1)mkdir /media/cdrom

(2)mount -r /dev/cdrom /media/cdrom或mount -o ro -t iso9660 /dev/cdrom /media/cdrom

2、程序包的官方站点

3、第三方组织:epel、dpkg

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

 四、通过rpm命令实现rpm包的安装、卸载、升级、校验、查询等功用

1、安装

格式:rpm {-i | --install} [install -options] PACKAGE_FILE...

选项:-h:hash,以#来表示安装进度 (1个#代表2%的进度)
            -v,--verbose :显示安装过程中的详细信息

           --test:不执行真正的安装过程,而仅报告依赖关系及冲突信息等

          --nodeps:忽略依赖关系(伴随副作用:能安装成功,但未必能成功运行) 

安装时常用的组合:-ivh

以安装zsh为例:

[root@www Packages]# rpm -ivh zsh-4.3.10-7.el6.x86_64.rpm
Preparing...                ########################################### [100%]
   1:zsh                    ########################################### [100%]

2、rpm {-U|--upgrade} [install-options] PACKAGE_FILE ...
               -U:升级或安装
      rpm {-F|--freshen} [install-options] PACKAGE_FILE ...
               -F:升级 

 组合:-Uvh|-Fvh

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

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

          --oldpackage:降级到旧版本 rpm -Uvh --oldpackage zsh-4.3.10-7.el6.x86_64.rpm

3、卸载:移除已经安装的程序包

格式:rpm  {-e|--erase}  [--allmatches]  [--nodeps]   [--noscripts]  [--notriggers] [--test] PACKAGE_NAME ...
简单用法:rpm -e PACKAGE_NAME

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

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

4、查询:查询某包是否已经安装,以及检查安装的所有包,还可以查看某包的详细信息

格式:rpm {-q|--query} [select-options] [query-options]

[select-option]:

(1)查询某包或某些包是否安装:rpm -q PACKAGE_NAME
 [root@www Packages]# rpm -q zsh
zsh-4.3.10-7.el6.x86_64     

(2)查询已经安装的所有包: rpm -qa
(3)查询某文件是由哪个包安装生成 rpm -qf /PATH/TO/SOMEFILE

[root@www Packages]# rpm -qf /etc/fstab
setup-2.8.14-20.el6_4.1.noarch     

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

          -p 可以通查询选项组合使用
RPM程序包管理_程序包

[query-option]:查询选项

(1)查询某包的简要说明信息 :(i:information) rpm -qi PACKAGE_NAME 

RPM程序包管理_管理_02

(2)查询某包安装生成的文件列表 :rpm -ql PACKAGE_NAME(直接跟包名)

#rpm -ql zh

(3)查询某包安装生成的所有配置文件: rpm -qc PACKAGE_NAME
 # rpm -qc zsh

(4)查询某包安装生成的所有帮助文件:rpm -qd PACKAGE_NAME
  # rpm -qd zsh

(5)查询某包制作时版本变化的changelog信息:  rpm -q --changelog PACKAGE_NAME
# rpm -q --changelog zsh

(6)查询某包提供的capabilities (能力): rpm -q --proviedes PACKAGE_NAME
 # rpm -q --provides zsh

(7)查询某包所依赖的capabilities:rpm -q --requires PACKAGE_NAME

(8)查询某包安装或卸载时执行脚本: rpm -q --scripts PACKAGE_NAMA

此处脚本有四类:
                preinstall:安装过程开始之前执行的脚本
                postinstall:安装过程完成之后执行的脚本
                preuninstall:卸载开始之前执行的脚本
                postuninstall:卸载过程完成之后执行的脚本

(9)校验:查询包安装之后生成的文件是否发生了改变

       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                  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

此处程序包的合法性验证包括:

 (1) 来源合法:由我们信任的制作者提供,依赖于,制作者的数字签名,签名是作者使用自己的私钥加密程序包的特征码进行的
 (2)内容合法:包未被二次修改,完整性校验成功,依赖于,制作者提供的程序特征码


验证方式:安装者用同样的特征码提取算法提取程序包的特征码并与原作者提供的相比较

(10)验证光盘中程序包的来源及完整性

导入:rpm -- import /path/to/RPM-GPG-KEY-FILE

验证:rpm {-K|--checksig} PACKAGE_FILE

进入光盘挂载路径,验证zsh的合法性方法如下:

root@localhost cdrom]# rpm --import RPM-GPG-KEY-CentOS-6
[root@localhost cdrom]# cd Packages/
[root@localhost Packages]# rpm -K zsh-4.3.10-7.el6.x86_64.rpm
zsh-4.3.10-7.el6.x86_64.rpm: rsa sha1 (md5) pgp md5 OK

 

自此RPM的相关使用就总结到这里,敬请指正!