[Nix-dev] Build job nixpkgsTrunk succeeded

Eelco Dolstra e.dolstra at tudelft.nl
Fri Nov 14 16:48:49 CET 2008


Hi,

Ludovic Courtès wrote:

> Michael Raskin <7c6f434c at mail.ru> writes:
> 
>> TU Delft Nix Buildfarm wrote:
>>> This is the build job supervisor script at cartman.
>>>
>>> I previously informed you that the build job `nixpkgsTrunk' had failed.
>>>
>>> I'm now happy to inform you the problem has disappeared; this job now
>>
>> Should I recreate the problem (reenable bison testsuite)?
> 
> Speaking of Bison, I fail to get any useful info as to what's failing on
> the build farm (and, needless to say, it all works flawlessly on my i686
> box).  So yes, I'd be happy if someone could reproduce the problem.  :-)

I looked into this a bit.  The test fails pretty much randomly.  For instance,
if I ran the test (050) from the command line manually it would work, as would
running under strace or saying checkPhase = "make check" in the Nix expression.
 I finally put "cd tests && ./testsuite -v -d 50" in the Nix expression, which
reproduced the failure while keeping debug output.  And that reveals:

===
$ cat
/tmp/nix-build-vh7sv0z9krmi1593j112izgbdjl8cspr-bison-2.4.drv-0/bison-2.4/tests/testsuite.dir/050/testsuite.log
#                             -*- compilation -*-
50. output.at:160: testing ...
./output.at:160: VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary
--show-reachable=no"; export VALGRIND_OPTS; bison -o foo.y foo.y
--- -   2008-11-14 14:53:42.399534641 +0000
+++
/tmp/nix-build-vh7sv0z9krmi1593j112izgbdjl8cspr-bison-2.4.drv-0/bison-2.4/tests/testsuite.dir/at-stderr
    2008-11-14 14:53:42.000000000 +0000
@@ -1,2 +1,4 @@
 foo.y: fatal error: refusing to overwrite the input file `foo.y'
+/nix/store/q70vsdncz0mz9ylwac2kgaw2a96a92cf-gnum4-1.4.9/bin/m4:/tmp/nix-build-vh7sv0z9krmi1593j112izgbdjl8cspr-bison-2.4.drv-0/bison-2.4/data/yacc.c:788:
ERROR: copying inserted file: Broken pipe
+/nix/store/q70vsdncz0mz9ylwac2kgaw2a96a92cf-gnum4-1.4.9/bin/m4: write error

50. output.at:160: 50. Conflicting output files:  -o foo.y (output.at:160):
FAILED (output.at:160)
===

Note the "Broken pipe" message from M4.  So it's that bug again :-)

I experimented with SIGPIPE a bit more and it turns out that this Nix expression
randomly fails (i.e. sometimes it says "Broken pipe" and sometimes it doesn't):

  dummy = runCommand "foo" {} ''
    seq 10000 | tee foo | head > /dev/null
  '';

The root cause is that Nix sets the SIGPIPE handler to SIG_IGN, which is
inherited by all the children.  I don't remember *why* we're ignoring SIGPIPE,
but there was probably a good reason ;-)  So I've committed a fix that sets
SIGPIPE to SIG_DFL when running the builder.

-- 
Eelco Dolstra | http://www.st.ewi.tudelft.nl/~dolstra/



More information about the nix-dev mailing list