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
- 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?
- 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.
postrm
script? A-t-il le passe-partout debhelper?dh
) devrait en générer des appropriés. Exécutezdpkg-deb --control
le fichier deb généré, et regardez dans le nouvellement crééDEBIAN
répertoirepostinst
,postrm
fichiers.Réponses:
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:
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.
la source
Lorsque vous n'incluez pas les scripts d'initialisation SysV ou Upstart, demandez
dh_installinit
de ne pas modifier les scriptspostinst
/postrm
/prerm
.dh_systemd
va le gérer.Cela s'applique au
debhelper
niveau de compatibilité <10 et à 10 même s'ildh_systemd
a été fusionnédebhelper
.Selon https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=800043
debhelper
niveau de compatibilité 11> = cela sera corrigé.la source