Linux下rpm那点事

回复 收藏
本帖最后由 dyqd2011 于 2016-1-8 14:43 编辑

简介:
      RPM 全名是『 RedHat Package Manager 』简称则为 RPM 。顾名思义,当初这个软件管理的机制是由 Red Hat 这家公司发展出来的。RPM 是以一种数据库记录的方式来将你所需要的软件安装到你的 Linux 系统的一套管理机制。他最大的特点就是将你要安装的软件先编译过, 并且打包成为 RPM 机制的包装文件,透过包装好的软件里头默认的数据库记录, 记录这个软件要安装的时候必须具备的相依属性软件,当安装在你的 Linux 主机时, RPM 会先依照软件里头的数据查询 Linux 主机的相依属性软件是否满足, 若满足则予以安装,若不满足则不予安装。那么安装的时候就将该软件的资讯整个写入 RPM 的数据库中,以便未来的查询、验证与反安装。它有一下优点:

  • RPM 内含已经编译过的程序与配置档等数据,可以让使用者免除重新编译的困扰;
  • RPM 在被安装之前,会先检查系统的硬盘容量、操作系统版本等,可避免文件被错误安装;
  • RPM 文件本身提供软件版本资讯、相依属性软件名称、软件用途说明、软件所含文件等资讯,便于了解软件;
  • RPM 管理的方式使用数据库记录 RPM 文件的相关参数,便于升级、移除、查询与验证。
       但是这也造成些许的困扰。由于 RPM 文件是已经包装好的数据,也就是说, 里面的数据已经都『编译完成』了。所以,该软件文件几乎只能安装在原本默认的硬件与操作系统版本中。 也就是说,你的主机系统环境必须要与当初创建这个软件文件的主机环境相同才行。所以,通常不同的发行版所释出的 RPM 文件,并不能用在其他的发行版上。举例来说,Red Hat 释出的 RPM 文件,通常无法直接在 SUSE 上面进行安装的。更有甚者,相同发行版的不同版本之间也无法互通,例如 CentOS 4.x 的 RPM 文件就无法直接套用在 CentOS 5.x !因此,它也有以下几条缺点:

  • 软件文件安装的环境必须与打包时的环境需求一致或相当;
  • 需要满足软件的相依属性需求;
  • 反安装时需要特别小心,最底层的软件不可先移除,否则可能造成整个系统的问题。
      如果我真的想要安装其他发行版提供的好用的 RPM 软件文件时可以使用SRPM 。SRPM 是 Source RPM 的意思,也就是这个 RPM 文件里面含有原始码。特别注意的是,这个 SRPM 所提供的软件内容『并没有经过编译』, 他提供的是原始码。通常 SRPM 的扩展名是以 ***.src.rpm 这种格式来命名的。SRPM 虽然内容是原始码, 但是他仍然含有该软件所需要的相依性软件说明、以及所有 RPM 文件所提供的数据。同时,他与 RPM 不同的是,他也提供了参数配置档 (就是 configure 与 makefile)。所以,如果我们下载的是 SRPM ,那么要安装该软件时,你就必须要:

  • 先将该软件以 RPM 管理的方式编译,此时 SRPM 会被编译成为 RPM 文件;
  • 然后将编译完成的 RPM 文件安装到 Linux 系统当中
      通常一个软件在释出的时候,都会同时释出该软件的 RPM 与 SRPM 。我们现在知道 RPM 文件必须要在相同的 Linux 环境下才能够安装,而 SRPM 既然是原始码的格式,自然我们就可以透过修改 SRPM 内的参数配置档,然后重新编译产生能适合我们 Linux 环境的 RPM 文件,如此一来就可以将该软件安装到我们的系统当中,而不必与原作者打包的 Linux 环境相同了,这就是 SRPM 的用处。
文件包含义解释:如 vim-minimal-7.4.629-5.el6.x86_64.rpm
   vim-minimal    -   7.4.629  -     5     el6       .x86_64         .rpm
              软件名称      软件的版本号   释出的次数  发行版信息   适合的硬件平台  扩展名
各部分以『-』来隔开,这样子可以很清楚的发现该软件的名称、软件的版本号、被打包的次数、发行版信息、硬件平台信息、扩展名。
(1)软件的版本号
        每一次升级版本就需要有一个版本的信息,否则如何知道这一版是新是旧?这里通常又分为主版本跟次版本。以上面为例,主版本为 7 ,在主版本的架构下更动部分原始码内容,而释出一个新的版本,就是次版本。以上面为例,就是 4。
(2)被打包的次数
        通常就是编译的次数。那么为何需要重复的编译呢?这是由于同一版的软件中,可能由于有某些 bug 或者是安全上的顾虑,所以必须要进行小幅度的 patch 或重设一些编译参数。 配置完成之后重新编译并打包成 RPM 文件。因此就有不同的打包数出现了。
(3)系统发行版信息
        el表示企业Linux,即Enterprise Linux,6表示版本号,即该软件包可应用在6.X的发行版上。
(4)操作硬件平台:
        由于 RPM 可以适用在不同的操作平台上,但是不同的平台配置的参数还是有所差异性的并且我们可以针对比较高阶的 CPU 来进行最佳化参数的配置,这样才能够使用高阶 CPU 所带来的硬件加速功能。 所以就有所谓的 i386, i586, i686, x86_64 与 noarch 等的文件名称的出现:

  • i386:几乎适用于所有的 x86,即32位 平台,不论是旧的 pentum 或者是新的 Intel Core 2 与 K8 系列的 CPU 等等,都可以正常的工作。那个 i 指的是 Intel 兼容的 CPU 的意思,至于 386 就是 CPU 的等级;
  • i586:就是针对 586 等级的计算机进行最佳化编译。包括 pentum 第一代 MMX CPU, AMD 的 K5, K6 系列 CPU (socket 7 插脚) 等等的 CPU 都算是这个等级;
  • i686:在 pentun II 以后的 Intel 系列 CPU ,及 K7 以后等级的 CPU 都属于这个 686 等级。 由于目前市面上几乎仅剩 P-II 以后等级的硬件平台,因此很多 发行版都直接释出这种等级的 RPM 文件;
  • x86_64:针对 64 位的 CPU 进行最佳化编译配置,包括 Intel 的 Core 2 以上等级 CPU ,以及 AMD 的 Athlon64 以后等级的 CPU ,都属於这一类型的硬件平台;
  • noarch:就是没有任何硬件等级上的限制。一般来说,这种类型的 RPM 文件,里面应该没有 binary program 存在, 较常出现的就是属于 shell script 方面的软件。
      受惠于目前 x86 系统的支持方面,新的 CPU 都能够运行旧型 CPU 所支持的软件,也就是说硬件方面都可以向下兼容的, 因此最低等级的 i386 软件可以安装在所有的 x86 硬件平台上面,不论是 32 位还是 64 位。但是反过来说就不行了。举例来说,目前硬件大多是 64 位的等级,因此你可以在该硬件上面安装 x86_64 或 i386 等级的 RPM 软件。但在你的旧型主机,例如 P-III/P-4 32 位机器上面,就不能够安装 x86_64 的软件。

RPM默认安装的路径:一般来说,RPM 类型的文件在安装的时候,会先去读取文件内记载的配置参数内容,然后将该数据用来比对 Linux 系统的环境,以找出是否有属性相依的软件尚未安装的问题。若环境检查合格了,那么 RPM 文件就开始被安装到你的 Linux 系统上。安装完毕后,该软件相关的资讯就会被写入 /var/lib/rpm/ 目录下的数据库文件中。
常用选项
-a:查询所有套件;
-c:只列出组态配置文件,本参数需配合"-l"参数使用;
-d:只列出文本文件,本参数需配合"-l"参数使用;
-e<套件档>或--erase<套件档>:删除指定的套件;
-f<文件>+:查询拥有指定文件的套件;
-h或--hash:套件安装时列出标记;
-i:显示套件的相关信息;
-i<套件档>或—install<套件档>:安装指定的套件档;
-l:显示套件的文件列表;
-p<套件档>+:查询指定的RPM套件档;
-q:使用询问模式,当遇到任何问题时,rpm指令会先询问用户;
-R:显示套件的关联性信息;
-s:显示文件状态,本参数需配合"-l"参数使用;
-U<套件档>或--upgrade<套件档>:升级指定的套件档;
-v:显示指令执行过程;
-vv:详细显示指令执行过程,便于排错。
安装软件包:rpm -ivh (rpm软件包名称)
rpm 安装时常用的选项与参数说明:
--nodeps:当发生软件属性相依问题而无法安装,但你执意安装时。
危险性: 软件会有相依性的原因是因为彼此会使用到对方的机制或功能,如果强制安装而不考虑软件的属性相依, 则可能会造成该软件的无法正常使用。
--replacefiles:如果在安装的过程当中出现了『某个文件已经被安装在你的系统上面』的信息,又或许出现版本不合的信息 (confilcting files) 时,可以使用这个参数来直接覆盖文件。
危险性: 覆盖的动作是无法复原的!所以,你必须要很清楚的知道被覆盖的文件是真的可以被覆盖,否则会后悔无穷的。
--replacepkgs: 重新安装某个已经安装过的软件!如果你要安装一堆 RPM 软件文件时,可以使用 rpm -ivh *.rpm ,但若某些软件已经安装过了, 此时系统会出现『某软件已安装』的信息,导致无法继续安装。此时可使用这个选项来重复安装。
--force:这个参数其实就是 --replacefiles 与 --replacepkgs 的综合体。
--test: 想要测试一下该软件是否可以被安装到使用者的 Linux 环境当中,可找出是否有属性相依的问题。
范例为:rpm -ivh vim-minimal-7.4.629-5.el6.x86_64.rpm --test
--justdb:由于 RPM 数据库破损或者是某些缘故产生错误时,可使用这个选项来升级软件在数据库内的相关信息。
--nosignature: 想要略过数码签章的检查时,可以使用这个选项。--prefix 新路径: 要将软件安装到其他非正规目录时。举例来说,你想要将某软件安装到 /usr/local 而非正规的 /bin, /etc 等目录, 就可以使用『 --prefix /usr/local 』来处理了。
--noscripts:不想让该软件在安装过程中自行运行某些系统命令。RPM 的优点除了可以将文件放置到定位之外,还可以自动运行一些前置作业的命令,例如数据库的初始化。 如果你不想要让 RPM 帮你自动运行这一类型的命令,就加上他吧!
注:一般来说,rpm 的安装选项与参数大约就是这些了。建议直接使用 –ivh 来进行安装, 如果安装的过程中发现问题,一个一个去将问题找出来,尽量不要使用 --force 去强制安装! 因为可能会发生很多不可预期的问题。除非你很清楚的知道使用上面的参数后,安装的结果是你预期的。
软件包的升级:rpm –Uvh/-Fvh (待升级的软件包名称)
-Uvh 与 -Fvh 可以用的选项与参数,跟安装是一样的。不过, -U 与 -F 的意义还是不太一样的,基本的差别如下:
-Uvh:后面接的软件即使没有安装过,则系统将予以直接安装; 若后面接的软件有安装过旧版,则系统自动升级至新版;
-Fvh:如果后面接的软件并未安装到你的系统上,则该软件不会被安装;即只有已安装至你 系统内的软件才会被升级。
如果你想要大量的升级系统旧版本的软件时,使用 -Fvh 则是比较好的作法,因为没有安装的软件才不会被不小心安装进系统中。
rpm查询:rpm –q (需查询的软件包名称)-q :仅查询,后面接的软件名称是否有安装;
rpm -q logrotate                               rpm -q logrotating
logrotate-3.7.4-8                               package logrotating is not installed
注:只需要写软件包的名称,不含版本号信息。
-qa :列出所有的,已经安装在本机上面的所有软件名称;
-qi :列出该软件的详细信息 (information),包含开发商、版本与说明等;
rpm -qi vim-enhanced
Name        : vim-enhanced                 Relocations: (not relocatable)
Version     : 7.4.629                           Vendor: CentOS
Release     : 5.el6                         Build Date: 2015年07月24日 星期五 10时23分32秒
Install Date: 2016年01月06日 星期三 12时09分09秒      Build Host: c6b8.bsys.dev.centos.org
Group       : Applications/Editors          Source RPM: vim-7.4.629-5.el6.src.rpm
Size        : 2286418                          License: Vim
Signature   : RSA/SHA1, 2015年07月25日 星期六 04时36分51秒, Key ID 0946fca2c105b9de
Packager    : CentOS BuildSystem <
http://bugs.centos.org>
URL         :
http://www.vim.org/
Summary     : A version of the VIM editor which includes recent enhancements
Description :
VIM (VIsual editor iMproved) is an updated and improved version of the
vi editor.  Vi was the first real screen-based editor for UNIX, and is
still very popular.  VIM improves on vi by adding new features:
multiple windows, multi-level undo, block highlighting and more.  The
vim-enhanced package contains a version of VIM with extra, recently
introduced features like Python and Perl interpreters.

Install the vim-enhanced package if you'd like to use a version of the
VIM editor which includes recently added enhancements like
interpreters for the Python and Perl scripting languages.  You'll also
need to install the vim-common package.

-ql :列出该软件所有的文件与目录所在的完整名 (list); rpm -ql vim-enhanced
/etc/profile.d/vim.csh
/etc/profile.d/vim.sh
/usr/bin/rvim
/usr/bin/vim
/usr/bin/vimdiff
/usr/bin/vimtutor

-qc :列出该软件的所有配置档 (找出在 /etc/ 底下的档名而已) ;-qd :列出该软件的所有说明档 (找出与 man 有关的文件而已) ;-qR :列出与该软件有关的相依软件所含的文件 (Required 的意思) ;
rpm -qR vim-enhanced
/bin/sh
config(vim-enhanced) = 2:7.4.629-5.el6
libacl.so.1()(64bit)
libacl.so.1(ACL_1.0)(64bit)
libc.so.6()(64bit)
libc.so.6(GLIBC_2.11)(64bit)
libc.so.6(GLIBC_2.2.5)(64bit)
libc.so.6(GLIBC_2.3)(64bit)
libc.so.6(GLIBC_2.3.4)(64bit)
libc.so.6(GLIBC_2.4)(64bit)
libdl.so.2()(64bit)
libdl.so.2(GLIBC_2.2.5)(64bit)
libgpm.so.2()(64bit)
libm.so.6()(64bit)
libm.so.6(GLIBC_2.2.5)(64bit)
libperl.so()(64bit)
libpthread.so.0()(64bit)
libpthread.so.0(GLIBC_2.2.5)(64bit)
libselinux.so.1()(64bit)
libtinfo.so.5()(64bit)
perl(:MODULE_COMPAT_5.10.1)
rpmlib(CompressedFileNames) <= 3.0.4-1
rpmlib(FileDigests) <= 4.6.0-1
rpmlib(PayloadFilesHavePrefix) <= 4.0-1
rpmlib(VersionedDependencies) <= 3.0.3-1
rtld(GNU_HASH)
vim-common = 2:7.4.629-5.el6
which
rpmlib(PayloadIsXz) <= 5.2-1

-qf :由后面接的文件名称,找出该文件属於哪一个已安装的软件;查询某个 RPM 文件内含有的资讯:;-qp[icdlR]:注意 -qp 后面接的所有参数以上面的说明一致。但用途仅在於找出 某个 RPM 文件内的资讯,而非已安装的软件资讯。注:要特别说明的是,在查询本机上面的 RPM 软件相关信息时, 不需要加上版本的名称,只要加上软件名称即可。因为他会由 /var/lib/rpm 这个数据库里面去查询, 所以我们可以不需要加上版本名称。但是查询某个 RPM 文件就不同了,我们必须要列出整个文件的完整名才行。

2016-01-08 12:48 举报
已邀请:
0

lyhabc

赞同来自:

本帖最后由 lyhabc 于 2016-1-8 13:57 编辑

好文noarch:就是没有任何硬件等级上的限制。
0

sunwang33

赞同来自:

不错,学习了。
0

zyos

赞同来自:

好长。

回复帖子,请先登录注册

退出全屏模式 全屏模式 回复
评分
可选评分理由: