Я пытаюсь закрепить пакет на основе более чем одного поля. В моем случае происхождение и версия.
Моя конкретная причина для этого состоит в том, чтобы пропинговать релиз Эрланга RabbitMQ в определенной версии. Я хочу предотвратить установку другой версии Erlang (из репозитория RabbitMQ)или версии, которую я хочу, из другого репозитория. В репозиториях RabbitMQ Bintray я ограничил версию, используя поле «component» в sources.list (. Они предоставили одну из них для основной версии Erlang. например. erlang
получит все версии, erlang-23.x
получит только 23. *версии Erlang. Это больше не делается с репозиториями, которые заменили Bintray )(. Это необходимо, поскольку базовая ОС может содержать пакеты той же основной версии, что и репозиторий RabbitMQ Erlang (, основанный на origin
), а репозиторий RabbitMQ Erlang может содержать более новые версии Erlang, чем поддерживается RabbitMQ, который я хочу запустить (pin на основе версии))
Мой sources.list
экстракт:
deb https://dl.cloudsmith.io/public/rabbitmq/rabbitmq-server/deb/ubuntu bionic main
deb https://dl.cloudsmith.io/public/rabbitmq/rabbitmq-erlang/deb/ubuntu bionic main
Я не могу найти подробности о синтаксисе параметра Pin
. (Есть примеры, но ничего более чем для одного поля)
Что я пробовал в файле в/etc/apt/preferences.d/
:
Package: erlang*
Pin: origin dl.cloudsmith.io
Pin-Priority: 1000
Package: erlang*
Pin: version 1:23.*
Pin-Priority: 1000
Это приводит к тому, что и пакеты cloudsmith, и все версии версии 23.x установите приоритет 1000. (Если используются разные приоритеты, применяется только первый совпадающий -т.е. все пакеты cloudsmith.io получают приоритет из первого блока, пакеты cloudsmith 23.x не получают приоритет из второго блока)
Pin
записи:Package: erlang*
Pin: origin dl.cloudsmith.io
Pin: version 1:23.*
Pin-Priority: 1000
В результате применяется только первое поле(origin
в данном случае)
Package: erlang*
Pin: origin dl.cloudsmith.io version 1:23.*
Pin-Priority: 1000
Это не соответствует ни одному пакету.
(Я проверил результаты с помощью apt-cache policy
и поменял местами версию и источник, чтобы увидеть, учитываются ли обе версии или только одна)
(Другое, менее элегантное решение — понизить приоритет пакетов ОС. Это не удастся, если будет добавлено больше репозиториев)
man 5 apt_preferences объясняет, что несколько критериев могут быть определены с помощью списка, разделенного запятыми-подобного этому:
Pin: origin dl.cloudsmith.io, version 1:23.*