Кто-нибудь знает, как (или можно ли) указать альтернативное требование или набор требований в файле спецификации, в отличие от одного требования?
Например, предположим, что есть два доступных пакета с удобным названием foo-bar
и bar-foo
. Мой пакет требует одного из них, но не обоих, и мне все равно, какой из них присутствует. Во время выполнения я использую то, что доступно.
Так эффективно я хотел бы сказать:
Requires: foo-bar OR bar-foo
Насколько я могу судить, это невозможно, но я полагаю, что здесь есть люди, которые знают о RPM намного больше, чем я, так что, возможно, есть способ сделать это.
ОБНОВЛЕНИЕ: я контролирую только упаковку bar-foo
не foo-bar
, поэтому наличие виртуального пакета не сработает.
ОБНОВЛЕНИЕ: то, что мне действительно нужно, само по себе виртуальный пакет внутри каждого из пакетов. Сказать foo-bar provides eagle' and
bar-foo обеспечивает бигльand my package works with either (or both); but other packages require either
орелor
гончаяor
фу-барor
bar-foo`, а в целевой системе может быть установлено одно или оба.
В настоящее время я склоняюсь к решению этой проблемы с помощью %pre
скрипт, который делает что-то вроде:
rpm -q eagle || rpm -q beagle || echo "need eagle or beagle" && /bin/false
Хотя я почти уверен, что это сработает, это похоже на жестокий обход отслеживания зависимостей RPM. Например, вы никогда не увидите мою посылку, когда спросите whatrequires foo-bar
или whatrequires beagle
.
ОБНОВЛЕНИЕ: если задуматься, боль от необходимости устанавливать foo-bar
там, где они не могли бы быть меньше, чем боль обхода управления зависимостями RPM, по крайней мере, для моей ситуации. Поэтому, если кто-то не придумал способ правильно потребовать «это ИЛИ то» (что, я думаю, было бы отличной функцией в RPM в целом), я планирую потребовать только foo-bar
а затем во время выполнения, если bar-foo
есть в наличии, я буду выбирать между ними по любым критериям, которые мне нужны.
ОБНОВЛЕНИЕ: еще одна идея, которая также может обмануть RPM, но может привести все в правильное состояние. Может быть, я мог бы в %post
, поиграйте напрямую с базой данных RPM. Таким образом %pre
может защитить меня от неправильной установки, и %post
задним числом сообщит RPM, что мне нужно либо foo-bar
или bar-foo
или оба, в зависимости от того, что там, когда я устанавливаю.
Спасибо за предложения!
Теперь это возможно с RPM 4.13.
https://rpm.org/user_doc/boolean_dependencies.html
Это может быть просто: Requires: (pkgA >= 3.2 or pkgB)
Такое поведение уже выполняется несколькими пакетами, например агентами почтового транспорта. Те виртуальные пакеты предоставить вашей системе способ узнать, предоставлена ли уже необходимая им возможность какой-либо другой программой.
Видишь ли, если виртуальные пакеты пример на rpm.org вам поможет.
Две возможности:
Если часть foo-bar
и bar-foo
вы используете обычный файл, вы можете просто Require /path/to/file
(Я считать так; мое тестирование было ограниченным).
Ваша ситуация аналогична необязательным зависимостям. С ними обращаются, чтобы X-common
пакет, а затем получить X-foo-bar
пакет, который требует foo-bar
и X-bar-foo
пакет, который требует bar-foo
.
Будет ли работать ваш пакет bar-foo с виртуальным пакетом foo-bar?
Затем вы можете просто заставить свой пакет burp-baz требовать foo-bar.
foo-bar
and the other depending on bar-foo
.Недетерминизм в автоматизированных системах (который представляет собой либо управление зависимостями, либо машины, использующие RPM) - это действительно плохо. Вы ХОТИТЕ, что он потерпит неудачу в той или иной ситуации, поскольку неудача все же не так плоха, как неожиданный результат.
Чтобы решить эту проблему, возможно, пакет, который вы ДЕЙСТВИТЕЛЬНО контролируете%, предоставит основные токены, которые неизменяемый пакет также предоставляет% и от которых зависит ваше другое программное обеспечение%; тогда ваш пакет% устарел неизменяемый. Особенно, если он уже установлен, вы можете получить преимущество над другими установками.
Упаковка и правильные операции зависимости и установки - сложная работа. Цель - надежные, воспроизводимые, проверяемые установки - настолько ценна, что вы можете понять преимущества правильной реализации.
Ад зависимости - это самоубийство. Без исключений