5.2 RPM包的安装方式

为了方便Linux用户添加和删除软件,Red Hat公司提供了软件包管理器RPM(RedHat Packet Manager),由于它的出现使得在Linux中安装、卸载应用程序变得相对简单。RPM是一种已经编译并封装好的软件包,用户可以直接安装使用。默认情况下(即不出现文件依赖问题)用户只需双击rpm软件包,系统会自动进行安装。通过RPM,用户可以更加轻松方便地管理系统中的所有软件。RPM软件包只能在使用RPM机制的Linux操作系统中使用,如RHEL、Fdeora、Suse等。在Linux系统中,还有另外一种名为DEB的软件包管理机制,可以在Debian、Ubuntu等系统中使用。相比较而言,还是RPM安装包的应用更为广泛,基本上已成为Linux系统软件安装包事实上的标准。

5.2.1 RPM包管理工具介绍

RPM包的管理功能类似于Windows下的“添加/删除程序”,但是功能却比“添加/删除程序”强大很多。在Linux的系统安装光盘中,有很多以“.rpm”结尾的包文件,这些包文件就是RPM文件。每个RPM文件包含了已经编译好的二进制可执行文件,其实就是将软件源码文件进行编译安装,然后进行封装,类似于Windows安装包中的“.exe”文件。此外RPM文件中还包含了运行可执行文件所需的其他文件,这点也和Windows下的软件包类似。Windows程序的安装包中,除了“exe”可执行文件外,还有其他依赖运行的文件。

一个RPM包文件是能够让应用软件运行的全部文件的集合,它记录了二进制软件的内容、安装的位置、软件包的描述信息、软件包之间的依赖关系等信息。RPM工具对系统中全部RPM软件包进行全面管理,因此能够记住用户添加了什么以及这些软件每个文件的具体安装路径,以便用户进行完全、彻底地删除。一般来说,RPM软件包发布的软件比需要手工编译的软件容易安装和维护,但是有些RPM软件包需要大量的依赖包。

RPM包管理方式的优点是安装简单方便,因为软件已经编译完成并打包,安装只是个验证环境和解压的过程。此外,通过RPM方式安装的软件,RPM工具都会记录软件的安装信息,这样便于软件日后的查询、升级和卸载。RPM包管理方式的缺点是对操作系统环境的依赖性很大,它要求RPM包的安装环境必须与RPM包封装时的环境相一致或相当。还需要满足安装时与系统某些软件包的依赖关系。例如需要安装A软件,但是A软件需要系统有B和C软件的支持,那么就必须先安装B和C软件,然后才能安装A软件。这也是用户在使用RPM包方式安装软件需要特别注意的地方。

5.2.2 RPM包种类和组成

RPM软件包是将源代码经过编译和封装以后形成的包文件,其中封装有软件程序、配置文件、帮助手册等组件。RPM包的封装格式一般有两种:RPM和SRPM,SRPM包包含了编译时的源码文件和一些编译指定的参数文件,在使用的时候需要重新进行编译,通常SRPM对应的RPM文件类似与“xxxxxxxx.src.rpm”格式。下面以vsftpd-2.2.2- 11.el6.i686.rpm为例,讲述一下RPM包对应的文件名含义。

vsftpd:软件名称。

2.2.2:版本号。

11.el6:发布号,更新发布号主要是对软件存在的bug或漏洞进行了修补,在软件功能上并没有增强,el6是指在RHEL6系统中发布。

i686:硬件平台,其中x86_64是指64位的PC架构,i386或i686等都是指32位的PC架构,noarch是指不区分硬件架构。

rpm:扩展名。

注意 RHEL6系统中所有的内置软件都以RPM软件包的形式存储在系统光盘packages子目录中。

对于RPM包的五个组成部分,下面详细介绍它们的含义和异同。

软件名称:是对软件包的标识。

软件的版本号:每个软件都有自己的版本号,版本号可以说明软件从开始到现在发行了多少、软件是否是新的等等。

软件更新发行次数:由于一个版本的软件在发行后可能出现bug或者漏洞,需要修复和重新封装。每修复封装一次,软件的名称就要更新一次。

适合的硬件平台:由于RPM包要在各种不同的Linux硬件平台上使用,但是每个不同的硬件平台RPM打包封装的参数不同,这样就出现了i386、i686、x86_64、noarch等平台名称标识。i386指这个软件包适用于intel 80386以后的x86架构的计算机;i686指这个软件包适用于intel 80686以后(奔腾pro以上)的x86架构的计算机;x86_64指这个软件包适用于x86架构64位处理器的计算机。noarch表示这个软件包与硬件构架无关,可以通用。

RPM软件包标识:RPM软件包标识用于指明此文件是rpm格式的文件,一般以两种后缀来标识,分别以“.rpm”结尾和以“.src.rpm”结尾。

i386软件包可以在任意x86平台下使用,无论是i686或是x86_64的计算机都可以。但是i686的软件包不一定能在i386硬件上面使用,这是由于i686软件包一般都是对cpu进行了优化,具有向后兼容性,而不具有向前兼容的特性。

5.2.3 RPM软件包的使用

RPM的使用分为安装、查询、验证、更新、删除等操作,RPM软件的安装、删除和更新只有拥有root权限才能使用,对于查询功能则任何用户都可以操作。如果普通用户拥有安装目录的权限,也可以进行安装,下面分别来介绍。

1.安装软件包

命令格式如下。

  rpm -i [辅助选项] file1.rpm file2.rpm…fileN.rpm

主选项说明如下。

-i:是install的意思,就是安装软件,也可以使用“--install”。

参数说明:

file1.rpm file2.rpm…fileN.rpm是指定将要安装RPM包的文件名,可以多个文件一起安装。

辅助选项说明。这里的选项很多,只列出常用选项,详细解释如下。

-v:显示附加信息。

-h:安装时输出标记“#”。

--test:只对安装进行测试,并不实际安装。

--nodeps:不检查软件之间的依赖关系,加入此选项可能会导致软件不可用。

--force:忽略软件包以及软件冲突。

--replacepkgs:强制重新安装已经安装的软件包。

--prefix:将软件包安装到指定的路径下。

--percent:以百分比的形式输出安装的进度。

--excludedocs:不安装软件包中的说明文件。

--includedocs:安装软件包,包含说明文件。

其中,常用参数如表5-1所示。如果有依赖关系的,要解决依赖关系。其实软件包管理器一般都能很好地解决依赖关系,如果在软件包管理器中也找不到有依赖关系的包,那只能通过编译它所依赖的包来解决依赖关系,或者强制安装。

表5-1 RPM软件包安装参数说明

安装过程示例如图5-4所示。

图5-4 RPM软件包安装

【例5-4】安装ipvsadm-1.24-6.i386.rpm包。

安装ipvsadm-1.24-6.i386.rpm可使用下面的命令。

  [root@localhost ~]# rpm -ivh ipvsadm-1.24-6.i386.rpm

执行结果如下。

  warning:ipvsadm-1.24-6.i386.rpm:V3 DSA signature: NOKEY, key ID 44e181
  Preparing...    ############################ [100%]
  1:ipvsadm  ############################[100%]

【例5-5】安装gcc-3.4.4-2.i386.rpm包。

下面的操作为安装gcc-3.4.4-2.i386.rpm包的过程。在安装过程中,出现了安装包依赖问题。安装命令如下。

  [root@server ~]# rpm -ivh gcc-3.4.4-2.i386.rpm

执行结果如下。

  warning: gcc-3.4.4-2.i386.rpm: V3 DSA signature: NOKEY, key ID db42a60e
  error: Failed dependencies:
  glibc-devel >= 2.2.90-12 is needed by gcc-3.4.4-2.i386
  Suggested resolutions:
  glibc-devel-2.3.4-2.13.i386.rpm

提示在安装gcc编译器之前需要glibc-devel包的支持,这个包详细的版本是glibc-devel-2.3.4-2.13.i386.rpm,因此,需要先安装这个软件包。

  [root@server ~]# rpm -ivh glibc-devel-2.3.4-2.13.i386.rpm

执行结果如下。

  warning: glibc-devel-2.3.4-2.13.i386.rpm: V3 DSA signature: NOKEY, key ID 
db42a60e
  error: Failed dependencies:
  glibc-headers is needed by glibc-devel-2.3.4-2.13.i386
  glibc-headers = 2.3.4-2.13 is needed by glibc-devel-2.3.4-2.13.i386
  Suggested resolutions:
  glibc-headers-2.3.4-2.13.i386.rpm

这里又出现了依赖关系。上面的错误提示安装glibc-devel包需要先安装glibc-headers软件包,并且给出了安装建议版本,于是要先安装glibc-headers包。

  [root@server ~]# rpm -ivh glibc-headers-2.3.4-2.13.i386.rpm

执行结果如下。

  warning: glibc-headers-2.3.4-2.13.i386.rpm: V3 DSA signature: NOKEY, key 
ID db42a60e
  error: Failed dependencies:
  kernel-headers is needed by glibc-headers-2.3.4-2.13.i386
  kernel-headers >= 2.2.1 is needed by glibc-headers-2.3.4-2.13.i386
  Suggested resolutions:
  glibc-kernheaders-2.4-9.1.98.EL.i386.rpm

依然报错,信息与上面相同,意思是说在安装kernel-headers包之前,需要glibc-kernheaders包的支持,并且给出了建议版本,于是接着安装glibc-kernheaders包。

  [root@server ~]# rpm -ivh glibc-kernheaders-2.4-9.1.98.EL.i386.rpm

执行结果如下。

  warning: glibc-kernheaders-2.4-9.1.98.EL.i386.rpm: V3 DSA signature: NOKEY, 
key ID db42a60e
  Preparing... ########################### [100%]
  1:glibc-kernheaders ###################### [100%]

这次依赖终于解除了,按照相反的顺序开始安装,安装步骤如下。

  [root@server ~]# rpm -ivh glibc-headers-2.3.4-2.13.i386.rpm
  warning: glibc-headers-2.3.4-2.13.i386.rpm: V3 DSA signature: NOKEY, key 
ID db42a60e
  Preparing...  ########################### [100%]
  1:glibc-headers  ######################## [100%]
  [root@server ~]# rpm -ivh glibc-devel-2.3.4-2.13.i386.rpm
  warning: glibc-devel-2.3.4-2.13.i386.rpm: V3 DSA signature: NOKEY, key ID 
db42a60e
  Preparing... ########################### [100%]
  1:glibc-devel  ######################## [100%]
  [root@server ~]# rpm -ivh gcc-3.4.4-2.i386.rpm
  warning: gcc-3.4.4-2.i386.rpm: V3 DSA signature: NOKEY, key ID db42a60e
  Preparing...  ############################## [100%]
  1:gcc      ########################### [100%]

在本例中,若在安装gcc中加入“--nodeps”参数,由于不检查依赖关系,可一次安装成功。

  [root@server ~]# rpm -ivh gcc-3.4.4-2.i386.rpm --nodeps

执行结果如下。

  warning: gcc-3.4.4-2.i386.rpm: V3 DSA signature: NOKEY, key ID db42a60e
  Preparing...  ############################## [100%]
  1:gcc      ########################### [100%]

这里加入了忽略依赖关系的参数,虽然可以安装成功,但是不建议这么做,因为这样安装的软件很可能不可用,或者使用过程中会出现问题。因此,除非确切知道忽略依赖关系对软件本身没有影响,才可使用此参数。

【例5-6】以my-package.src.rpm名称为例,安装xxxxxx.src.rpm。

利用xxxx.src.rpm格式的包安装rsh软件,操作方法如下。

  [root@localhost ~]# rpm -i rsh-0.17-25.3.src.rpm
  [root@localhost ~]#cd /usr/src/redhat/SPECS/rsh.spec
  [root@localhost SPECS]#rpmbuild  -bb rsh.spec
  [root@localhost SPECS]# cd /usr/src/redhat/RPMS/i386/
  rsh-0.17-25.3.i386.rpm
  rsh-debuginfo-0.17-25.3.i386.rpm
  rsh-server-0.17-25.3.i386.rpm
  [root@localhost i386]#rpm -ivh rsh-*
  Preparing...  ############################ [100%]
  1:rsh-server  ########################## [33%]
  2:rsh   ############################## [67%]
  3:rsh-debuginfo  ######################## [100%]
  [root@localhost i386]#

2.查询软件包

RPM的查询功能极为强大,是极为重要的功能之一。

命令格式如下。

  rpm -q [辅助选项] package1…packageN

主选项说明如下。

-q:查询功能,也可以使用“--query”。

参数说明:package1…packageN为已经安装的软件包名称。

【例5-7】查询系统是否安装了gaim。

命令如下。

  [root@localhost]# rpm -q gaim
  gaim-1.3.0-1.fc4

此命令用于查询系统是否安装了gaim。如果已安装会输出相关输出信息;如果没有安装,会输出gaim没有安装的信息。

查看系统中所有已经安装的包,要加-a参数:

  [root@localhost RPMS]# rpm -qa

如果分页查看,应再加一个管道命令|和more命令。

  [root@localhost RPMS]# rpm –qa|more

在所有已经安装的软件包中查找某个软件,比如gaim,可以用grep抽取出来。

  [root@localhost RPMS]# rpm -qa |grep gaim

rpm命令的辅助选项说明如下。

-f:查询操作系统中某个文件属于对应的哪个rpm软件包。

文件名所在的绝对路径要指出。

【例5-8】查询/bin/bash属于哪个rpm软件包。

命令如下。

  [root@localhost ~]# rpm -qf /bin/bash
  bash-3.0-19.2

-p:查询以“.rpm”为后缀的软件包安装后对应的包名称。

【例5-9】查询gcc-3.4.4-2.i386安装到系统后对应的包名。

  [root@server ~]# rpm -qp gcc-3.4.4-2.i386.rpm
  gcc-3.4.4-2

从这里的查询可以得知,将gcc-3.4.4-2.i386.rpm安装到系统以后,对应的包名为gcc-3.4.4-2。

-l:显示软件包中的所有文件列表。

此选项后面跟软件包安装后对应的包名,切记不是以“.rpm”为后缀的rpm包。

【例5-10】查询gcc-3.4.4-2软件包所包含的文件列表。

命令如下。

  [root@server ~]# rpm –ql gcc-3.4.4-2
  /usr/bin/c89
  /usr/bin/c99
  /usr/bin/cc
  /usr/bin/gcc
  /usr/bin/gcov
  ………(以下省略)………

-i:显示软件包的概要信息,例如软件名称、版本、适应平台、大小等等。

同上,此选项后面跟软件包安装后对应的包名,切记不是以“.rpm”为后缀的rpm包。

【例5-11】查询gcc-3.4.4-2.i386软件包的描述信息。

可以使用以下命令。

  [root@server ~]# rpm -qi gcc-3.4.4-2.i386

或者

  [root@server ~]# rpm -qpi gcc-3.4.4-2.i386.rpm

选项说明如下。

这里由于利用“-p”选项显示出了安装后的软件包名,所以“-i”选项后可跟“.rpm”结尾的软件包。

-g:查询系统中有哪些软件包属于指定的类别。RPM工具根据软件功能的不同,将软件分为多种,分别如下,括号内为说明。

Amusements/Games(娱乐/游戏)

Amusements/Graphics(娱乐/图形)

Applications/Archiving(应用/档案)

Applications/Communications(应用/通讯)

Applications/Databases(应用/数据库)

Applications/Editors(应用/编辑器)

Applications/Emulators(应用/仿真器)

Applications/Engineering(应用/工程)

Applications/File(应用/文件)

Applications/Internet(应用/因特网)

Applications/Multimedia(应用/多媒体)

Applications/Productivity(应用/产品)

Applications/Publishing(应用/印刷)

Applications/System(应用/系统)

Applications/Text(应用/文本)

Development/Debuggers(开发/调试器)

Development/Languages(开发/语言)

Development/Libraries(开发/函数库)

Development/System(开发/系统)

Development/Tools(开发/工具)

Documentation(说明文档)

System Environment/Base(系统环境/基础)

System Environment/Daemons(系统环境/守护)

System Environment/Kernel(系统环境/内核)

System Environment/Libraries(系统环境/函数库)

System Environment/Shells(系统环境/接口)

User Interface/Desktops(用户界面/桌面)

User Interface/X(用户界面/X窗口)

User Interface/X Hardware Support(用户界面/X硬件支持)

【例5-12】查询当前系统属于“开发/调试器”类别的包有哪些。

命令如下。

  [root@server ~]# rpm -qg "Development/Debuggers"
  lsof-4.72-1.1
  crash-4.0-2
  sysreport-1.3.15-5
  ltrace-0.3.36-2.EL4
  strace-4.5.13-0.EL4.1
  valgrind-2.2.0-5.EL4
  valgrind-callgrind-0.9.9-1
  gdb-6.3.0.0-1.63
  pstack-1.2-6

-d:显示软件包中的说明文件列表。RPM将软件包中的文件分为三类,一类是配置文件,一类是说明文件,还有一类是可执行文件。文件类型后面跟完整包名,切记不是以“.rpm”为后缀的rpm包。

【例5-13】查询file软件包中的说明文件。

命令如下。

  [root@server108 cicro]# rpm -qd  file-4.10-2
  /usr/share/doc/file-4.10/LEGAL.NOTICE
  /usr/share/doc/file-4.10/README
  /usr/share/man/man1/file.1.gz
  /usr/share/man/man3/libmagic.3.gz
  /usr/share/man/man5/magic.5.gz

-s:与“-l”选项类似,除了显示软件包中的所有文件列表信息,还显示每个文件的状态。RPM已安装的软件包中,文件拥有四种状态,分别是normal(正常状态,表示文件没有被其他软件包修改过)、not installed(未安装状态,表示文件没有安装)、replaced(已替换状态,表明此文件已经被其他软件包修改替换过)、net shared(网络共享状态,表示此文件处于网络共享状态)。

【例5-14】查询ipvsadm-1.24-6包中每个文件的状态。

命令如下。

  [root@localhost ~]# rpm -i --excludedocs ipvsadm-1.24-6.i386.rpm
  [root@localhost ~]# rpm -qs ipvsadm-1.24-6
  normal        /etc/rc.d/init.d/ipvsadm
  normal        /sbin/ipvsadm
  normal        /sbin/ipvsadm-restore
  normal        /sbin/ipvsadm-save
  not installed /usr/share/doc/ipvsadm-1.24
  not installed /usr/share/doc/ipvsadm-1.24/README
  not installed /usr/share/man/man8/ipvsadm-restore.8.gz
  not installed /usr/share/man/man8/ipvsadm-save.8.gz
  not installed /usr/share/man/man8/ipvsadm.8.gz

从上面可以看到,在安装ipvsadm-1.24-6.i386.rpm的时候指定不安装说明文档,然后通过“-s”命令查看文件状态时,软件包的说明文档状态均为“not installed”。

-R (或--requires):显示软件包所需的功能。所谓功能,可以是软件包标识,也可以是共享动态库文件等。软件包的依赖关系就是依靠功能来实现的,如果所需的功能不存在,则依赖关系一定得不到满足,软件安装就会失败。

--provides:显示软件包提供的功能。这个功能可以是动态库文件,也可以是虚拟软件的包名等。

【例5-15】查询nxclient-2.1.0-17.i386.rpm提供的功能。

命令如下。

  [root@localhost ~]# rpm -qp --provides nxclient-2.1.0-17.i386.rpm
  nxclient = 2.1.0-17

可以看到这个软件提供了nxclient的功能。

对于一个已经安装的软件包,还可以把一系列的参数组合起来用,比如:rpm –qil。

【例5-16】查询YUMex_0.42-3.0.fc4_noarch包的依赖关系。

命令如下。

  [root@localhost archives]# rpm -qpR YUMex_0.42-3.0.fc4_noarch.rpm
  /bin/bash
  /usr/bin/python
  config(YUMex) = 0.42-3.0.fc4
  pygtk2
  pygtk2-libglade
  rpmlib(CompressedFileNames) <= 3.0.4-1
  rpmlib(PayloadFilesHavePrefix) <= 4.0-1
  usermode
  YUM >= 2.3.2

其中,常用的软件包信息查看参数如表5-2所示。

表5-2 RPM软件包信息查看参数说明

查看软件是否安装的界面如图5-5所示。

图5-5 查看软件是否安装

查看已安装软件信息的界面如图5-6所示。

图5-6 查看已安装软件信息

查询已经安装的软件包文件列表如图5-7所示。

图5-7 查询已安装软件包文件列表

在Linux系统安装应用软件时,会自动分门别类地向相应的目录中复制对应的程序文件,并进行相关设置。典型的应用程序通常由以下几部分组成,具体如表5-3所示。

表5-3 应用程序组成

查询文件由哪个程序生成的界面如图5-8所示。

图5-8 查询文件生成程序

当系统中的某个程序文件损坏或丢失时,利用执行“rpm -qf”命令后的查询结果,可以重新安装相应的软件包,如图5-9所示。

图5-9 程序文件损坏时重新安装软件包

安装coreutils的时候提示已经安装,这时候需要使用参数--force强制重新安装。重新安装成功后使用touch命令时会提示无法创建,是只读的文件系统,这时候重启系统就可以了。

查询软件包配置文件信息的界面如图5-10所示。

图5-10 查询软件包配置文件

3.验证软件包

软件包在使用之前,可通过命令进行验证,已确定是否正常安装。

(1)验证已经安装的软件包

校验是否已安装软件包,比较的是某软件包安装的文件和原始软件包中的同一文件的信息是否一致。它校验每个文件的大小、权限、MD5值、类型、所有者以及组群。

命令格式如下。

  rpm -V [辅助选项] package1…packageN

主选项说明如下。

-V:verify的缩写,也可以用“--verify”代替。此参数主要校验已经安装的软件包内的文件和最初安装时是否一致。

参数说明如下。

package1…packageN表示需要校验的且已经安装的软件包名。

辅助选项说明如下。

-p:验证软件包文件。

【例5-17】验证rsh包的安装状态。

操作过程如下。

  [root@localhost ~]# rpm -V rsh-0.17-25.3
  package rsh-0.17-25.3 is not installed
  [root@localhost ~]# rpm -Vp rsh-0.17-25.3.i386.rpm
  warning: rsh-0.17-25.3.i386.rpm: V3 DSA signature: NOKEY, key ID db2a6e
  missing     /usr/bin/rcp
  missing     /usr/bin/rexec
  missing     /usr/bin/rlogin
  missing     /usr/bin/rsh
  missing   d /usr/share/man/man1/rcp.1.gz
  missing   d /usr/share/man/man1/rexec.1.gz
  missing   d /usr/share/man/man1/rlogin.1.gz
  missing   d /usr/share/man/man1/rsh.1.gz
  [root@localhost ~]# rpm -ivh rsh-0.17-25.3.i386.rpm
  warning: rsh-0.17-25.3.i386.rpm: V3 DSA signature: NOKEY, key ID db2a6e
  Preparing...   ########################### [100%]
  1:rsh     ######################## [100%]
  [root@localhost ~]# rpm -Vp rsh-0.17-25.3.i386.rpm
  warning: rsh-0.17-25.3.i386.rpm:V3 DSA signature: NOKEY, key ID db2a6e
  [root@localhost ~]# rpm -V rsh-0.17-25.3

在上面的操作过程中,首先验证了rsh,从结果可知rsh没有在系统中安装,接下来安装rsh软件包。当再次查看rsh包状态时,没有任何输出,表示软件包文件全部正常。

-f:校验文件在所属软件包中的状态。此选项后面跟相应的文件名。

【例5-18】检验mysqlclient包中各个文件的状态。

操作过程如下。

  [root@localhost ~]# rpm -ql mysqlclient10-3.23.58-4.RHEL4.1
  /etc/ld.so.conf.d/mysqlclient10-i386.conf
  /usr/lib/mysql/libmysqlclient.so.10
  /usr/lib/mysql/libmysqlclient.so.10.0.0
  /usr/lib/mysql/libmysqlclient_r.so.10
  /usr/lib/mysql/libmysqlclient_r.so.10.0.0
  [root@localhost ~]# mv \
  >/usr/lib/mysql/libmysqlclient.so.10  /usr/lib/mysql/libmysqlclient.so.10.d
  [root@localhost ~]# rpm –V mysqlclient10-3.23.58-4.RHEL4.1
  missing     /usr/lib/mysql/libmysqlclient_r.so.10
  [root@localhost ~]# rpm -Vf  /usr/lib/mysql/libmysqlclient_r.so.10
  missing     /usr/lib/mysql/libmysqlclient_r.so.10

这里首先检查mysqlclient包中包含的所有文件,然后模拟删除mysqlclient包中一个文件,然后查看这个文件的状态,可以看到显示为“missing”。如果通过“-Vf”选项检查某个文件,没有任何输出时,表示这个文件状态正常。

-a:检验所有的软件包。

-g:检验所有属于组的软件包。

(2)验证未安装的软件包

发行的RPM格式的软件包是否值得信任,是否损坏,可以通过RPM提供的选项进行验证。RPM软件包一般使用GNU隐私卫士(或称GPG)来签名,从而帮助使用者确定下载软件包的可信任性。

命令格式如下。

  rpm -K file1.rpm…fileN.rpm

主选项说明如下。

-K:checksig的缩写,也可以用“--checksig”。这个选项用来检查RPM软件包文件的md5校验和GPG签名。

参数说明:file1.rpm…fileN.rpm表示需要校验软件包名。

【例5-19】校验nxserver-2.1.0-22.i386软件包是否被篡改或损坏。

使用如下命令检查。

  [root@localhost ~]# rpm -K nxserver-2.1.0-22.i386.rpm
  nxserver-2.1.0-22.i386.rpm: md5 OK

这里的“md5 OK”表示文件在下载中没有被损坏或者没有被篡改,即这个文件是安全的。

  [root@localhost ~]# rpm -K ipvsadm-1.24-6.i386.rpm
  pvsadm-1.24-6.i386.rpm: (SHA1) DSA sha1 md5 (GPG) NOT OK (MISSING KEYS:
GPG#443e1821)

上面的输出表示这个软件没有被授权签名。在安装未被Linux发行商授权的软件包时,请务必谨慎,因为这些软件包内可能包含有害的代码。

4.更新软件包

命令格式如下。

  rpm -U [辅助选项] file1.rpm…fileN.rpm

主选项说明如下。

-U:upgrade的缩写,可以使用“--upgrade”代替。

参数说明:file1.rpm…fileN.rpm表示需要升级的rpm文件包。

辅助选项说明如下。

--oldpackage:表示允许“升级”到一个老版本,即软件版本降级。

其他选项与安装RPM软件包辅助参数完全相同,这里不再赘述。

【例5-20】将rsh从rsh-0.17-25.3升级到rsh-0.17-37.el5。

操作步骤如下。

  [root@localhost ~]# rpm  -q rsh
  rsh-0.17-25.3
  [root@localhost ~]# rpm  -Uvh rsh-0.17-37.el5.i386.rpm
  warning: rsh-0.17-37.el5.i386.rpm: V3 DSA signature: NOKEY, key ID 37017186
  Preparing... ######################### [100%]
  1:rsh    ########################### [100%]
  [root@localhost ~]# rpm  -q rsh
  rsh-0.17-37.el5

5.删除软件包

命令格式如下。

  rpm -e [辅助选项] package1…packageN

主选项说明如下。

-e:erase的缩写,也可以用“--erase”代替。

参数说明:package1…packageN表示已经安装的软件包名称。

辅助选项说明如下。

--test:只执行删除的测试。

--nodeps:不检查依赖性。

【例5-21】删除rsh软件包。

使用以下命令。

  [root@localhost ~]# rpm  -q rsh
  rsh-0.17-37.el5
  [root@localhost ~]# rpm  -e rsh-0.17-37.el5
  [root@localhost ~]# rpm  -q rsh
  package rsh is not installed

【例5-22】删除gcc软件包,但是存在依赖关系。

操作过程如下。

  [root@server ~]# rpm -e gcc
  error: Failed dependencies:
  gcc = 3.4.4-2 is needed by (installed) gcc-c++-3.4.4-2.i386
  gcc = 3.4.4-2 is needed by (installed) gcc-g77-3.4.4-2.i386
  gcc = 3.4.4-2 is needed by (installed) gcc-java-3.4.4-2.i386
  gcc = 3.4.3 is needed by (installed) libtool-1.5.6-4.EL4.1.i386
  gcc is needed by (installed) systemtap-0.4-0.EL4.i386

这里又出现要求删除依赖性的提示了。根据上面的提示可知,要删除gcc软件包,必须删除与gcc相互依赖的五个软件包。这个操作要非常慎重,除非知道删除后对系统没有影响,否则一定不要盲目执行删除操作,因为这样可能导致系统的崩溃。其实这里也可以加入“--nodeps”参数,忽略依赖关系,但是这样可能会导致相关依赖软件的不可用。

卸载软件建议使用rpm,尽量不使用yum。因为yum卸载时候会把依赖的包一起卸载,可能导致其他软件无法正常使用。