Ich versuche, eine Monoanwendung so zu packen, dass sie als systemd-Dienst ausgeführt wird.
Ich habe die Anweisungen hier befolgt:
https://wiki.debian.org/Teams/pkg-systemd/Packaging
Ich habe dh-systemd (>=1.5) zu meiner Debian-Steuerdatei Build-Abhängigkeiten hinzugefügt.
Ich habe –with=systemd wie folgt zu meiner Regeldatei hinzugefügt:
%:
dh [email protected] --with=cli --with=systemd
Ich habe meine Dienstdatei zu meinem Debian-Ordner namens mypackage.service mit folgendem Inhalt hinzugefügt:
[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
Beim Bauen werden jedoch die folgenden Lintian-Warnungen und -Fehler ausgegeben:
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
Das verwirrt mich aus mehreren Gründen
- Diese Warnung bezieht sich auf init.d, das das alte System ist, das durch systemd ersetzt wird. Sind diese Fehler und Warnungen einfach falsch, denkt debuild, dass ich init.d verwende, weil ich mein Paket falsch konfiguriert habe?
- Ich hatte den Eindruck, dass –with=systemd diese Skripte für mich erstellen würde.
Aktualisieren
Die generierte postrm-Datei sieht wie folgt aus:
#!/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
Die generierte Prerm-Datei sieht wie folgt aus:
#!/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
Das Paket wird tatsächlich problemlos installiert und der Dienst wird ordnungsgemäß gestartet. Die Lintian-Fehler sind besorgniserregend und ich würde ihnen gerne auf den Grund gehen.
Akzeptierte Antwort:
Ich bin auch auf dieses Problem gestoßen. Das habe ich mir ausgedacht:
Sie sollten dh_installinit und dh_systemd_start überschreiben, dies ist ein Beispiel von meinem Netzwerkbrückendienst:
#!/usr/bin/make -f
PKGDIR=debian/tmp
%:
dh [email protected] --with systemd
override_dh_installinit:
dh_systemd_enable -popenstack --name=openstack openstack.service
dh_installinit -popenstack --no-start --noscripts
dh_systemd_start -popenstack --no-restart-on-upgrade
override_dh_systemd_start:
echo "Not running dh_systemd_start"
Die vollständige Quelle meines Pakets finden Sie hier:https://github.com/Ubuntu-Solutions-Engineering/openstack-deb/tree/master/debian
Verwandte Themen:Welche Aufgaben- und Zeitmanagement-Tools sind verfügbar?Ich habe auch https://github.com/lxc/lxd-pkg-ubuntu/blob/dpm-xenial/debian/rules als Referenz verwendet.
Hoffentlich bringt Sie das zum Laufen, da ich eine Weile gebraucht habe, um das herauszufinden.