我正在尝试打包一个单声道应用程序以作为systemd服务运行。
我已按照此处的说明进行操作:https : //wiki.debian.org/Teams/pkg-systemd/Packaging
我已经将dh-systemd(> = 1.5)添加到我的debian控制文件构建依赖中。
我将--with = systemd添加到我的规则文件中,如下所示:
%:
dh $@ --with=cli --with=systemd
我已将服务文件添加到名为mypackage.service的debian文件夹中,其内容如下:
[Unit]
Description=My Service Description
After=network-online.target
[Service]
Type=simple
ExecStart=/usr/bin/mono /usr/lib/mypackage/myservice.exe
[Install]
WantedBy=multi-user.target
但是,生成给出以下林田警告和错误:
Now running lintian...
E: mypackage: postrm-does-not-call-updaterc.d-for-init.d-script etc/init.d/mypackage
W: mypackage: init.d-script-not-marked-as-conffile etc/init.d/mypackage
E: mypackage: init.d-script-not-included-in-package etc/init.d/mypackage
这使我感到困惑,原因有几个
- 这些警告与init.d有关,后者是被systemd替换的旧系统,这些错误和警告是否错误,debuild认为我使用init.d是因为我配置了错误的软件包吗?
- 我的印象是--with = systemd会为我创建这些脚本。
更新资料
生成的postrm文件如下:
#!/bin/sh
set -e
# Automatically added by dh_systemd_start
if [ -d /run/systemd/system ]; then
systemctl --system daemon-reload >/dev/null || true
fi
# End automatically added section
# Automatically added by dh_systemd_enable
if [ "$1" = "remove" ]; then
if [ -x "/usr/bin/deb-systemd-helper" ]; then
deb-systemd-helper mask mypackage.service >/dev/null
fi
fi
if [ "$1" = "purge" ]; then
if [ -x "/usr/bin/deb-systemd-helper" ]; then
deb-systemd-helper purge mypackage.service >/dev/null
deb-systemd-helper unmask mypackage.service >/dev/null
fi
fi
# End automatically added section
生成的prerm文件如下:
#!/bin/sh
set -e
# Automatically added by dh_systemd_start
if [ -d /run/systemd/system ]; then
deb-systemd-invoke stop mypackage.service >/dev/null
fi
# End automatically added section
# Automatically added by dh_installinit
if [ -x "/etc/init.d/mypackage" ] || [ -e "/etc/init/mypackage.conf" ]; then
invoke-rc.d mypackage stop || exit $?
fi
# End automatically added section
该软件包实际上可以正常安装,并且服务可以正确启动。lintian错误令人担忧,我想深入探究它们。
dh
)应该会生成适当的代码。运行dpkg-deb --control
所产生的deb文件,并查看新创建DEBIAN
的目录postinst
,postrm
文件。
postrm
脚本包含什么?它有debhelper样板吗?