RPM - установить параметры времени - PullRequest
12 голосов
/ 24 ноября 2011

Я упаковал свое приложение в RPM-пакет, скажем, myapp.rpm .При установке этого приложения я хотел бы получить некоторые входные данные от пользователя (например, для ввода может быть - среда, в которой устанавливается приложение - «dev», «qa», «uat», «prod»).Исходя из ввода, приложение установит соответствующие файлы.Есть ли способ передать параметры при установке приложения?

PS: Возможным решением может быть создание пакета RPM для каждой среды.Однако в нашем сценарии это нереальный вариант, поскольку у нас есть около 20 сред, и мы не хотим иметь 20 разных пакетов для одного приложения.

Ответы [ 3 ]

18 голосов
/ 24 ноября 2011

Как правило, RPM-пакеты не должны требовать взаимодействия с пользователем. Снова и снова пользователи RPM заявляют, что целью RPM является явная цель - не устанавливать интерактивные установки. Для пакетов, которые требуют какого-либо ввода перед первым использованием, вы обычно запрашиваете эту информацию при первом использовании, мы помещаем все это в конфигурационные файлы с макросами или чем-то еще и говорим своим пользователям, что им придется настроить приложение, прежде чем оно будет пригодно для использования. .

Даже передача какого-либо параметра считается взаимодействием с конечным пользователем. Я думаю, что вам нужно, чтобы ваши предустановленные или установочные скрипты как-то автоматически определяли окружение, возможно, имея файл, который они могли бы изучить. Я также укажу, что с точки зрения пользователя RPM наличие пакета с именем * -qa.rpm намного более интуитивно понятно, чем передача какого-либо случайного параметра.

Для вашей конкретной проблемы, если вы устанавливаете другой контент, вы должны создавать разные пакеты. Если вы попытаетесь сделать что-то по-другому, вы в конечном итоге будете сражаться с системой RPM все больше и больше.

Нетрудно создать систему сборки, которая может выплевывать более 20 пакетов, которые в основном похожи. Я сделал это с помощью спецификационного файла template-ish и некоторых скриптов, запускаемых make, которые будут создавать различные спецификационные файлы и создавать RPM. Не зная специфики, может показаться, что у вас даже есть базовый пакет, от которого зависят все 20+ пакетов среды, а затем пакеты, специфичные для среды, устанавливают все, что соответствует их целевой среде.

3 голосов
/ 06 августа 2013

Вы можете использовать опцию перемещения, например,

rpm -i --relocate /env=/uat somepkg.rpm

, и ваш скрипт найдет переменные данные из файла, расположенного в каталоге "env"

0 голосов
/ 23 января 2018

Я думаю, что это очень актуальный вопрос, особенно когда вы переходите в сферу разработки приложений. В этом случае конфигурация приложения для различных целевых систем - ваш ежедневный хлеб: вам нужно настроить его на разработку, интеграционный тест, приемочный тест, производство и т. Д. Я не думаю, что создание отдельного пакета для каждой среды является решением. По сути, это должен быть один и тот же код, работающий в разных средах. Я знаю, что это требование не поддерживается rpm. Но в качестве обходного пути вы можете использовать простой конфигурационный файл, который знает сценарий% pre искать. Конфигурационный файл может быть простым сценарием оболочки, который, например, устанавливает переменные окружения, и тогда их могут использовать различные сценарии und и pre и post.

...