web-dev-qa-db-fra.com

Comment emballer un service systemd?

J'essaie de conditionner une application mono pour qu'elle fonctionne en tant que service systemd.

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

J'ai ajouté dh-systemd (> = 1.5) à la construction de mon fichier de contrôle debian.

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 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 trouble 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 à fait erronés? Debuild pense-t-il que j'utilise init.d car j'ai mal configuré mon paquet?
  2. J'avais l'impression que le --with = systemd créerait ces scripts pour moi.

Mettre à 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 paquet s’installe correctement et le service démarre correctement. Les erreurs de Lintian sont inquiétantes et je voudrais aller au fond des choses.

9
trampster

J'ai rencontré ce problème aussi. C'est ce que je suis venu avec:

Vous voudrez remplacer dh_installinit et dh_systemd_start, voici un exemple tiré 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 paquet peut être trouvée ici: https://github.com/Ubuntu-Solutions-Engineering/openstack-deb/tree/master/debian

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

J'espère que cela vous aidera à aller de l'avant car cela m'a pris un peu de temps pour comprendre cela.

5
battlemidget

Lorsque vous n'incluez pas les scripts SysV ou Upstart init, indiquez à dh_installinit de ne pas modifier les scripts postinstname __/postrmname __/prermname__. dh_systemd le gérera.

override_dh_installinit:
    dh_installinit --noscripts

Ceci s'applique au debhelperniveau de compatibilité <10 et à 10 même si dh_systemd a été fusionné dans debhelpername__.

Selon https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=80004debhelperniveau de compatibilité 11> = ceci aura ce problème corrigé.

3
Lucas