GNU/Linux >> Tutoriels Linux >  >> Ubuntu

Comment empaqueter un service Systemd ?

J'essaie de packager une application mono pour qu'elle s'exécute 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) à mon fichier de contrôle Debian dépend de la construction.

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

%:
    dh [email protected] --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 lintien 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 juste faux, est-ce que debuild pense que j'utilise init.d parce que 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 package s'installe correctement et le service démarre correctement. Les erreurs de lintian sont inquiétantes, et j'aimerais aller au fond d'elles.

Réponse acceptée :

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

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

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

En relation :Quels outils de gestion des tâches et du temps sont disponibles ?

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 il m'a fallu un peu de temps pour comprendre cela.


Ubuntu
  1. Comment gérer les services Systemd avec Systemctl sous Linux

  2. Comment écrire un script de démarrage pour Systemd ?

  3. Comment définir des valeurs ulimit pour un service systemd

  4. Comment utiliser Systemd pour redémarrer un service en panne ?

  5. Comment envoyer un email si un service systemd est redémarré ?

Comment exécuter des conteneurs en tant que service Systemd avec Podman

Comment activer ou désactiver les services dans Ubuntu Systemd/Upstart

Comment exécuter un script Shell en tant que service Systemd sous Linux

Comment j'ai appris à arrêter de m'inquiéter et à aimer systemd

Comment configurer l'exécution automatique d'un script Python à l'aide de Systemd

Comment exécuter un script Shell en tant que service SystemD sous Linux