Я работаю над некоторыми инструкциями по настройке машины, и я был удивлен, обнаружив, что 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 обычно достаточно умен, чтобы понять такие вещи, так почему же он не может сделать это в этом случае? Я хотел бы иметь лучшее понимание того, почему это работает таким образом, так что подобные вещи больше меня не сбивают с толку в будущем.
источник
apt-get install -o Debug::pkgProblemResolver=true package1 package2...
. Это может дать вам подсказку, почему так работает.Ответы:
Кажется, здесь играет какая-то «весовая» система:
Как видите,
ant
зависит отopenjdk-7-jdk
сложного и запутанного количества предложений, рекомендаций и зависимости, тогда как при использованииopenjdk-6-jdk
зависимости более прямолинейно:Конечно,
aptitude
методы разрешения зависимостей могут быть разнымиapt-get
. Кстати, симуляция ant без установленного openjdk-7-jdk не тянет openjdk-6-jdk:Может быть, если вы используете те же методы, что и я, вы могли бы узнать больше, поскольку я сейчас использую тестирование Debian, и за это время хранилища могли измениться.
источник
AFAIK, он имеет значения по умолчанию для удовлетворения зависимости, поэтому, если эта зависимость не была удовлетворена до установки пакета, он устанавливает зависимость, а затем устанавливает запрошенный пакет.
Это также может быть большой ошибкой.
В любом случае, надеюсь, это поможет.
источник