GNU/Linux >> LINUX-Kenntnisse >  >> Ubuntu

Wie paketiere ich einen Systemd-Dienst?

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

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


Ubuntu
  1. So verwalten Sie Systemd-Dienste mit Systemctl unter Linux

  2. Wie schreibe ich ein Startskript für Systemd?

  3. So listen Sie Systemd-Dienste unter Linux auf

  4. So legen Sie ulimit-Werte für einen systemd-Dienst fest

  5. Wie verwendet man Systemd, um einen Dienst neu zu starten, wenn er ausgefallen ist?

So führen Sie Container als Systemd-Dienst mit Podman aus

So aktivieren oder deaktivieren Sie Dienste in Ubuntu Systemd/Upstart

So führen Sie Shell-Skript als Systemd-Dienst in Linux aus

Wie ich gelernt habe, mir keine Sorgen mehr zu machen und systemd zu lieben

So richten Sie die automatische Ausführung eines Python-Skripts mit Systemd ein

So führen Sie Shell-Skript als SystemD-Dienst in Linux aus