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) al mio file di controllo Debian dipende dalla build.
Ho aggiunto –with=systemd al mio file di regole come segue:
%:
dh [email protected] --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 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
- Questi avvisi riguardano init.d che è il vecchio sistema che è stato sostituito da systemd, questi errori e avvisi sono semplicemente sbagliati, debuild pensa che io stia usando init.d perché ho configurato il mio pacchetto in modo errato?
- Avevo l'impressione che –with=systemd avrebbe creato questi script per me.
Aggiorna
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 in realtà si installa correttamente e il servizio si avvia correttamente. Gli errori lintian sono preoccupanti e vorrei andare fino in fondo.
Risposta accettata:
Anche io mi sono imbattuto in questo problema. Questo è quello che mi è venuto in mente:
Ti consigliamo di sovrascrivere dh_installinit e dh_systemd_start, questo è un esempio dal mio servizio di bridge di rete:
#!/usr/bin/make -f
PKGDIR=debian/tmp
%:
dh [email protected] --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 può essere trovata qui:https://github.com/Ubuntu-Solutions-Engineering/openstack-deb/tree/master/debian
Correlati:quali strumenti di gestione delle attività e del tempo sono disponibili?Ho anche usato https://github.com/lxc/lxd-pkg-ubuntu/blob/dpm-xenial/debian/rules come riferimento.
Spero che questo ti farà andare avanti perché mi ci è voluto un po' di tempo per capirlo.