Чому вдала думка потребує цієї додаткової залежності?


9

Я працюю над деякими інструкціями з налаштування машини, і я з подивом виявив, що apt-get install A Bможе поводитися інакше, ніж apt-get install A && apt-get install B.

Мій конкретний приклад - A == openjdk-7-jdkі B == 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, як правило, досить розумний, щоб розібратися в подібних речах, так чому б цього не зробити в цьому випадку? Мені б хотілося краще зрозуміти, чому це працює таким чином, тому подібні речі в майбутньому мене більше не збирають.


Переглядаючи мій підходящий кеш, я бачу, що openjdk-7-jdk 7 ~ u3-2.1.1 ~ pre1-1ubuntu2 залежить від openjdk-7-jre, що в свою чергу залежить від openjdk-7-jre-без голови, тому ця залежність опосередкована . мураха безпосередньо залежить від дефолту-jre-headless. Я використовую Precision. Я лише здогадуюсь, але apt-get може або довільно починати з мурахи, або починати з залежності рівня 1, а потім переходити до залежності рівня 2. У будь-якому випадку, якщо ви дбаєте про остаточну конфігурацію пакетів (хочете, щоб openjdk-7-jre-headless був за замовчуванням -..- ..), конкретизуючи їх конкретно та окремо, мабуть, це найкращий спосіб контролювати це.
Джон Ш Грубер

Вас все ще цікавить це питання?
guntbert

@guntbert Звичайно, хоча я змирився, вважаючи, що немає ніяких причин; це просто так.
leedm777

5
Щоб побачити, як працює роздільник APT, подивіться apt-get install -o Debug::pkgProblemResolver=true package1 package2.... Це може дати вам підказку, чому це працює саме так.
Ласолл

Відповіді:


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. BTW, запускаючи симуляцію мурашки без встановленого 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, він має за замовчуванням для задоволення залежності, тому якщо цю залежність не було задоволено до встановлення пакета, він встановлює залежність, а потім встановлює запитуваний пакет.

Це також може бути просто великою помилкою.

У будь-якому випадку, сподівання, що це допомагає.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.