• =?UTF-8?Q?Re:_Script_pour_d=c3=a9marrer_un_daemon_par_d=c3=a9faut_:?= =

    From Laurent COOPER@21:1/5 to All on Fri Apr 22 18:50:02 2016
    Copy: debian-devel-french@lists.debian.org

    This is an OpenPGP/MIME signed message (RFC 4880 and 3156) --bPIwl8tRcOo8koMjVEWgvpDDlvNbLMDsU
    Content-Type: text/plain; charset=windows-1252
    Content-Transfer-Encoding: quoted-printable

    Re bonjour.

    Avant toute chose, merci d'avoir pris le temps de me lire et de me répondre

    Le 22/04/2016 17:20, Cyril Brulebois a écrit :
    Hello,

    Laurent COOPER <laurent.cooper@ac-grenoble.fr> (2016-04-22):
    Je cherche à faire un package qui lance un daemon et je me suis servi de
    la structure du fichier init construite par défaut par les paquets debian. >>
    Dans mon postinst, je lance une

    invoke-rc.d mondaemon start

    et là ... ça plante

    Je lance à la main avec start-stop-daemon et les arguments du script ...
    ça marche.

    j'ai fini par trouver l'erreur

    case "$1" in
    start)
    [ "$VERBOSE" != no ] && log_daemon_msg "Starting $DESC" "$NAME"
    do_start
    case "$?" in
    0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
    2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
    esac
    ;;

    en fait, si VERBOSE vaut no (c'est la cas par défaut), le
    [ "$VERBOSE" != no ] retourne 1.

    Le && n'est donc pas évalué (normal, on veut pas afficher le log) mais
    du coup, le dernier truc évalué du script est 1, et c'est ce qui est
    retourné

    Après apt-get source dh-make dans stable, je vois un script qui contient :

    # Do NOT "set -e"

    Oui, c'est bien de ce script que je parle, qui sert de base pour la
    fourniture du service en théorie. C

    Le invoke-rc.d mondaemon start dit que ça n'a pas marché alors que tout
    avait bien marché

    Du coup, est ce le .init construit par dh_make est judicieux ? D'autant
    que la fin utilise log_end_msg sans le [ "$VERBOSE" != no ] génant pour
    la partie force-reload|restart)

    Est ce qu'il faudrait ouvrir un bug la dessus à votre avis, ou est ce
    que j'ai mal compris ?

    Je serais à ta place, j'écrirais un fichier service au lieu d'essayer de maintenir un script shell de 160+ lignes.


    Je ne comprends pas très bien. Je croyais que le script <paquet>.init
    était justement un squelette pour gérer un service. J'ai lu la
    documentation du mainteneur, le man de start-stop-daemon, et ça me
    semblait un bon point de départ.

    Mais justement, je lui trouve des incohérences qui font qu'il ne
    fonctionne pas dans sa forme actuelle. C'est pour cela que je me posais
    la question de savoir s'il ne devrait pas être modifié ou si ce petit
    "détail" ne devrait pas être documenté.

    Merci encore pour la réponse

    Laurent


    KiBi.



    --bPIwl8tRcOo8koMjVEWgvpDDlvNbLMDsU--

    -----BEGIN PGP SIGNATURE-----
    Version: GnuPG/MacGPG2 v2
    Comment: GPGTools - https://gpgtools.org

    iEYEARECAAYFAlcaRc4ACgkQuB19dK89d+CiFgCdHWgVsHXNkBmi2Zi4BH2MIsYX 5GoAnjb9bT+dzFT7p5A+I4xsyUMvcQz3
    =uIX8
    -----END PGP SIGNATURE-----

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From debian@jack.fr.eu.org@21:1/5 to Cyril Brulebois on Fri Apr 22 19:10:02 2016
    Tuuuutt tuuutt (bruit de sirène).
    Alerte, alerte, troll détecté.

    On 22/04/2016 17:57, Cyril Brulebois wrote:
    C'est un script d'init écrit en shell. On peut désormais décrire de manière plus *fiable* un service en quelques lignes, c'est ce qu'on
    appelle une unité systemd ; pour te faire une idée, tu peux jeter un œil à :
    /lib/systemd/system/*.service

    La documentation :
    systemd.unit(5)
    https://www.freedesktop.org/software/systemd/man/systemd.unit.html

    (Je n'ai pas vu de doc spécifique sur wiki.debian.org mais je n'ai pas cherché longuement.)


    KiBi.


    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Laurent COOPER@21:1/5 to All on Fri Apr 22 19:20:02 2016
    Copy: debian-devel-french@lists.debian.org

    This is an OpenPGP/MIME signed message (RFC 4880 and 3156) --kH3o4iQqtxVcvT4JGcMMskNT3mCMDQPAq
    Content-Type: text/plain; charset=utf-8
    Content-Transfer-Encoding: quoted-printable



    Le 22/04/2016 17:57, Cyril Brulebois a écrit :
    Laurent COOPER <laurent.cooper@ac-grenoble.fr> (2016-04-22):
    Avant toute chose, merci d'avoir pris le temps de me lire et de me répondre

    No worries.

    Après apt-get source dh-make dans stable, je vois un script qui contient : >>>
    # Do NOT "set -e"

    Oui, c'est bien de ce script que je parle, qui sert de base pour la
    fourniture du service en théorie.

    Justement, en suivant cette (forte) recommandation, avoir une commande qui retourne non-zéro ne met pas fin au script.

    Oui, pas de problème. J'ai bien un suivi cela, et je n'ai pas de set -e

    Le problème, c'est que c'est la dernière commande exécutée qui retourne
    1, pas par ce que il y a un set -e. Juste par ce que c'est la dernière.
    J'ai fait le test avec un script minimaliste
    test.sh
    ---------------
    #!/bin/sh

    . /lib/lsb/init-functions

    VERBOSE=no

    [ "$VERBOSE" != no ] && log_end_msg 0
    ---------------

    Si VERBOSE est à yes, pas de problème
    test.sh
    echo $?

    0

    Si VERBOSE est à no,
    test.sh
    echo $?
    1

    C'est normal, la dernière commande exécutée a retourné 1.

    Mais dans le cas d'un script appelé par invoke-rc.d, si la valeur
    retournée est 1, ça plante le postinst qui lui a un set -e

    Plus de détails sur set * :
    http://pubs.opengroup.org/onlinepubs/000095399/utilities/set.html

    Si tu n'as pas positionné cette option, il est possible que ton analyse initiale ne soit pas la bonne.

    Je ne comprends pas très bien. Je croyais que le script <paquet>.init
    était justement un squelette pour gérer un service. J'ai lu la
    documentation du mainteneur, le man de start-stop-daemon, et ça me
    semblait un bon point de départ.

    C'est un script d'init écrit en shell. On peut désormais décrire de manière plus fiable un service en quelques lignes, c'est ce qu'on
    appelle une unité systemd ; pour te faire une idée, tu peux jeter un œil à :
    /lib/systemd/system/*.service

    La documentation :
    systemd.unit(5)
    https://www.freedesktop.org/software/systemd/man/systemd.unit.html

    (Je n'ai pas vu de doc spécifique sur wiki.debian.org mais je n'ai pas cherché longuement.)



    Effectivement

    Mais je gère des serveurs qui étaient sous squeeze, sont en wheezy et n'utilisent pas (encore) systemd

    Ceci dit, il est temps que je m'y mette pour planifier le passage à jessie.


    Merci encore pour les réponses
    KiBi.



    --kH3o4iQqtxVcvT4JGcMMskNT3mCMDQPAq--

    -----BEGIN PGP SIGNATURE-----
    Version: GnuPG/MacGPG2 v2
    Comment: GPGTools - https://gpgtools.org

    iEYEARECAAYFAlcaTQUACgkQuB19dK89d+CRggCgknewvnrI7l3yhSluQ8WpMSca KE8An19Iio9wm/y1wITg2HH0pTWEHqvy
    =AeqG
    -----END PGP SIGNATURE-----

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Laurent COOPER@21:1/5 to All on Fri Apr 22 19:50:03 2016
    This is an OpenPGP/MIME signed message (RFC 4880 and 3156) --mjTdwJTrmrIxIvcq9WHwUUKSvR5DEBmdh
    Content-Type: text/plain; charset=utf-8
    Content-Transfer-Encoding: quoted-printable

    Ah. Au temps pour moi.
    J'ai du être un peu trop brutal sur une coupe de commentaires...

    Merci !

    Le 22/04/2016 18:22, Vincent Bernat a écrit :
    ❦ 22 avril 2016 18:10 +0200, Laurent COOPER <laurent.cooper@ac-grenoble.fr> :

    [ "$VERBOSE" != no ] && log_end_msg 0

    Y'a un 'exit 0' en fin de script normalement.



    --mjTdwJTrmrIxIvcq9WHwUUKSvR5DEBmdh--

    -----BEGIN PGP SIGNATURE-----
    Version: GnuPG/MacGPG2 v2
    Comment: GPGTools - https://gpgtools.org

    iEYEARECAAYFAlcaVg0ACgkQuB19dK89d+DabQCeKXCWb0U40d6djYPFF88fy52F j9AAoKuXLmPVczolXv1UTAKpHgTlt/Qz
    =5k1+
    -----END PGP SIGNATURE-----

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)