关于依赖包的问题

系统安装、升级讨论
版面规则
我们都知道新人的确很菜,也喜欢抱怨,并且带有浓厚的Windows习惯,但既然在这里询问,我们就应该有责任帮助他们解决问题,而不是直接泼冷水、简单的否定或发表对解决问题没有任何帮助的帖子。乐于分享,以人为本,这正是Ubuntu的精神所在。
回复
头像
szyzln
帖子: 910
注册时间: 2008-10-31 15:28
来自: 中国上海
联系:

关于依赖包的问题

#1

帖子 szyzln » 2015-12-04 9:46

我一直有这样的疑问:
1、如果说YUM和APT是自动解决依赖关系的很好的机制,它是如何做到的??有时候我们手动安装DEB包会提示缺少xx,通常这个缺少的东东只是库文件,根本不是对应的软件包。网上搜了一大把,也没人详细说明这个缺少的库文件应该通过安装什么软件包来实现。当然了,有些名字上是有关联了,但不代表全部是这样。
2、既然YUM和APT能解决这个问题,说明他们是能够知道包所依赖的库文件通过其它安装其它什么包来实现。那为何不让我们也知道知道 ????

代码: 全选

 sudo apt-get install ntop
将会安装下列额外的软件包:
  libdbi1 librrd4 ntop-data python-mako python-markupsafe
建议安装的软件包:
  graphviz geoip-database-contrib libjs-jquery libjs-jquery-ui python-beaker
  python-mako-doc
下列【新】软件包将被安装:
  libdbi1 librrd4 ntop ntop-data python-mako python-markupsafe
家乡:湖南张家界
头像
susbarbatus
帖子: 2966
注册时间: 2010-04-10 16:14
系统: Arch Linux

Re: 关于依赖包的问题

#2

帖子 susbarbatus » 2015-12-04 9:56

rpm 我不是太熟,但 dpkg -i 的时候提示缺少的一般是包名吧?

代码: 全选

root@urd:/var/cache/apt/archives# dpkg -i crafty_23.4-6_amd64.deb 
Selecting previously unselected package crafty.
(Reading database ... 58940 files and directories currently installed.)
Unpacking crafty (from crafty_23.4-6_amd64.deb) ...
dpkg: dependency problems prevent configuration of crafty:
 crafty depends on libnuma1 (>= 2.0.5); however:
  Package libnuma1 is not installed.

dpkg: error processing crafty (--install):
 dependency problems - leaving unconfigured
Processing triggers for man-db ...
Errors were encountered while processing:
 crafty
沉迷将棋中……
头像
astolia
论坛版主
帖子: 6396
注册时间: 2008-09-18 13:11

Re: 关于依赖包的问题

#3

帖子 astolia » 2015-12-04 10:42

你误会了。apt-get列出来的都是包名,和包中有没有库文件、库文件是什么名字没有必然联系。
名字上的相似是发行版打包政策的结果,包依赖机制上并没有硬性要求。
一个deb包中,会记录其依赖的其他包的包名,所以只要递归检查就行了
举个例子,某个源里有四个deb包:
包A依赖:包B、包C
包B依赖:包D
包C依赖:包D
包D依赖:无
然后你要安装包A,跟着依赖一层层走下去就知道还需安装BCD包

rpm包的基本原理也差不多,只是它直接列出依赖的库
举个例子,另一个源里有四个rpm包:
包A依赖:库X,库Y
包B提供:库X;依赖:库Z
包C提供:库Y;依赖:库Z
包D提供:库Z;依赖:无
你要安装包A,然后检查源里哪个包提供了库X和Y,查出来是B和C,继续查哪个提供了B和C需要的库Z,查到是D,最后知道需要额外安装BCD包
上次由 astolia 在 2015-12-04 11:11,总共编辑 1 次。
头像
szyzln
帖子: 910
注册时间: 2008-10-31 15:28
来自: 中国上海
联系:

Re: 关于依赖包的问题

#4

帖子 szyzln » 2015-12-04 11:06

astolia 写了: 一个deb包中,会记录其依赖的其他包的包名,所以只要递归检查就行了
至于yum,由于只能从rpm包中了解到依赖的库文件,所以yum自己会去根据包的内容和依赖关系维护一个数据库,加快递归查找的速度
哈哈,听君一席话。也就是说,DEB包头信息记录的直接是所依赖的包名称。以吗?比如下面信息:

代码: 全选

Depends: libc6 (>= 2.15), libpcre3, libssl1.0.0 (>= 1.0.2~beta3), zlib1g (>= 1:1
.1.4), init-system-helpers (>= 1.18~), adduser
而RPM包只记录到库,所以YUM机制比APT更复杂???
家乡:湖南张家界
头像
astolia
论坛版主
帖子: 6396
注册时间: 2008-09-18 13:11

Re: 关于依赖包的问题

#5

帖子 astolia » 2015-12-04 11:18

稍微修改了一下3楼的。yum需要多做一步库名到包名的转换,其他的原理上和apt差不多
poloshiao
论坛版主
帖子: 18279
注册时间: 2009-08-04 16:33

Re: 关于依赖包的问题

#6

帖子 poloshiao » 2015-12-04 11:48

依赖包
1. APT 工具
http://manpages.ubuntu.com/manpages/wil ... nds.1.html
apt-rdepends - performs recursive dependency listings similar to pt-cache

1-1. sudo apt-rdepends 套件名稱
可以遞迴列出 所有該套件名稱所依賴的套件
意思是 安裝這個套件 會把所有該套件套件名稱遞迴依賴的套件還沒安裝的一起安裝

1-2. sudo apt-rdepends -r 套件名稱
可以遞迴列出 所有依賴於該套件名稱的套件
意思是 移除這個套件套件名稱 可能會把所有依賴於該套件名稱的套件 一起移除
實際上 會不會移除 還有其它過濾條件 比較複雜 在此先略過

1-3. 補充
1-3-1. 上面的套件名稱 並不限於已安裝套件
1-3-2. 參考上述 manpage 下方 Bug 段 看看 還有哪些限制

2. YUM
yum 與 rpm 也有類似功能 但是發展中 還不完備

2-1. http://linux.die.net/man/1/repoquery
repoquery is a program for querying information from YUM repositories similarly to rpm queries.
使用 depend 或 require 搜尋

2-2. http://stackoverflow.com/questions/1684 ... e-from-yum
Is there any way to retrieve a dependency tree from yum?
desila
帖子: 6
注册时间: 2018-01-05 15:19
系统: Ubuntu

Re: 关于依赖包的问题

#7

帖子 desila » 2018-01-09 16:27

我也遇到过缺少advection.h这样文件的,而不是包。搜索了一下,这个文件又包含在某些包中所以可能还要安装包。。
回复