Назад | Перейти на главную страницу

Можно ли потребовать «этот ИЛИ тот» пакет в файле спецификации RPM?

Кто-нибудь знает, как (или можно ли) указать альтернативное требование или набор требований в файле спецификации, в отличие от одного требования?

Например, предположим, что есть два доступных пакета с удобным названием foo-bar и bar-foo. Мой пакет требует одного из них, но не обоих, и мне все равно, какой из них присутствует. Во время выполнения я использую то, что доступно.

Так эффективно я хотел бы сказать:

Requires: foo-bar OR bar-foo

Насколько я могу судить, это невозможно, но я полагаю, что здесь есть люди, которые знают о RPM намного больше, чем я, так что, возможно, есть способ сделать это.

ОБНОВЛЕНИЕ: я контролирую только упаковку bar-fooне foo-bar, поэтому наличие виртуального пакета не сработает.

ОБНОВЛЕНИЕ: то, что мне действительно нужно, само по себе виртуальный пакет внутри каждого из пакетов. Сказать foo-bar provides eagle' andbar-foo обеспечивает бигльand my package works with either (or both); but other packages require eitherорелorгончаяorфу-барorbar-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.


If doing the above feels skeezy (it probably is) you may need to create two versions of your RPM, one depending on foo-bar and the other depending on bar-foo.

Недетерминизм в автоматизированных системах (который представляет собой либо управление зависимостями, либо машины, использующие RPM) - это действительно плохо. Вы ХОТИТЕ, что он потерпит неудачу в той или иной ситуации, поскольку неудача все же не так плоха, как неожиданный результат.

Чтобы решить эту проблему, возможно, пакет, который вы ДЕЙСТВИТЕЛЬНО контролируете%, предоставит основные токены, которые неизменяемый пакет также предоставляет% и от которых зависит ваше другое программное обеспечение%; тогда ваш пакет% устарел неизменяемый. Особенно, если он уже установлен, вы можете получить преимущество над другими установками.

Упаковка и правильные операции зависимости и установки - сложная работа. Цель - надежные, воспроизводимые, проверяемые установки - настолько ценна, что вы можете понять преимущества правильной реализации.

Ад зависимости - это самоубийство. Без исключений