Я встретился с проблемой, где пакет, в определенной версии, требует другого пакета, также в определенной версии, но Кв. - Добирается, выбирает более новую версию зависимости и затем перестал работать.
Я испытал это с 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), ...
В этом экземпляре цепочка точных требуемых версий коротка, таким образом, обходное решение легко, но существует по крайней мере две проблемы для меня:
То, что я не могу постигать, - то, почему разрешение зависимости, по-видимому, игнорирует точное ограничение версии на указанный пакет. Что еще более важно, я хотел бы знать, как я могу попросить, чтобы Кв. - Добралась для удостаивания ограничений, не имея необходимость вручную копировать метаданные пакета на мою Кв. - получают параметры.
То, что Вы испытываете, является проблемой с 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 или основные репозитории.