В соответствии с моим требованием возможно, что rpm одинаков для всех серверов, но изменяется только один файл конфигурации в соответствии с серверной средой, такой как производство, подготовка, тестирование или что-то еще. у меня есть пакет конфигурационного файла для всех серверов, но я не хочу жестко кодировать его в спецификационном файле, иначе невозможно создать разные rpm для всех серверов. можно указать имя конфигурационного файла во время установки rpm на клиенте сторона.
RPMBUILD: Возможна ли переносимость файла конфигурации RPM во время установки
Ответы (2)
Возможно повторение этого поэтому я скопирую свой ответ оттуда...
Я не думаю, что есть родной способ; Я бы сделал %post
, как вы заметили.
Однако я бы сделал это (аналогично тому, что я делаю с пакетом только для внутреннего использования, который я разрабатываю для работы):
- Три отдельных файла
/etc/name.conf-developer
,/etc/name.conf-live
и т. д. - Пусть все три пакета предоставляют виртуальный пакет, например.
name-config
- Have main package require
name-config
- This will make
rpm
,yum
, or whatever require at least one be installed in the same transaction
- This will make
- Все три пакета конфликтуют друг с другом
- Have each config package's
%post
(and possibly%verify
) symlink/etc/name.conf
to the proper config- This also helps show the user what is happening
Минусы:
- Это немного хакерски
rpm --whatprovides /etc/name.conf
скажет, что он не принадлежит ни одному пакету
Ответ Аарона - хороший способ сделать это. другой вариант — использовать оператор bash if для запуска команды sed в вашем файле конфигурации в разделе %post на основе имени хоста (например, * prod). Это позволит вам заменить определенные переменные в зависимости от среды. Очевидно, это пример высокого уровня, так как я не знаю, как выглядит ваша конфигурация конфигурации. К сожалению, это пример того, как может выглядеть плохой пакет, потому что другим будет сложно справиться с ним в будущем. Я предлагаю вам удалить все файлы конфигурации из RPM и начать использовать Salt, Chef или Puppet, поскольку именно для такой задачи они и были созданы.