Рекомендация по шаблонному файлу.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 расширит его. Но это довольно тяжелый инструмент для этой работы.

Другие вопросы по тегам