Ich versuche, eine Mono-Anwendung so zu verpacken, 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 hinzugefügt.
Ich habe --with = systemd wie folgt zu meiner Regeldatei hinzugefügt:
%:
dh $@ --with=cli --with=systemd
Ich habe meine Servicedatei mit folgendem Inhalt zu meinem Debian-Ordner namens mypackage.service 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
Das Gebäude gibt jedoch die folgenden lintianischen Warnungen und Fehler aus:
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 Warnungen beziehen sich auf init.d, das alte System, das durch systemd ersetzt wird. Sind diese Fehler und Warnungen einfach falsch? Glaubt 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 lautet wie folgt:
#!/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 lautet wie folgt:
#!/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 einwandfrei installiert und der Dienst wird ordnungsgemäß gestartet. Die Lintian-Fehler sind besorgniserregend, und ich möchte ihnen auf den Grund gehen.
postrm
Skript? Hat es die Debhelper Boilerplate?dh
) geeignete generieren. Führen Siedpkg-deb --control
auf der generierten deb - Datei und Blick in die neu erstellteDEBIAN
Verzeichnis fürpostinst
,postrm
Dateien.Antworten:
Ich bin auch auf dieses Problem gestoßen. Folgendes habe ich mir ausgedacht:
Sie möchten dh_installinit und dh_systemd_start überschreiben. Dies ist ein Beispiel aus meinem Netzwerkbrückendienst:
Die vollständige Quelle meines Pakets finden Sie hier: https://github.com/Ubuntu-Solutions-Engineering/openstack-deb/tree/master/debian
Ich habe auch https://github.com/lxc/lxd-pkg-ubuntu/blob/dpm-xenial/debian/rules als Referenz verwendet.
Hoffentlich bringt dich das zum Laufen, da ich eine Weile gebraucht habe, um das herauszufinden.
quelle
Wenn er nicht mit SysV oder Upstart - Skripte init anweisen ,
dh_installinit
nicht die ändernpostinst
/postrm
/prerm
Skripte.dh_systemd
wird damit umgehen.Dies gilt für
debhelper
Kompatibilitätsstufen <10 und mit 10, obwohldh_systemd
in zusammengeführt wurdedebhelper
.Laut https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=800043
debhelper
Kompatibilitätsstufe 11> = wird dies behoben.quelle