Come impacchettare un servizio systemd?


12

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) alla mia compilazione del file di controllo debian.

Ho aggiunto --with = systemd al mio file delle regole come segue:

%:
    dh $@ --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 di 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 avvertimenti riguardano init.d che è il vecchio sistema che viene sostituito da systemd, questi errori e avvertenze sono sbagliati, debuild pensa che io stia usando init.d perché ho configurato il mio pacchetto sbagliato?
  2. Avevo l'impressione che --with = systemd avrebbe creato questi script per me.

Aggiornare

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 si installa effettivamente bene e il servizio si avvia correttamente. Gli errori di lintian sono preoccupanti e mi piacerebbe arrivare al fondo di essi.


Cosa contiene la tua postrmsceneggiatura? Ha la caldaia debhelper?
Muru,

dov'è? che cos'è? le istruzioni non dicono di crearne uno e l'esempio collegato non ne ha uno. Quindi o è generato automaticamente da dh-systemd o non esiste
trampster

2
Vedi debian.org/doc/debian-policy/ch-maintainerscripts.html e wiki.debian.org/MaintainerScripts . Se non sai cosa sono, debhelper (aka dh) dovrebbe generare quelli appropriati. Eseguire dpkg-deb --controlsul file deb generato, e lo sguardo nella recente creazione DEBIANdirectory per postinst, postrmi file.
Muru,

OK eseguirà le istruzioni "Dopo la ricostruzione, il pacchetto avrà un codice aggiuntivo negli script di manutenzione postinst, prerm e postrm". dato che questi sono generati automaticamente ho poche possibilità di riempirli.
trampster

Domanda aggiornata con script generati da postrm e prerm
trampster

Risposte:


5

Ho riscontrato anche questo problema. Questo è quello che ho escogitato:

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

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

La fonte completa del mio pacchetto è disponibile qui: https://github.com/Ubuntu-Solutions-Engineering/openstack-deb/tree/master/debian

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

Spero che questo ti faccia andare come mi ci è voluto un po 'di tempo per capirlo.


4

Quando non si includono gli script init SysV o Upstart, indicare dh_installinitdi non modificare gli script postinst/ postrm/ prerm. dh_systemdlo gestirà.

override_dh_installinit:
    dh_installinit --noscripts

Questo vale per il debhelperlivello di compatibilità <10 e con 10 anche se dh_systemdè stato unito debhelper.

Secondo https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=800043 debhelper livello di compatibilità 11> = questo avrà risolto questo problema.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.