rpm包管理详解(3)
2010-05-09 17:17
330 查看
rpm包之间会维持依赖关系,这是包管理系统的特色。我们都经历过安装一个包而因为依赖缺失而装不上的情况。后来yum的出现能一定程度解决这个问题,但我们仍然有必要了解rpm依赖关系背后的细节。
自己打过rpm包的人都知道,在包的spec配置文件往往要明确写出此包所依赖的包名或文件名,同时也可能需要明确写出此包所提供的内容。这个内容可能是动态库也可能是其他一些名字,并不一定是文件名。各个包之间正是依靠这些内容来建立依赖关系的,每个包都提供一些内容同时依赖一些别的内容,整个系统就在这样一种相互依赖中形成了。
在看具体的例子之前先介绍几个指令:
rpm -qR [包名] 可以用来查询指定包所依赖的内容
rpm -q –provides [包名] 可以用来查询指定包所提供的内容
rpm -q –whatprovides [内容] 可以用来查询哪个包提供了指定内容
rpm -q –whatrequires [内容] 可以用来查看哪些包依赖于指定内容
例如我们以time这个包为例进行查询,结果如下:
可见,time这个包如果要安装,上述内容必须已经存在,否则将会提示依赖缺失而无法安装。我们以列表中的/bin/sh为例进行反查,可以看到系统中哪个包提供了/bin/sh
很明显,bash这个包提供了/bin/sh,正是由于bash的安装才满足了time的安装需求。
time依赖于bash等包,同时它也提供了一些内容,有可能被别的包依赖:
不幸的是系统中并没有包依赖于time,因为它本身属于较上层的包。
对于一些底层内容就会有很多包依赖它,例如之前碰到的/bin/sh:
由于篇幅所限就不全列举出来了,这种依赖关系应该可以一目了然了。
和上节类似,rpm -qR和rpm -q –provides这两个查询指令同样可以加上-p参数应用到一个未安装的rpm包,例如
可以看到,enca这个rpm包提供了动态库libenca.so.0和enca本身。
通过使用本节这四条依赖关系查询指令基本可以了解到系统上众多rpm包之间的耦合关系,明确了这一点,我们对rpm的理解也就更深了一步。
自己打过rpm包的人都知道,在包的spec配置文件往往要明确写出此包所依赖的包名或文件名,同时也可能需要明确写出此包所提供的内容。这个内容可能是动态库也可能是其他一些名字,并不一定是文件名。各个包之间正是依靠这些内容来建立依赖关系的,每个包都提供一些内容同时依赖一些别的内容,整个系统就在这样一种相互依赖中形成了。
在看具体的例子之前先介绍几个指令:
rpm -qR [包名] 可以用来查询指定包所依赖的内容
rpm -q –provides [包名] 可以用来查询指定包所提供的内容
rpm -q –whatprovides [内容] 可以用来查询哪个包提供了指定内容
rpm -q –whatrequires [内容] 可以用来查看哪些包依赖于指定内容
例如我们以time这个包为例进行查询,结果如下:
[leconte@localhost soft]$ rpm -qR time /bin/sh /bin/sh /sbin/install-info libc.so.6 libc.so.6(GLIBC_2.0) libc.so.6(GLIBC_2.1) libc.so.6(GLIBC_2.3.4) rpmlib(CompressedFileNames) <= 3.0.4-1 rpmlib(PayloadFilesHavePrefix) <= 4.0-1 rtld(GNU_HASH)
可见,time这个包如果要安装,上述内容必须已经存在,否则将会提示依赖缺失而无法安装。我们以列表中的/bin/sh为例进行反查,可以看到系统中哪个包提供了/bin/sh
[leconte@localhost soft]$ rpm -q --whatprovides "/bin/sh" bash-3.2-24.el5
很明显,bash这个包提供了/bin/sh,正是由于bash的安装才满足了time的安装需求。
time依赖于bash等包,同时它也提供了一些内容,有可能被别的包依赖:
[leconte@localhost soft]$ rpm -q --provides time time = 1.7-27.2.2 [leconte@localhost soft]$ rpm -q --whatrequires 'time' no package requires time
不幸的是系统中并没有包依赖于time,因为它本身属于较上层的包。
对于一些底层内容就会有很多包依赖它,例如之前碰到的/bin/sh:
[leconte@localhost soft]$ rpm -q --whatrequires '/bin/sh' bash-3.2-24.el5 bash-3.2-24.el5 info-4.8-14.el5 ncurses-5.5-24.20060715 libxml2-2.6.26-2.1.2.7 readline-5.1-1.1 ......................省略n行
由于篇幅所限就不全列举出来了,这种依赖关系应该可以一目了然了。
和上节类似,rpm -qR和rpm -q –provides这两个查询指令同样可以加上-p参数应用到一个未安装的rpm包,例如
[leconte@localhost soft]$ rpm -qp --provides enca-1.9-4.el5.rf.i386.rpm warning: enca-1.9-4.el5.rf.i386.rpm: Header V3 DSA signature: NOKEY, key ID 6b8d79e6 libenca.so.0 enca = 1.9-4.el5.rf
可以看到,enca这个rpm包提供了动态库libenca.so.0和enca本身。
通过使用本节这四条依赖关系查询指令基本可以了解到系统上众多rpm包之间的耦合关系,明确了这一点,我们对rpm的理解也就更深了一步。
相关文章推荐
- 详解程序包管理RPM
- Linux之rpm管理及yum详解
- rpm包管理详解(结合rpm,rpm2cpio,cpio提取rpm包的特定文件) - 上海嵌入式家园 贺工
- RPM包管理详解
- 程序包管理一之概论及rpm详解
- rpm包手工管理详解
- Linux rpm 命令参数使用详解:RPM是RedHat Package Manager(RedHat软件包管理工具)类似Windows里面的“添加/删除程序”
- rpm包管理详解(4)
- rpm包管理功能详解
- Linux下程序包管理rpm、yum及编译安装详解
- RPM 程序包管理详解
- linux yum命令详解 yum(全称为 Yellow dog Updater, Modified)是一个在Fedora和RedHat以及SUSE中的Shell前端软件包管理器。基於RPM包管理,能
- rpm软件包管理工具详解
- rpmsign命令_Linux rpmsign 命令用法详解:使用RPM软件包的签名管理工具
- CentOS中rpm包管理详解
- rpm 包 管理 详解
- RPM包管理及RPM命令详解
- rpm管理软件包,以及源码安装详解
- rpm包管理详解(1)
- rpm包管理详解