aptはなぜこの追加の依存関係が必要だと思いますか?


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に直接依存しています。Preciseを使用しています。私は推測しているだけですが、apt-getは任意にantで開始することも、レベル1の依存関係で開始してからレベル2の依存関係に移動することもできます。いずれにせよ、パッケージの最終構成を気にする場合(openjdk-7-jre-headlessをdefault -..- ..にしたい場合)、パッケージを具体的かつ個別に指定することがおそらくそれを制御する最良の方法です。
ジョンSグルーバー、

あなたはまだその質問に興味がありますか?
ガントベルト2013

@guntbert確かに、私は理由がないと信じて自分を辞任しましたが。それはありのままです。
leedm777 2013

5
APTリゾルバーがどのように機能するかを確認するには、を参照してくださいapt-get install -o Debug::pkgProblemResolver=true package1 package2...。それはなぜそれがそのように機能しているのかについてのヒントを与えるかもしれません。
ラソール2013

回答:


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提案、お薦めや依存関係の複雑でintricated量は、使用しているときながらにより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がインストールされていないantのシミュレーションを実行しても、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、依存関係を満たすためのデフォルトがあるので、パッケージをインストールする前にその依存関係が満たされていない場合は、依存関係をインストールしてから、要求されたパッケージをインストールします。

ただし、これは大きなバグである可能性もあります。

いずれにせよ、それがお役に立てば幸いです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.