Journal Juste un bug idiot.

Posté par  . Licence CC By‑SA.
Étiquettes :
-27
6
avr.
2012

J'avais besoin d'un core dump, abrt me saoule a tout garder pour lui. Donc, je voulais faire en sorte que abrt ait son core, et que j'ai le mien dans /tmp, donc.

Je trifouille dans les réglages du noyau, /proc/sys/kernel/core_pattern contient "| /usr/libexec/abrt-hook-ccpp %s %c %p %u %g %t e"

Et je me dis que c'est cool, un coup de tee et ça marchera comme sur des roulettes.
Donc j'y met ça :
"| /usr/bin/tee /tmp/core.%e.%p | /usr/libexec/abrt-hook-ccpp %s %c %p %u %g %t e"

Et voilà ! Bon, en fait, ce second truc qui ressemble à un pipe, c'est pas un pipe du tout, c'est une barre verticale, /usr/libexec/abrt-hook-ccpp par contre c'est bien abrt-hook-ccpp, bref. je pensais avoir trouvé une solution élégante, et abrt c'est soudainement mis à refuser de fonctionner. Même quand je restaurais la valeur de core_pattern, rien n'y faisait. Pire, le noyau alors ne faisait même plus de core dumps ! J'ai mis un sacré moment à comprendre.
Jusqu’à ce que je fasse "cd /".

  • # Et ?

    Posté par  (site Web personnel) . Évalué à 10.

    Je ne sais pas ce qu'est abrt, ni ce fichier, ni ce que tu as vu dans ton /. À part ça c'est génial comme journal, j'ai compris que toi tu avais compris (et que tu aimais l'imparfait).

    Il existe deux catégories de gens : ceux qui divisent les gens en deux catégories et les autres.

    • [^] # Re: Et ?

      Posté par  (site Web personnel) . Évalué à 10.

      C'est souvent comme ça avec les surréalistes. Un pipe n'est pas un pipe etc…
      Bref encore un coup de Magritte.

    • [^] # Re: Et ?

      Posté par  . Évalué à 3.

      Peut-être que son clavier s´est blo

    • [^] # Re: Et ?

      Posté par  (site Web personnel) . Évalué à 10.

      Je sais que parfois je colle une espace insécable (ou un truc du genre) en gardant le altgr enfoncé après avoir fait le pipe (et donc en appuyant sur espace). Ça fait une erreur bizarre (genre "grep: command not found" si je redirigeais dans grep par exemple).

      C'est peut-être ça le problème qui est arrivé à l'auteur ? J'en sais rien en fait, vu que j'ai pas compris grand chose non plus.

      • [^] # Re: Et ?

        Posté par  . Évalué à 3.

        Putain… C'est pour ça…

        Je crois que c'est bien ça qui m'est arrivé… Du coup j'ai pris l'habitude de ne plus mettre d'espace après le pipe (seulement avant)…

      • [^] # Re: Et ?

        Posté par  . Évalué à 2.

        Il doit bien y avoir un moyen de configurer ton shell pour qu'il t'avertisse quand ça arrive.

        Tous les contenus que j'écris ici sont sous licence CC0 (j'abandonne autant que possible mes droits d'auteur sur mes écrits)

        • [^] # Re: Et ?

          Posté par  (site Web personnel) . Évalué à 3.

          Ou de reconfigurer le clavier pour ne pas faire d'espace insécable avec altgr+espace, mais avec une combinaison plus difficile à faire par erreur

          • [^] # Re: Et ?

            Posté par  . Évalué à 5.

            Mais du coup, c'est plus difficile à en faire quand on écrit du texte.

            « Rappelez-vous toujours que si la Gestapo avait les moyens de vous faire parler, les politiciens ont, eux, les moyens de vous faire taire. » Coluche

            • [^] # Re: Et ?

              Posté par  . Évalué à -4.

              Tant mieux, parce que justement ça sert à rien.

              • [^] # Re: Et ?

                Posté par  . Évalué à 7.

                Si, avant les ;,!,?,»,: et après «. Et si c'est ajouter automatiquement sur un traitement de texte, ce n'est pas le cas ailleurs, comme ici.

                « Rappelez-vous toujours que si la Gestapo avait les moyens de vous faire parler, les politiciens ont, eux, les moyens de vous faire taire. » Coluche

          • [^] # Re: Et ?

            Posté par  (site Web personnel) . Évalué à 4.

            Je me permets de faire un peu de publicité pour un billet de blog que j'ai écrit récemment à ce sujet : Les espaces insécables pour les codeurs.

        • [^] # Re: Et ?

          Posté par  . Évalué à 5.

          Il te répond déjà. Les vieilles versions disent :

          bash:  toto : commande introuvable
          
          

          pas

          bash: toto : commande introuvable
          
          

          mais il faut de bons yeux pour repérer le double espace.

          Les nouvelles versions disent :

          bash: $'\302\240toto' : commande introuvable
          
          
      • [^] # Re: Et ?

        Posté par  . Évalué à -1.

        Non en fait le problème c'était que la commande n'était simplement pas exécuté dans un shell, c'était du brute. :)

        Dans le même genre, en bépo, pour faire un point virgule c'est MAJ + , du coup je me retrouve souvent avec des espaces insécables avant les point virgules dans le code C. Le standard ne prévoit pas du tout leur présence, ça fait juste un message d'erreur incompréhensible de l'analyseur syntaxique.

        Please do not feed the trolls

    • [^] # Re: Et ?

      Posté par  . Évalué à 10.

      D'après "man 5 core":

      Piping core dumps to a program
         Since kernel  2.6.19,  Linux  supports  an  alternate  syntax  for  the
         /proc/sys/kernel/core_pattern  file.   If  the  first character of this
         file is a pipe symbol (|), then the remainder of  the  line  is  inter‐
         preted as a program to be executed.  Instead of being written to a disk
         file, the core dump is given as standard input to  the  program.   Note
         the following points:
      
         *  The program must be specified using an absolute pathname (or a path‐
            name relative to the root directory, /), and must immediately follow
            the '|' character.
      
         *  The process created to run the program runs as user and group root.
      
         *  Command-line  arguments can be supplied to the program (since kernel
            2.6.24), delimited by white space (up to a total line length of  128
            bytes).
      
         *  The  command-line  arguments  can  include  any  of the % specifiers
            listed above.  For example, to pass the PID of the process  that  is
            being dumped, specify %p in an argument.
      
      

      Il n'est pas dit qu'il est possible d'utiliser des pipes comme si c'était un shell. Le pipe en début de ligne est juste là pour montrer que c'est un programme à exécuter.

      Du coup mon interprétation serait la suivante, le programme tee va se lancer avec les argv suivants:

      argv[0]="/usr/bin/tee"
      argv[1]="/tmp/core.%e.%p" (enfin avec le contenu correct de %e et %p)
      argv[2]="|"
      argv[3]="/usr/libexec/abrt-hook-ccpp"
      argv[4]="%s"
      argv[5]="%c"
      argv[6]="%p"
      argv[7]="%u"
      argv[8]="%g"
      argv[9]="%t"
      argv[10]="e"
      
      

      Du coup, on aurait bien le core dans /tmp/code.%e.%p, par contre, tee écrirait aussi le contenu dans un fichier "|", "e", "%c", etc.

      Et surtout dans /usr/libexec/abrt-hook-ccpp, qui serait donc également écrasé par le core dump… Et qui ne marcherait donc plus !

      Il me semble que le core file est enregistré dans le "current working directory" (cwd) du process qui crashe, donc si cwd="/", on se retrouve avec tous le fichiers mentionnés ci-dessus directement dans /, et c'est un beau bordel.

      J'ai bon?

      • [^] # Re: Et ?

        Posté par  . Évalué à 1.

        Personnellement je me serais plutôt lancé dans la création d'un wrapper et ainsi avoir un peu plus de liberté.

        Tous les contenus que j'écris ici sont sous licence CC0 (j'abandonne autant que possible mes droits d'auteur sur mes écrits)

      • [^] # Re: Et ?

        Posté par  . Évalué à 1.

        Je pense en effet que tu es le grand gagnant. Ta réponse va de pair avec le texte de Zylabon.

        Merci à vous deux pour ce drôle d'humour ;-)

      • [^] # Re: Et ?

        Posté par  . Évalué à 2.

        Oui !
        Voila, j'ai trouvé ça intéressant comme bug. Nos habitudes sur la sémantiques des symboles nous font souvent faire des bêtises. Et là c'est particulièrement perturbant que la sémantique chaque suivant que le | soit à la première position où ailleurs.

        Maintenant, faut croire que je ne sais pas faire un bon journal d'un bon bug.

        Please do not feed the trolls

        • [^] # Re: Et ?

          Posté par  . Évalué à 4.

          En quoi c'est un bug ?

          « Rappelez-vous toujours que si la Gestapo avait les moyens de vous faire parler, les politiciens ont, eux, les moyens de vous faire taire. » Coluche

  • # enigme du sphinx

    Posté par  . Évalué à 10.

    Ton truc c'est l'énigme du sphinx ou quoi ? Bon disons que je réponds qu'il y a trois core dump dans le kernel , une fois le matin quand tu allumes ta machine, une fois à midi quand elle se met en veille pendant la pause casse-croute et une fois le soir quand tu éteint ta machine.

    Plus sérieusement je sais que je suis a coté de la plaque mais voile de ce que je comprend que tu as essayé de réinventer le pipe , mais en fait tu voulais juste changer de répértoire . A ce moment tu t'es apperçue que cd existait. T'en a profité pour aller à la racine et faire mumuse avec le kernel.

    L'interprétation de ton texte serait plus simple si tu l'avais écris en hieroglyphes de l'ancienne egypte gardé par un monstre qui pose des questions débile pour dévorer les ignorants qui ne savent pas comprendre la subtilité des questions.

    • [^] # Re: enigme du sphinx

      Posté par  (site Web personnel) . Évalué à 7.

      Rien à voir avec le sphinx, c'est un message de la DGSE prenant contact avec un obscur preneur d'otages.

      Prochainement, je vous proposerai peut-être un commentaire constructif.

  • # Oui

    Posté par  . Évalué à 7.

    Zylabon, Président !
    Zylabon, Président !
    Zylabon, Président !

  • # He oui

    Posté par  . Évalué à 3. Dernière modification le 10/04/12 à 17:40.

    Et voilà ! Bon, en fait, ce second truc qui ressemble à un pipe, c'est pas un pipe du tout, c'est une barre verticale

    ceci n'est pas une pipe

    Bravo tu vient de découvrir la différence entre un signe et sa représentation, soit exactement la signification du tableau de Magritte. Et avec une pipe en plus, compliments.

    Moralité, avant de bidouiller : RTFM !

Suivre le flux des commentaires

Note : les commentaires appartiennent à ceux qui les ont postés. Nous n’en sommes pas responsables.