软件安装:RPM

来源:互联网 发布:java继承和多态的作用 编辑:程序博客网 时间:2024/05/22 04:46

软件安装:RPM

 

虽然使用源代码进行软件编译可以具有定制化的设置,但对于Linux distribution 的发行商来说。则有软件管理不易的问题,毕竟不是每个人都会进行源代码编译,如果能将软件预先在相同的软件与操作系统上面编译好才发行的话,不就能够让相同的distribution 具有完全一致的软件版本吗?然而RPM 与 YUM 这两个好用的小东东就可以让我们对软件管理简易得多~

Linux界的两大主流:RPM 和DPKG

DPKG:这个机制最早是由Debian Linux 社区所开发出来的,通过dpkg的机制,    Debian提提供的软件就能够简单安装起来,同时还能提供安装后的信息,很不错的哦~~~~只要是派生于Debian的其他Linux distribution 大多使用这个机制来管理软件,包括B2D,Ubuntu等;

PRM:最早是由redhat公司开发出来的,后来实在是好用,因此很多distribution 就是使用这个机制作为软件安装的管理方式,包括Centos,suse等知名的开发商。

如前所述,不论是dpkg还是rpm,这些机制都有一些软件属性依赖的问题,那该如何解决呢?其实前面不是谈到过每个软件都有依赖属性的检查,如果将依赖属性的数据做成列表,等到实际安装时,若发生依赖属性的软件情况时,比如安装A需要先安装B与C,而安装B需要先安装D与E,等到你安装A时,通过依赖属性列表,管理机制自动去取得B,C,D,E来同时安装,不就解决了属性依赖的问题了吗?我们这里使用的是Centos系统,所以说:使用的软件管理机制为RPM机制,而用来作为在线升级的方式则为yum,下面就让我们来谈谈RPM的相关说明吧!

RPM的优点

rpm是通过预编译并打包成为rpm文件格式后再加以安装,同时还能进行数据库的记载,所以具有以下的优点:

  1. rpm内含已经编译过的程序与设置文件等数据,可以让用户免去重新编译的困扰。
  2. rpm本身在安装之前,会检查系统的硬盘容量,操作系统版本,可避免文件被错误安装。
  3. rpm文件本身提供软件的版本信息,依赖属性软件名称,软件用途的说明,软件所好的文件信息,便于了解软件。
  4. rpm的管理方式使用数据库记录rpm文件的相关参数,便于升级,删除,查询及验证。
  5. 然而当你要安装某个以rpm类型提供的软件时,在安装的过程中,rpm会去检验一下数据库里面是否已经存在相关的软件了,如果显示存在,那这个rpm就"默认"不能安装,这个就是rpm最让人诟病的"软件的依赖属性问题"

RPM属性依赖的解决方式:YUM在线升级

 

 

  1. Centos先将发布的软件放置到YUM服务器内,然后分析这些软件的依赖属性,将软件内的记录信息写下来(header),然后再将这些信息分析记录成软件相关的清单列表,这些列表数据与软件所在的位置可以称为容器(repository),客户端有软件安装的需求时,客户端主机主动向网络上的yum服务器的容器网址下载清单列表,然后通过清单列表的数据与RPM数据库已经存在的数据相比较,就能够安装所有具有依赖属性的软件了,整个流程图可以简单的用下图说明:

 

 

  1. 当客户端有升级,安装的需求时,yum会向容器要求清单的更新,等到清单更新到本机的/var/cache/yum里面后,等一下更新就会用这个本机清单与本机的rpm数据库进行比较,这样就知道该下载什么软件,接下来yum会跑到容器服务器上(yum server)下载所需要的软件,然后再通过rpm的机制开始安装软件,这就是整个流程。

RPM软件管理程序:rpm

  1. RPM默认安装的路径:环境检查合格了。rpm文件就开始安装到你的Linux系统上,系统安装完毕后,该软件相关信息就会被写入/var/lib/rpm/目录下的数据库文件中了。
  2. RPM安装

    注意rpm安装时跟的是安装包,另外我们在安装的过程中发现问题,还是执意要安装这个软件时,可以用以下的参数"强制安装"上去:

    --nodeps

    使用时机:当软件属性依赖问题而无法安装,但你执意安装时

    危险性:软件依赖性的原因是因为彼此会使用到对方的机制或功能,如果强制安装而不考虑软件的属性依赖,就会造成该软件无法使用。

    --replacefiles

    使用时机:在安装的过程中发现"某个文件已经被安装在你的系统上面"的信息,或者出现版本不合的信息(confilcting files)时,可以直接使用这个参数来直接覆盖文件。

    危险性:覆盖的文件是无法复原的,你必须很清楚的知道被覆盖的文件是真的可以被覆盖,不然,就呵呵了~~~~

    所以我就不演示了,你要是想试试,那就尽管去吧~~~~(...)

    --replacepkgs

    使用时机:重新安装某个已经安装过的软件,需要再次重复安装

    --force 使用时机:这个参数实际就是—replacefiles 与—replacepkgs的综合体

    --test 使用时机:测试一下软件是否可以被用户安装到Linux环境中,可找出是否有属性依赖的问题。

    --justdb 使用时机:由于RPM数据库损坏或者某些原因产生错误时,可以用这个参数来更新软件在数据库内的相关信息

    --nosignature 使用时机:想要越过数字证书的检查时。

     

    一般来说,rpm的安装参数就是这些了,通常直接用-ivh就好了,如果安装过程中出现问题,一个一个去将问题找出来,尽量不要使用"--force"暴力安装法。

  3. RPM升级与更新

    -Uvh 后面接的软件没有安装过,则直接安装,若后面接的软件有安装过旧版,则系统自动更新新版。

    -Fvh 后面的软件并未安装到你的Linux系统中,则不会安装,只有安装过的软件才会升级。

    如此 ,如果你想大量的升级系统的旧版本时,使用-Fvh是比较好的做法,因为没有安装过的软件不会不小心被安装到系统中。

  4. RPM查询

    在查询的部分,所有的参数之前都要加上-q,查询主要分为两个部分:一个是查询已安装到系统上面软件信息,是由/var/lib/rpm/提供,另一个是查某个rpm文件内容,等于是由rpm文件内找出一些要写入数据库的信息。

    -q 软件包名 查询已安装过的软件包名。

    -qa 列出所有的已安装过的rpm包

-qa "name*"

-qa |grep name

-qf 查询一个文件来自于哪一个rpm包 (已安装的rpm)

-q --changelog 版本更新日志

-qc 查询软件包的配置文件(不是所有包都有配置文件)

-qd 查询软件包的帮助文档

-qi 查询软件包的详细信息

-ql 查询软件包所安装到系统当中的所有文件路径

-q --scripts 查询软件包自带的脚本

-q --provides 查询自身的功能

-qR 查询实现自身的功能需要什么能力

    -qp[licd] rpm包 查看未安装的rpm包的各项信息

以上的查询命令可根据自己的需求选择,特别说明的是,在查询本机上面的RPM软件的相关信息时,不需要加上版本的名称,软件名即可,因为它会由/var/lib/rpm这个数据库里面去查询。

  1. RPM 验证与数字证书
  • 查询包安装前是否发生了改变。

rpm {-V|--verify} [select-options] [verify-options]

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 Link路径已被改变

U User ownership differs 文件的所有者已被改变

G Group ownership differs 文件的所属用户组已被改变

T mTimediffers 文件的创建时间已被改变

P capabilities differ

C 代表的是configfile 的意思,也就是文件类型的意思,文件类型的有如下几条:

c:设置文档

d:文档

g:鬼文件,通常该文件不被某个软件所包含

l:授权文件

r:自述文件

经过验证的功能,可以知道那个文件被改动过。

  • 数字证书

软件的验证只能验证/var/lib/rpm/里面的数据库信息而已,如果该软件的所提供的数据本身就有问题,那你使用验证的手段也无法确定该软件的正确性,那就需要md5指纹码来检查,不过,指纹码也可能被篡改,那我们可以通过数字证书来检验软件的来源。

当你要安装一个RPM文件时:

  1. 首先你必须要安装原厂发布的公钥文件
  2. 实际安装原厂的RPM软件时,rpm命令会去读取rpm文件的证书信息,与本机系统内的证书信息比较;
  3. 若证书相同予以安装,若找不到相关的证书信息,则警告并停止安装。

    安装完成后,基本上都是使用pubkey 作为软件的名称的。

看到这里,你们一定会觉得怎么这么多,是的!小编默默的擦掉眼泪继续敲键盘去~让我哭一会~~~

  1. 卸载RPM与重建数据库(erase/rebuilddb)

    卸载就是将软件解除安装,要注意的是,解安装的过程一定是由最上层往下层解除

    删除的属性很简单,就通过-e 即可删除,不过经常发生软件属性依赖导致无法删除某些软件的问题,可以通过以下的例子说明:

    rpm –rebuilddb 重建数据库

    好了,终于看完了吧,赶紧给个赞吧,毕竟码了这么多字~~~~~

原创粉丝点击