Wie packe ich einen systemd-Dienst?

12

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

  1. 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?
  2. 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.

Trampster
quelle
Was enthält Ihr postrmSkript? Hat es die Debhelper Boilerplate?
Muru
wo ist es? Was ist es? In den Anweisungen wird nicht angegeben, dass eine erstellt werden soll, und im verknüpften Beispiel ist keine vorhanden. Entweder wird es von dh-systemd
automatisch generiert
2
Siehe debian.org/doc/debian-policy/ch-maintainerscripts.html und wiki.debian.org/MaintainerScripts . Wenn Sie nicht wissen, was dies sind, sollte debhelper (aka dh) geeignete generieren. Führen Sie dpkg-deb --controlauf der generierten deb - Datei und Blick in die neu erstellte DEBIANVerzeichnis für postinst, postrmDateien.
Muru
OK führt die Anweisungen aus: "Nach der Neuerstellung enthält Ihr Paket zusätzlichen Code in den Skripten postinst, prerm und postrm Betreuer." Wenn diese dann automatisch generiert werden, habe ich kaum eine Chance, sie zu stopfen.
Trampster
Aktualisierte Frage mit postrm und prerm generierten Skripten
Trampster

Antworten:

5

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:

#!/usr/bin/make -f

PKGDIR=debian/tmp

%:
    dh $@ --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

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.

Kampfmädchen
quelle
4

Wenn er nicht mit SysV oder Upstart - Skripte init anweisen , dh_installinitnicht die ändern postinst/ postrm/ prermSkripte. dh_systemdwird damit umgehen.

override_dh_installinit:
    dh_installinit --noscripts

Dies gilt für debhelperKompatibilitätsstufen <10 und mit 10, obwohl dh_systemdin zusammengeführt wurde debhelper.

Laut https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=800043 debhelper Kompatibilitätsstufe 11> = wird dies behoben.

Lucas
quelle