Comment empaqueter un service systemd?

12

J'essaye d'empaqueter une application mono pour fonctionner comme un service systemd.

J'ai suivi les instructions ici: https://wiki.debian.org/Teams/pkg-systemd/Packaging

J'ai ajouté dh-systemd (> = 1.5) à mon fichier de contrôle debian, cela dépend.

J'ai ajouté --with = systemd à mon fichier de règles comme suit:

%:
    dh $@ --with=cli --with=systemd

J'ai ajouté mon fichier de service à mon dossier debian appelé mypackage.service avec le contenu suivant:

[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

Cependant, la construction donne les avertissements et les erreurs lintian suivants:

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

Cela me déroute pour plusieurs raisons

  1. Ces avertissements concernent init.d qui est l'ancien système qui est remplacé par systemd, ces erreurs et avertissements sont-ils tout simplement faux, debuild pense-t-il que j'utilise init.d parce que j'ai mal configuré mon paquet?
  2. J'avais l'impression que --with = systemd créerait ces scripts pour moi.

Mise à jour

Le fichier postrm généré est le suivant:

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

le fichier prerm généré est le suivant:

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

Le package s'installe en fait correctement et le service démarre correctement. Les erreurs lintiennes sont inquiétantes et j'aimerais aller au fond des choses.

trampster
la source
Que contient votre postrmscript? A-t-il le passe-partout debhelper?
muru
où est-ce? qu'Est-ce que c'est? les instructions ne disent pas d'en créer un et l'exemple lié n'en a pas. Donc, soit il est généré automatiquement par dh-systemd ou n'existe pas
trampster
2
Voir debian.org/doc/debian-policy/ch-maintainerscripts.html et wiki.debian.org/MaintainerScripts . Si vous ne savez pas ce que c'est, debhelper (aka dh) devrait en générer des appropriés. Exécutez dpkg-deb --controlle fichier deb généré, et regardez dans le nouvellement créé DEBIANrépertoire postinst, postrmfichiers.
muru
OK fera les instructions dites "Après la reconstruction, votre paquet aura du code supplémentaire dans les scripts de maintenance postinst, prerm et postrm." étant donné que ceux-ci sont générés automatiquement, j'ai peu de chance de les remplir.
trampster
Question mise à jour avec les scripts générés par postrm et prerm
trampster

Réponses:

5

J'ai également rencontré ce problème. Voici ce que j'ai trouvé:

Vous voudrez remplacer les dh_installinit et dh_systemd_start, ceci est un exemple de mon service de pont réseau:

#!/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 source complète de mon package peut être trouvée ici: https://github.com/Ubuntu-Solutions-Engineering/openstack-deb/tree/master/debian

J'ai également utilisé https://github.com/lxc/lxd-pkg-ubuntu/blob/dpm-xenial/debian/rules comme référence.

J'espère que cela vous aidera à démarrer car cela m'a pris un peu de temps pour comprendre cela.

battlemidget
la source
4

Lorsque vous n'incluez pas les scripts d'initialisation SysV ou Upstart, demandez dh_installinitde ne pas modifier les scripts postinst/ postrm/ prerm. dh_systemdva le gérer.

override_dh_installinit:
    dh_installinit --noscripts

Cela s'applique au debhelperniveau de compatibilité <10 et à 10 même s'il dh_systemda été fusionné debhelper.

Selon https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=800043 debhelper niveau de compatibilité 11> = cela sera corrigé.

Lucas
la source