RPM - установить параметры времени
Я упаковал свое приложение в RPM-пакет, скажем, myapp.rpm. При установке этого приложения я хотел бы получить некоторые входные данные от пользователя (например, для ввода может быть - среда, в которой устанавливается приложение - "dev", "qa", "uat", "prod"). На основании введенных данных приложение установит соответствующие файлы. Есть ли способ передать параметры при установке приложения?
PS: Возможным решением может быть создание пакета RPM для каждой среды. Однако в нашем сценарии это нереальный вариант, поскольку у нас около 20 сред, и мы не хотим иметь 20 разных пакетов для одного приложения.
3 ответа
Как правило, пакеты RPM не должны требовать взаимодействия с пользователем. Снова и снова пользователи RPM заявляют, что целью RPM является явная цель - не устанавливать интерактивные установки. Для пакетов, которые требуют какого-либо ввода перед первым использованием, вы обычно запрашиваете эту информацию при первом использовании, мы помещаем все это в конфигурационные файлы с макросами или чем-то еще и говорим пользователям, что им придется настроить приложение, прежде чем оно будет пригодно для использования.,
Даже передача какого-либо параметра считается взаимодействием с конечным пользователем. Я думаю, что вы хотите, чтобы ваши предустановленные или установочные скрипты как-то автоматически определяли окружение, возможно, имея файл, который они могли бы исследовать. Я также укажу, что с точки зрения пользователя RPM наличие пакета с именем *-qa.rpm намного более интуитивно понятно, чем передача некоторого случайного параметра.
Для вашей конкретной проблемы, если вы устанавливаете другой контент, вы должны создать разные пакеты. Если вы попытаетесь сделать что-то по-другому, вы в конечном итоге будете сражаться с системой RPM все больше и больше.
Нетрудно создать систему сборки, которая может выплевывать более 20 пакетов, которые в основном похожи. Я сделал это с помощью спецификационного файла template-ish и некоторых скриптов, запускаемых make, которые будут создавать различные спецификационные файлы и создавать RPM. Не зная специфики, может показаться, что у вас даже есть базовый пакет, от которого зависят все 20+ пакетов среды, а затем пакеты, специфичные для среды, устанавливают все, что специфично для их целевой среды.
Вы можете использовать опцию перемещения, например,
rpm -i --relocate /env=/uat somepkg.rpm
и ваш скрипт ищет переменные данные из файла, расположенного в каталоге "env"
Я думаю, что это очень актуальный вопрос, особенно когда вы переходите в сферу разработки приложений. В этом случае конфигурация приложения для различных целевых систем - ваш ежедневный хлеб: вам нужно настроить его на разработку, интеграционный тест, приемочный тест, производство и т. Д. Я не думаю, что создание отдельного пакета для каждой среды - это решение. По сути, это должен быть один и тот же код, работающий в разных средах. Я знаю, что это требование не поддерживается rpm. Но в качестве обходного пути вы можете использовать простой файл конфигурации, который скрипт% pre знает. Конфигурационный файл может быть простым сценарием оболочки, который, например, устанавливает переменные среды, и тогда их могут использовать различные сценарии und и pre и post.