• =?UTF-8?Q?Script_pour_d=c3=a9marrer_un_daemon_par_d=c3=a9faut_:_un_?= =

    From Laurent COOPER@21:1/5 to All on Fri Apr 22 18:00:01 2016
    Bonjour à tous

    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é

    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 ?

    Merci par avance pour vos avis

    Laurent

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Cyril Brulebois@21:1/5 to All on Fri Apr 22 18:30:02 2016
    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"

    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.


    KiBi.

    -----BEGIN PGP SIGNATURE-----
    Version: GnuPG v1

    iQIcBAEBAgAGBQJXGkFMAAoJEP+RSvDCs1UgkiYQAKyvipAQJFTE2lzWGESz3rxj fHyQcFBuD2UUMZg00jPgtIxdySXcgBIEqNQzJacoPkawPMIn9toIAN+DWFa4gopL INKKWTGDYzuG02b9gbDrFhYCVEc0JvmVXQUqralFL2KkfJmVv9FLHU4vEq+sNLIB uPCfQFapOHJpR2ZVjtlt7+P6zdzboZJhk76AX+jvQBASHOED6R0Wr9utE72Hlgqu 4JdNmPNutkCb9CMD98iDv9h3AtKl/bL4jy4rSz0BR+7e/HWxR3lc/FSGZKWbK8Au aR57/uOvSGyDKmS35pgrPzks6vg6puJ8BivinWzwgKhDR52d4VFF0BWnbn0LHjfr Sw20Xlr7VRkg0T+DehZj8GYDHU2zatQDM91sWMKR9VgX1GYFy1BZGlQesrU8n6oN 49K2aq0RbqVK3AClzM4eA8FRR+TISIVvnMjfWY5xqVqWKDmWYGOzUkqnKMizNyGS qGBT/n76UwaJy6ffX1nq+zlwJVG0GssZJW+aYDdpIo0Lp7wuhXfJlZf0MqDHmYRZ WooE9HS5ZwUsPmKaYdPteY9L0PPt7npwo+JUMP67S16Wy+HPKcqa3+YZZ0e3V6dI hDSeHzuixrtaFa7EX7L9eYTbnQ6EnYi4rTl//02A+nwMYtv3pAj7DBzkiKCsusAh uWv2Sj06ZOL0hFWZN9Fp
    =uP2W
    -----END PGP SIGNATURE-----

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Cyril Brulebois@21:1/5 to All on Fri Apr 22 19:00:02 2016
    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.

    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.)


    KiBi.

    -----BEGIN PGP SIGNATURE-----
    Version: GnuPG v1

    iQIcBAEBAgAGBQJXGknMAAoJEP+RSvDCs1UgpscP/Azc/LFpDtu5hFnSMtVYfXmV 0a2yjIMVbM2Oi0A6k+FJPUD21j8l42+5oR5LSqK6kK7TtIsFnjWqDC5rrflDzs27 y4bIzA8i49elbwR7ELwgiHnVFP7HXJQacmlquZxGSqI90zH16jBBeXHVIdOcVuhU kH1uwLl16qf54+8eKMu5/7RQprP9yWRz6m4wYgHCvbWFJtYkcAIMV/CwTP+tFC7A tv1V11WOSu+Ry4PaXfqM3dj6JYFOOf43kbJk3M3TvcIQZhNnFuGjOKATAqKuIh9z EuwSbsXmPPh/uERL0IUddh9De4d45aYUcInSQFwlMOq1UJHNpBOz4q9fh5W9aRjx CI62WRZlrMFqtazeOIGP/1w/SGIv33ctcr+BldFccgoOrTxiIRrVcgVJ+MPMNimI IMOuASAxzJSmiC2bOL8uXcXPq+9VKnrvtzke7iU4nLOdDcLciOPMtpAH8UAwNLdM NZSv6Cb0sUUEVbD4CSjnfK06VuIexFHs38gLaj8SXi9EaQDWbuVgq4WTrTFfiCnD nQeLWWg4vaJhQzT/olfM8PArCCEG9PPfA349qcLK5Of12KUmc+fu1K4MnM2h3cDc jZJv/S7nU5AoBjUd59w6pFeSOFA78CFObP3zAkgLpP0a2xEKD8P8Tk/QHuyZ3VdT s6Yfz9yhelUuAkPkPerK
    =60Iw
    -----END PGP SIGNATURE-----

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Cyril Brulebois@21:1/5 to All on Fri Apr 22 19:30:04 2016
    Laurent COOPER <laurent.cooper@ac-grenoble.fr> (2016-04-22):
    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 […]

    Oh right, j'étais resté sur la ligne *avant* le do_start, sans voir
    qu'après coup on refait le même genre de test pour la partie logging,
    en fonction de "$?".

    Effectivement, on pourrait imaginer stocker $? et faire un exit avec
    après la gestion du log, ou bien opter pour une construction différente
    de « [ "$VERBOSE" != no ] && log_end_msg »… Un rapport de bogue semble
    une bonne idée. Je ne pense pas que ça soit le type de correction qu'on prenne pour stable cependant. Et le script s'est vidé dans la version
    que l'on a dans unstable à l'heure actuelle…

    Maintenant, il semble référencer /lib/init/init-d-script qui contient :

    do_start()
    {
    if is_call_implemented do_start_prepare ; then
    call do_start_prepare
    fi
    [ "$VERBOSE" != no ] && log_daemon_msg "Starting $DESC" "$NAME"
    call do_start_cmd
    case "$?" in
    0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
    2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
    esac
    if is_call_implemented do_start_cleanup ; then
    call do_start_cleanup
    fi
    }

    Donc ton problème disparaît probablement avec ce if en fin de fonction.


    KiBi.

    -----BEGIN PGP SIGNATURE-----
    Version: GnuPG v1

    iQIcBAEBAgAGBQJXGlDSAAoJEP+RSvDCs1Ug1/UP/RRcBTY8A3l0as78WkvnROMO NAu3oo9fZiwn72QLOMaUB80QYIbE4T9ssONlLwTXaZXW6qs7XwU43yWvmS9GBHmy MiNE9gtqNt/i1Y/MNo+nsdYGRPogYOqEm3v54ms0ceaDdc/oFGWafUk7RQpEKSbQ EghmyAGnlUm/JqIPo5tQmYfw2Fir9MDPRek3XhXlYnBPeV+kSHroORZ0eIwPnr6K mJNEP6yY/b5MmB3Ae42Q7GJX303UV+zTdyzPSFAQ3+6GM2gdoY9/UKRIWJGzEpaD c6k/TTj77AXYys4xCA31JMeMRisd9gfVYW7qISwXZr6kcI0QdAb8x5SdRXTIO0DI PKkKhcP8HsFVUdgmim6mxoYRI6oO5DW0FGFuGm60OXS1QCBqJGsfp5rj9BJHl4qM JO6hqwb5k8r/Dg17VpynJMM9kkV2uF+OSQCERClvUXpbMNeYJK4LKaibBKN9K1Af iGwslwXBgCpqBbJnSaqy6bMZ4bI0qeL8Opln4uxZvZ7edCo863hwyiTc1wdBa3sz lxMf6J74OhDw/L/yLGyR1nJWfjH6wTf5FWetVmUs/QglIlMmUJPMPwdsfyW8uR14 GnQ4NZcM6JGY/2+pr2i1437FPC54QMQpsyVQ7C3wX1/o6+d70B3WIHbIXYG5Kfrv 9lcrHV+DC2b6QKHC1MyZ
    =bqmi
    -----END PGP SIGNATURE-----

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