为什么易于认为它需要这种额外的依赖关系?


9

我正在处理一些机器设置说明,但惊讶地发现它的apt-get install A B行为可能与有所不同apt-get install A && apt-get install B

我的具体示例是A == openjdk-7-jdkB == ant

因此,openjdk-7-jdk取决于openjdk-7-jre-headless,这满足了ant依赖 java6-runtime-headless。但是如果以这样的方式安装它们apt-get install openjdk-7-jdk ant,APT似乎并不会解决这个问题并安装default-jre-headless。但是,如果您在安装openjdk-7-jdk之前进行安装ant,则其依赖关系将得到满足,并且一切都很好。

APT通常很聪明,可以弄清楚这种情况,所以为什么在这种情况下不能做到这一点?我想更好地了解为什么它会以这种方式工作,所以这种事情将来不会再次绊倒我。


查看我的apt缓存,我发现openjdk-7-jdk 7〜u3-2.1.1〜pre1-1ubuntu2取决于openjdk-7-jre,而后者又取决于openjdk-7-jre-headless,因此这种依赖关系是间接的。ant直接取决于default-jre-headless。我正在使用“精确”。我只是猜测,但是apt-get可以从ant任意开始,或者从1级依赖项开始,然后转到2级依赖项。无论如何,如果您关心软件包的最终配置(希望openjdk-7-jre-headless超过default -..- ..),则专门且单独地指定它们可能是控制它们的最佳方法。
约翰·格鲁伯

您仍然对该问题感兴趣吗?
guntbert

@guntbert当然,尽管我已经辞职了,以为没有理由。就是这样。
leedm777

5
要了解APT解析器的工作原理,请参阅apt-get install -o Debug::pkgProblemResolver=true package1 package2...。这可能会提示您为什么它会那样工作。
Lasall

Answers:


2

似乎这里有某种“重量”系统在起作用:

$ aptitude why ant openjdk-7-jdk
p   ant                 Recommends ant-optional       
p   ant-optional        Suggests   libgnumail-java    
p   libgnumail-java     Suggests   libgnumail-java-doc
p   libgnumail-java-doc Recommends default-jdk-doc    
p   default-jdk-doc     Depends    openjdk-7-doc      
p   openjdk-7-doc       Suggests   openjdk-7-jdk

如您所见,ant依赖关系openjdk-7-jdk由于复杂,复杂的建议,建议和依赖关系而产生,而使用openjdk-6-jdk依赖关系则更为直接:

$ aptitude why ant openjdk-6-jdk
p   ant           Suggests default-jdk | java-compiler | java-sdk
p   openjdk-6-jdk Provides java-sdk

当然aptitude,依赖项解析的方法可能与的不同apt-get。顺便说一句,在没有安装openjdk-7-jdk的情况下运行蚂蚁模拟不会拉开openjdk-6-jdk:

$ sudo apt-get install ant
[sudo] password for braiam: 
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following extra packages will be installed:
  ant-optional
Suggested packages:
  default-jdk java-compiler java-sdk ant-gcj ant-doc liboro-java junit
  libregexp-java jython antlr libbcel-java libjdepend-java libgnumail-java
  libcommons-net-java libjsch-java javacc ant-optional-gcj
The following NEW packages will be installed:
  ant ant-optional
0 upgraded, 2 newly installed, 0 to remove and 9 not upgraded.
Need to get 2,234 kB of archives.
After this operation, 3,041 kB of additional disk space will be used.
Do you want to continue [Y/n]? 

也许如果您使用与我相同的方法,您可能会发现更多,因为我现在正在使用Debian测试,与此同时存储库可能已更改。


0

AFAIK,它具有满足依赖项的默认值,因此,如果在安装软件包之前未满足该依赖关系,它将先安装依赖项,然后再安装请求的软件包。

但是,这也可能只是一个大错误。

不管怎样,希望能有所帮助。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.