RPM - установка временных параметров

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

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

Ответ 1

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

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

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

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

Ответ 2

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

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

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

Ответ 3

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