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
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.
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.
Lorsque vous n'incluez pas les scripts SysV ou Upstart init, indiquez à dh_installinit
de ne pas modifier les scripts postinst
name __/postrm
name __/prerm
name__. dh_systemd
le gérera.
override_dh_installinit:
dh_installinit --noscripts
Ceci s'applique au debhelper
niveau de compatibilité <10 et à 10 même si dh_systemd
a été fusionné dans debhelper
name__.
Selon https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=80004debhelper
niveau de compatibilité 11> = ceci aura ce problème corrigé.