Есть возможность передать параметры в файл.spec в %post скрипт во время установки rpm пакета?
Пример: Для своих целей я вынужден собирать два rpm пакета идентичных на 98%. Хотелось бы как то параметризовать установку, и пропихнуть %post скрипт(или еще куда) свой параметр. Ну или вообще как то по другому это решить. Что бы собирать один пакет.
Суть вопроса накидал в примере spec файла:
%install
install -D /opt/app/bin/* %{buildroot}/opt/app/bin
%post
[[ $1 == "test" ]] $$ echo "Ok" #как передать в $1 что-нибудь во время установки пакета
%files
%defattr (-,root,root)
/opt/app
Пакета будет ставится локально, например rpm -i app.rpm, yum/dnf install app.rpm, по любому из способов интересно послушать варианты, если они вообще есть. Может можно что то типо такого провернуть:
rpm -i app.rpm --test
Вариант типо такого не подходит:
rpm -i app.rpm && echo "text" >> /opt/app/test_file.ini
Ответы (1 шт):
Параметр $1 в install/uninstall скриптах используется для передачи сведений о причинах запуска скрипта: 0 означает удаление пакета, 1 - установку, 2 - обновление (upgrade) уже установленного пакета. Другие параметры не поддерживаются. Этому есть свои причины. Если от вашего пакета будет зависеть другой пакет, как указать параметры для установки? В зависимостях можно записать только имя и ограничения по версии и архитектуре.
Поэтому я бы на вашем месте не старался оптимизировать сборку, и собирал бы два пакета.
Если же вы хотите минимизировать пересборку, то можно разделить пакет на три части:
- Самая большая часть - общая. Назовём её
my-super-software-base - Первый вариант установки:
my-super-software-test, зависит отmy-super-software-base. Скрипт этого пакета выполняет ту логику, которую вы хотели заложить вif [ $1 == "test" ]; then ... - Второй вариант установки:
my-super-software-release, зависит отmy-super-software-base. Соответственно, скрипт выполняет то, что вам нужно если$1 != "test"