我正在为一个从服务脚本执行的软件应用程序创建一个 Debian 包,想知道执行此操作的最佳方法。
/usr/bin
我目前的想法是将可执行文件和服务复制到包中/etc/systemd/system/
,并有一个postinst
要执行的脚本
systemctl enable myapp.service
这是正确的方法吗?或者在 Debian 包管理中是否存在更“标准”的程序来处理服务?
答案1
我所做的是.../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
对其中一个使用文件夹技巧。另一个,你必须安装用手(自行决定)。