Есть ли раздел спецификации RPM, выполняемый перед проверкой зависимости файла? - PullRequest
0 голосов
/ 20 июля 2010

Я пытаюсь создать RPM, который установит файловые зависимости, если они не существуют. Есть ли раздел спецификации RPM, который будет выполнен до того, как RPM проверит наличие зависимостей. (Я обращаюсь к файловым зависимостям, а не к пакетным зависимостям, перечисленным в заголовке «Требуется»).

Пример: Если у меня есть файл perl и установлен бит разрешений на выполнение. RPM проверит, установлен ли perl в месте, указанном «#! / Bin / perl» в файле perl. (Похоже, что он проверяет базу данных RPM, чтобы увидеть, установлен ли perl в этом месте, вместо проверки фактического расположения файла). Если perl не установлен в расположении / bin / perl, я хочу установить его до того, как RPM выдаст ошибку мне "/ bin / perl нужен [MY_PACKAGE]"

Дополнительный вопрос: Поскольку файловая зависимость проверяет базу данных RPM, существует ли способ обновить установленные местоположения? Т.е. если в моем скрипте perl указано "#! / usr / local / bin / perl", но в моей базе данных RPM есть perl, расположенный в "/ usr / bin / perl", как мне обновить базу данных RPM? Символическое связывание «/ usr / local / bin / perl» вручную не будет работать, поскольку не обновляет базу данных RPM. Установщик RPM по-прежнему скажет "/ usr / local / bin / perl необходим [MY_PACKAGE]"

Ответы [ 2 ]

2 голосов
/ 25 июля 2010

Одно из руководств по проектированию спецификаций RPM заключается в том, что они не должны печатать сообщения об ошибках или каким-либо образом взаимодействовать с пользователем.Вы не знаете, будут ли они установлены вручную или через yum / GUI.

Вы можете указать зависимости от файлов так же, как зависимости от пакетов файлов, убедитесь, что имя файла начинается с /.Если вы распечатаете списки зависимостей для ваших RPM, вы увидите некоторые библиотеки .so, перечисленные там таким образом.

Если вы используете Perl, лучшим способом было бы включить Perl как ваше требование в спецификацииположитесь на его нормальное местоположение для дистрибутива, то есть /usr/bin/perl.

1 голос
/ 20 июля 2010

Я думаю, что вы пытаетесь использовать не тот инструмент для работы. Задача rpm состоит в том, чтобы установить пакеты, о которых говорится, чтобы установить, а не искать другие пакеты. Выявление зависимостей - это работа инструментов более высокого уровня, таких как apt, urpmi или yum.

В приведенном вами примере, если ваш пакет требует /usr/local/bin/perl, другой пакет должен предоставить /usr/local/bin/perl. Это может быть пакет, который содержит символическую ссылку от /usr/local/bin/perl до /usr/bin/perl и объявляет зависимость от /usr/bin/perl (хотя я не знаю, как это позволяет вам требовать минимальную версию /usr/local/bin/perl).

...