Почему делает склонный - добираются, устанавливают более новую зависимость, чем поддерживаемый указанным пакетом

Я встретился с проблемой, где пакет, в определенной версии, требует другого пакета, также в определенной версии, но Кв. - Добирается, выбирает более новую версию зависимости и затем перестал работать.

Я испытал это с MCollective Puppet Lab и Магистралью Nginx PPAs и вероятно другие пакеты, таким образом, мой вопрос об общем подходе в Кв. - Получают разрешение зависимости, но я буду использовать Nginx в качестве своего примера.

У меня есть зеркало пакета (созданный с Точно) содержащий v1.7.5 nginx-полного пакета и всех его зависимостей и также более нового v1.7.6 пакета и всех его зависимостей.

Если я выполняюсь apt-get install nginx-full=1.7.5-1+trusty1 затем установка перестала работать с сообщением:

The following packages have unmet dependencies:
 nginx-full : Depends: nginx-common (= 1.7.5-1+trusty1) but 1.7.6-1+trusty1 is to be installed

Однако, если я выполняюсь apt-get install nginx-full=1.7.5-1+trusty1 nginx-common=1.7.5-1+trusty1 затем установка успешно выполняется.

Когда у меня есть обе версии 1.7.5 и 1.7.6 nginx-общего пакета на зеркале, и nginx-полный пакет явно указывает, что это требует, чтобы 1.7.5 из nginx-общих, и nginx-полный были пакетом, который я запросил, почему делает склонный - становятся все еще избранными несовместимые 1.7.6 версий nginx-общих?

Вот вывод dpkg -s nginx-full после установки 1.7.5 показов точного ограничения зависимости от версии:

Version: 1.7.5-1+trusty1
Depends: nginx-common (= 1.7.5-1+trusty1), libc6 (>= 2.14), ...

В этом экземпляре цепочка точных требуемых версий коротка, таким образом, обходное решение легко, но существует по крайней мере две проблемы для меня:

  1. Другие пакеты имеют намного более длинные цепочки зависимостей, которые утомительны, чтобы обнаружить и затем добавить в Кв. - получают командную строку.
  2. Пока более новая версия зависимости не публикуется к зеркалу пакета, легко не знать о нависшей проблеме.

То, что я не могу постигать, - то, почему разрешение зависимости, по-видимому, игнорирует точное ограничение версии на указанный пакет. Что еще более важно, я хотел бы знать, как я могу попросить, чтобы Кв. - Добралась для удостаивания ограничений, не имея необходимость вручную копировать метаданные пакета на мою Кв. - получают параметры.

6
задан 3 October 2014 в 01:21

1 ответ

То, что Вы испытываете, является проблемой с apt / apt-get не будучи столь умным, как Вы думаете, что это.

Эта проблема происходит при попытке понизить пакет (пакеты) или установить более старую версию пакета, чем версия, которую репозитории имеют как последний кандидат (относительно Вашего apt приоритетное прикрепление и другие политики относительно приоритетов репозитория). При понижении пакета на самом деле необходимо указать для каждой отдельной зависимости, какую версию Вы понижаете до, или в этом случае какую определенную версию Вы на самом деле хотите установить.

В случае nginx пакеты, где nginx-full и nginx-common зависьте друг от друга, необходимо явно сказать склонный установить каждый из пакетов указанной версии (версий). Это вызвано тем, что 1.7.6-1+trusty1 заменяет 1.7.5-1+trusty1 номером версии. В результате необходимо конкретно сказать, "Только устанавливают пакет этой определенной версии" из-за замененной существующей версии (версий), т.е. apt-get install nginx-full=1.7.5-1+trusty1 nginx-common=1.7.5-1+trusty1

Не относящийся к Вашему вопросу, но это также происходит, когда Вы устанавливаете из репозитория, который имеет более низкое apt при прикреплении приоритета, чем другая версия, в этом случае необходимо указать версии и/или источник (источники) для установки от вручную, т.е. sudo apt-get install nginx-full/trusty-proposed nginx-common/trusty-proposed будучи главным примером попытки установить пакет и зависимости из предложенного репозитория, который имеет намного более низкое apt приоритет, чем PPAs или основные репозитории.

5
ответ дан 17 November 2019 в 09:30

Другие вопросы по тегам:

Похожие вопросы: