Рекомендация по шаблонному файлу.service/.conf в спецификации RPM
Мы создали RPM из файлов.spec, которые включают установку служб для файлов upstart и systemd (а значит, и.conf, и.service). Но файлы.conf и.service содержат проводные пути к служебным файлам.
myservice.service:
[Unit]
Description=My Service
[Service]
WorkingDirectory=/opt/myproduct
ExecStart=/opt/myproduct/myservice /opt/myproduct/myservicearg
Restart=always
[Install]
WantedBy=multi-user.target
myservice.conf:
description "My Service"
respawn
respawn limit 15 5
start on (stopped rc and runlevel [2345])
stop on runlevel [06]
chdir /opt/myproduct
exec /opt/myproduct/myservice /opt/myproduct/myservicearg
Пути установки могут измениться, но поиск и замена грубой силы кажутся каменным веком.
Я использовал Ansible с файлами шаблонов.j2 (Jinja2), что кажется хорошим способом использовать переменную для двоичных / скриптовых путей. Их использование может выглядеть примерно так:
myservice.service.j2:
[Unit]
Description=My Service
[Service]
WorkingDirectory={{ myproductpath }}
ExecStart={{ myproductpath }}/myservice {{ myproductpath }}/myservicearg
Restart=always
[Install]
WantedBy=multi-user.target
myservice.conf.j2:
description "My Service"
respawn
respawn limit 15 5
start on (stopped rc and runlevel [2345])
stop on runlevel [06]
chdir {{ myproductpath }}
exec {{ myproductpath }}/myservice {{ myproductpath }}/myservicearg
Но я не смог найти ничего, что предполагало бы, что это общий подход к созданию RPM. Есть ли рекомендуемый способ в RPM шаблонировать эти файлы.conf и.service, заполненные во время сборки RPM или во время установки?
1 ответ
Нет. У Rpm нет такого шаблона. Большинство разработчиков предпочитают классический sed:
%build
....
sed -i 's/{{ myproductpath }}/\/real\/path/g' myservice.conf.j2
mv myservice.conf.j2 myservice.conf
Или вы можете BuildRequires: ansible
и пусть ANSIBLE расширит его. Но это довольно тяжелый инструмент для этой работы.