Установка определенных версий, когда в репо есть более новые версии?

13

Давайте иметь метапакет, который зависит от следующих пакетов

Depends: A (=2),
 B (=2),
 C (=2)

Обратите внимание на '=' - я хочу установить именно эти версии, а не самые последние.

Дополнительно:

B зависит от A (> = 1)

C зависит от B (> = 1) и A (> = 1)

Если самые последние версии A, B, C в хранилище равны 2, то это работает.

Поскольку я поместил версию 3 A и версию 3 B в репозиторий sudo apt-get install, my-meta-package отказывается завершать со следующей информацией:

The following packages have unmet dependencies:
  my-meta-package: Depends: B (= 2) but 3 is to be installed
                   Depends: A (= 2) but 3 is to be installed

Если я вручную устанавливаю версии 2 для A и B, то метапакет устанавливается правильно, что настоятельно свидетельствует об отсутствии скрытой зависимости от A3 или B3. Это не решение проблемы, поскольку метапакет автоматически устанавливается на многих компьютерах.

ВОПРОС: Что нужно сделать, чтобы sudo apt-get install my-meta-package install версии 2,2,2?

Кроме того, есть ли способ, которым я мог бы получить расширенную информацию, что на самом деле создает необходимость для версии 3 A и версии 3 B?

tymtam
источник
О, я не прочитал весь вопрос, прежде чем ответить. Вы можете просто упаковать метапакет?
int_ua
2
@int_ua Я не понимаю, что будет делать переупаковка метапакета.
тымтам
@belacqua - я с тобой, но нам нужен надежный ответ, который охватывает, что происходит, когда происходят реверсии, сломанные зависимости и т. д. и т. д.
RobotHumans
Содержит ли контрольный файл вашего метапакета явную версию no зависимых пакетов, например (a=2), (b=2)?
Анвар

Ответы:

11

Вы должны выбрать конкретные версии для установки и установить их все одновременно с метапакетом.

sudo apt-get install meta-package package1=2 package2=2 package3=2

Как сказано в ответе int_ua , вы можете узнать обратные зависимости с помощью этого:

apt-cache rdepends package

Если вы хотите узнать больше информации о любом из этих пакетов ( доступные версии, зависимости и многое другое ), используйте это:

apt-cache show package

После того, как вы закончите их установку и захотите сохранить их в этих версиях при обновлении системы, вам нужно будет использовать apt-pinning как рекомендует belacqua .

APT закрепление

Функция закрепления APT позволяет администраторам заставлять APT выбирать конкретные версии пакетов, которые могут быть доступны в разных версиях из разных репозиториев. Это позволяет администраторам гарантировать, что пакеты не будут обновлены до версий, которые могут конфликтовать с другими пакетами в системе или которые не были достаточно протестированы на нежелательные изменения. Для этого необходимо изменить контакты в файле настроек APT (/ etc / apt /ference).

Sepero
источник
Я считаю, что это правильный ответ, поставив = и затем имя пакета с версией
LnxSlck
1
Я коллега Тимека, и это на самом деле решает проблему. Жаль, что мы должны перепроектировать метапакет, чтобы это произошло. Какой-то креативный Python в порядке. Спасибо огромное за ответ.
Игорь Зевака
1
Интересно, появилось ли какое-нибудь лучшее решение с течением времени?
Ygrek
1

Вы можете попробовать установить зависимости сначала с

sudo apt-get install package=2 где 2 - версия

Вы можете узнать, какие пакеты зависят от пакета с

apt-cache rdepends package

int_ua
источник
1
rdepends не предоставляет подробную информацию о версиях, верно?
тымтам
2
Установка зависимостей в первую очередь не соответствует метапакету. Это решение, но не то, которое я ищу.
тымтам
1
Обратите внимание, что для того, чтобы это работало, репозитории должны иметь доступную версию той версии, которую вы указали, в противном случае произойдет ошибка.
Томас Уорд