Я создаю пакет Debian для программного приложения, которое запускается из служебного сценария, и хотел бы узнать, как это лучше всего сделать.
Сейчас я думаю, что пакет должен скопировать исполняемый файл в / usr / bin
, а службу в / etc / systemd / system /
и иметь postinst
скрипт для выполнения
systemctl enable myapp.service
Это правильный подход или существует более «стандартная» процедура для работы со службами в рамках управления пакетами Debian?
Что я делаю, так это создаю папку .../debian
в своих проектах и создаю файл .service
для демона. Я также добавляю один параметр командной строки, например, в файл .../debian/rules
:
%:
dh $@ --with systemd --parallel
Эта опция указывает системе использовать systemd
для обработки . service
(в противном случае он возвращается к SYS-V).
Еще одна вещь, которую не забудьте сделать, это добавить #DEBHELPER#
в ваши сценарии post/pre inst/rm. Это очень важно, так как это то, что на самом деле заставляет все это работать.
Например, вот конфигурация в сценарии postinst
:
#!/bin/sh
if [ "$1" = "configure" ]
then
# Turn on IP forwarding
echo 1 > /proc/sys/net/ipv4/ip_forward
fi
#DEBHELPER#
Позиция в вашем сценарии будет зависеть от того, что вы делаете в своем сценарии. т. е. если вы хотите запустить команду после запуска службы, поместите #DEBHELPER#
перед ней. Если вам нужно завершить настройку, которую будет использовать ваша служба, поместите #DEBHELPER#
после этой конфигурации.
У меня есть пример в моем Snap! проект.
Примечание: если у вас есть проект с более чем одним демоном, вы можете использовать трюк с папкой .../debian
для одного из них. Другой, вы должны установить вручную (самостоятельно).