unofficial mirror of bug-guix@gnu.org 
 help / color / mirror / code / Atom feed
From: Mark H Weaver <mhw@netris.org>
To: Maxim Cournoyer <maxim.cournoyer@gmail.com>
Cc: 32050@debbugs.gnu.org
Subject: bug#32050: invoke (guix build utils) error reporting lacking
Date: Wed, 04 Jul 2018 13:45:32 -0400	[thread overview]
Message-ID: <87efginbcz.fsf@netris.org> (raw)
In-Reply-To: <878t6rkuuf.fsf_-_@gmail.com> (Maxim Cournoyer's message of "Wed, 04 Jul 2018 09:12:56 -0400")

Hi Maxim,

Maxim Cournoyer <maxim.cournoyer@gmail.com> writes:

> More problematic even, it seems "invoke" can't do everything that
> "system*" can?
>
> For example, the following package builds fine:
>
> (define-public docbook-dsssl-doc
>   (package
>     (name "docbook-dsssl-doc")
>     (version "1.79")
>     (source (origin
>               (method url-fetch)
>               (uri (string-append "mirror://sourceforge/docbook/"
>                                   name "/" version "/"
>                                   name "-" version ".tar.bz2"))
>               (sha256
>                (base32
>                 "1plp5ngc96pbna4rwglp9glcadnirbm3hlcjb4gjvq1f8biic9lz"))))
>     (build-system trivial-build-system)
>     (arguments
>      `(#:modules ((guix build utils))
>        #:builder
>        (begin
>          (use-modules (guix build utils))
>          (let ((source (assoc-ref %build-inputs "source"))
>                (out (assoc-ref %outputs "out")))
>            (mkdir-p out)
>            ;; Extract the "doc" subdirectory.
>            (system* "tar" "xf" source "--strip-components=1"
>                    "--no-same-owner" "-C" out
>                    (string-append "docbook-dsssl-" ,version "/doc"))))))
>     (native-inputs
>      `(("bzip2", bzip2)
>        ("tar" ,tar)))
>     (home-page "https://docbook.org/")
>     (synopsis "DocBook DSSSL style sheets documentation")
>     (description "Documentation for the DocBook DSSSL style sheets.")
>     (license non-copyleft)))
>
>
> ,run-in-store (build-package docbook-dsssl-doc #:use-substitutes? #t #:dry-run? #f)
> /gnu/store/ljr8xn3qbr3lahr29zc0lbki9x33zls6-docbook-dsssl-doc-1.79
> $4 = #t

Did you check to see if the extraction actually succeeded?

In this case, I don't see how it could have.  When using 'tar' from
within 'trivial-build-system', you need to add 'bzip2' to PATH, or else
'tar' will fail because it can't find 'bzip2'.  There are many examples
of setting PATH in (gnu packages fonts).

Because of the way you are using 'system*' here without the usual
'zero?' wrapped around it, the numeric result code is returned as the
result of the builder, and all numbers (even 0) are considered true in
Scheme.  So, this build will always succeed, ignoring errors from 'tar'.

> But changing just "system*" to "invoke", I get:
>
> @ build-remote /gnu/store/fdcg5nazw2jvpb7k4mq7q0750gq22zh7-docbook-dsssl-doc-1.79.drv 192.168.1.105
> Backtrace:
>            2 (primitive-load "/gnu/store/06zszks9mwp52gih8j0mj5bahfi?")
> In ice-9/eval.scm:
>    191:35  1 (_ #f)
> In /gnu/store/xlj36j9dw581iah51iyjgi75iikrj55h-module-import/guix/build/utils.scm:
>     616:6  0 (invoke _ . _)
>
> /gnu/store/xlj36j9dw581iah51iyjgi75iikrj55h-module-import/guix/build/utils.scm:616:6: In procedure invoke:
> Throw to key `srfi-34' with args `(#<condition &invoke-error [program: "tar" arguments: ("xf" "/gnu/store/yanfzfi7rdyf5scf5h65xbkn7xg0nnbn-docbook-dsssl-doc-1.79.tar.bz2" "--strip-components=1" "--no-same-owner" "-C" "/gnu/store/83yjsgvvapffhklg8md5cqa6gmb2dmqg-docbook-dsssl-doc-1.79" "docbook-dsssl-1.79/doc") exit-status: 127 term-signal: #f stop-signal: #f] 68fcc0>)'.
> builder for `/gnu/store/fdcg5nazw2jvpb7k4mq7q0750gq22zh7-docbook-dsssl-doc-1.79.drv' failed with exit code 1
> derivation '/gnu/store/fdcg5nazw2jvpb7k4mq7q0750gq22zh7-docbook-dsssl-doc-1.79.drv' offloaded to '192.168.1.105' failed: build of `/gnu/store/fdcg5nazw2jvpb7k4mq7q0750gq22zh7-docbook-dsssl-doc-1.79.drv' failed
> While executing meta-command:
> Throw to key `srfi-34' with args `(#<condition &nix-protocol-error [message: "build of `/gnu/store/fdcg5nazw2jvpb7k4mq7q0750gq22zh7-docbook-dsssl-doc-1.79.drv' failed" status: 100] a7228a0>)'.

Changing 'system*' to 'invoke' allowed you to see that something went
wrong.

> The error reported by `invoke' isn't accurate, and mutes important
> output from the program invoked.
>
> Example of a failed tar extraction:
>
> /gnu/store/xlj36j9dw581iah51iyjgi75iikrj55h-module-import/guix/build/utils.scm:616:6: In procedure invoke:
> Throw to key `srfi-34' with args `(#<condition &invoke-error [program: "tar" arguments: ("xf" "/gnu/store/yanfzfi7rdyf5scf5h65xbkn7xg0nnbn-docbook-dsssl-doc-1.79.tar.bz2" "--strip-components=1" "-C" "/gnu/store/rw7yzjk1wffza65z6l6rnn25qg97jvh1-docbook-dsssl-doc-1.79" "docbook-dssl-1.79/doc") exit-status: 127 term-signal: #f stop-signal: #f] 68fc80>)'.
>
>
> While reproducing the same error in an containerized environment,
> calling the command directly yields:
>
> tar xf yanfzfi7rdyf5scf5h65xbkn7xg0nnbn-docbook-dsssl-doc-1.79.tar.bz2 --strip-components=1 -C $PWD docbook-dssl-1.79/doc
> tar: docbook-dssl-1.79/doc: Not found in archive
> tar: Exiting with failure status due to previous errors
> maxim@apteryx /tmp/docbook-dsssl-doc [env]# echo $?
> 2
>
> Two observations:
>
> 1. invoke's reported exit status was wrong (127 rather than 2)
> 2. The useful error message "docbook-dssl-1.79/doc: Not found in
> archive" was masked.

I think what happened is that 'tar' actually failed in two different
ways.  In the first case, where the result code was 127, it failed
because 'bzip2' was not found in PATH.  In the second case, it failed
because "docbook-dssl-1.79/doc" was not found in the archive.

Or at least that's my guess.

     Regards,
       Mark

  reply	other threads:[~2018-07-04 17:47 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-07-04 12:50 bug#32050: invoke (guix build utils) error reporting lacking Maxim Cournoyer
     [not found] ` <handler.32050.B.153070867017871.ack@debbugs.gnu.org>
2018-07-04 13:12   ` Maxim Cournoyer
2018-07-04 17:45     ` Mark H Weaver [this message]
2018-07-08 15:59       ` Maxim Cournoyer
2018-07-10  2:42         ` Maxim Cournoyer
2020-05-28  4:42           ` Maxim Cournoyer

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://guix.gnu.org/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=87efginbcz.fsf@netris.org \
    --to=mhw@netris.org \
    --cc=32050@debbugs.gnu.org \
    --cc=maxim.cournoyer@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/guix.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).