apt-get неправильно разрешает зависимость от фиксированной версии в пакете Debian / Ubuntu

У меня есть собственный пакет foo с зависимостью в файле управления на фиксированной версии другой bar пакетов:

 Depends: bar (= 1.2.3) 

Оба пакета foo и bar публикуются в моем собственном репо. Кроме того, у меня есть несколько версий bar в репо, скажем, 1.2.3, а также 2.1.0. Теперь, когда вы пытаетесь установить foo на новую машину, используя

 apt-get install foo 

он терпит неудачу

 The following packages have unmet dependencies: foo : Depends: bar (= 1.2.3) but 2.1.0 is to be installed 

Т.е. apt-get, похоже, не правильно определяет правильные версии используемых пакетов.

Я попытался добавить конфликты:

 Depends: bar (= 1.2.3) Conflicts: bar (>> 1.2.3) 

но это привело только к тому, что ошибка изменилась на

 The following packages have unmet dependencies: foo : Depends: bar (= 1.2.3) but it is not going to be installed 

Если я укажу версию бара при установке, это работает:

 apt-get install foo bar=1.2.3 

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

Итак, вопрос в том, есть ли способ заставить себя правильно вести себя и автоматически устанавливать правильные версии зависимостей (без явного указания этих версий в командной строке)? И я должен добавить, что я также действительно не хочу, чтобы идти apt_preferences маршрут с фиксацией версии, так как это требует управления версиями в двух отдельных местах.

Для полной полноты, вот полный вывод при включении различных отладочных отладочных файлов:

 apt-get -o Debug::pkgProblemResolver=1 -o Debug::pkgDepCache::AutoInstall=1 -o Debug::pkgDepCache::Marker=1 install foo Reading package lists... Done Building dependency tree Reading state information... Done foo:amd64 Depends on bar [ amd64 ] < none -> 2.1.0 > ( universe/utils ) (= 1.2.3) can't be satisfied! Starting pkgProblemResolver with broken count: 1 Starting 2 pkgProblemResolver with broken count: 1 Investigating (0) foo [ amd64 ] < none -> 1.0.0 > ( misc ) Broken foo:amd64 Depends on bar [ amd64 ] < none -> 2.1.0 > ( universe/utils ) (= 1.2.3) Considering bar:amd64 0 as a solution to foo:amd64 9998 Re-Instated bar:amd64 Done Some packages could not be installed. This may mean that you have requested an impossible situation or if you are using the unstable distribution that some required packages have not yet been created or been moved out of Incoming. The following information may help to resolve the situation: The following packages have unmet dependencies: foo : Depends: bar (= 1.2.3) but 2.1.0 is to be installed E: Unable to correct problems, you have held broken packages. 

Решение apt не учитывает возможность того, что вы захотите установить что-то, что не является самой последней доступной версией пакета в данной целевой версии; Debian просто не поддерживает установку ничего, кроме самой последней версии пакета для вашей системы.

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