[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