GNU/Linux >> Linux Esercitazione >  >> Ubuntu

Come confezionare un servizio Systemd?

Sto cercando di creare un pacchetto di un'applicazione mono da eseguire come servizio systemd.

Ho seguito le istruzioni qui:
https://wiki.debian.org/Teams/pkg-systemd/Packaging

Ho aggiunto dh-systemd (>=1.5) al mio file di controllo Debian dipende dalla build.

Ho aggiunto –with=systemd al mio file di regole come segue:

%:
    dh [email protected] --with=cli --with=systemd

Ho aggiunto il mio file di servizio alla mia cartella debian chiamata mypackage.service con i seguenti contenuti:

[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

Tuttavia, la costruzione fornisce i seguenti avvisi ed errori lintian:

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

Questo mi confonde per diversi motivi

  1. Questi avvisi riguardano init.d che è il vecchio sistema che è stato sostituito da systemd, questi errori e avvisi sono semplicemente sbagliati, debuild pensa che io stia usando init.d perché ho configurato il mio pacchetto in modo errato?
  2. Avevo l'impressione che –with=systemd avrebbe creato questi script per me.

Aggiorna

Il file postrm generato è il seguente:

#!/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

il file prerm generato è il seguente:

#!/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

Il pacchetto in realtà si installa correttamente e il servizio si avvia correttamente. Gli errori lintian sono preoccupanti e vorrei andare fino in fondo.

Risposta accettata:

Anche io mi sono imbattuto in questo problema. Questo è quello che mi è venuto in mente:

Ti consigliamo di sovrascrivere dh_installinit e dh_systemd_start, questo è un esempio dal mio servizio di bridge di rete:

#!/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"

La fonte completa del mio pacchetto può essere trovata qui:https://github.com/Ubuntu-Solutions-Engineering/openstack-deb/tree/master/debian

Correlati:quali strumenti di gestione delle attività e del tempo sono disponibili?

Ho anche usato https://github.com/lxc/lxd-pkg-ubuntu/blob/dpm-xenial/debian/rules come riferimento.

Spero che questo ti farà andare avanti perché mi ci è voluto un po' di tempo per capirlo.


Ubuntu
  1. Come creare un servizio Systemd in Linux

  2. Come scrivere uno script di avvio per Systemd?

  3. Come elencare i servizi Systemd in Linux

  4. Come impostare i valori ulimit per un servizio systemd

  5. Come reindirizzare l'output del servizio systemd su un file

Come eseguire container come servizio Systemd con Podman

Come abilitare o disabilitare i servizi in Ubuntu Systemd/Upstart

Come eseguire lo script della shell come servizio Systemd in Linux

Come ho imparato a smettere di preoccuparmi e ad amare systemd

Come configurare l'esecuzione automatica di uno script Python utilizzando Systemd

Come eseguire lo script della shell come servizio SystemD in Linux