[distcc] distcc-over-ssh fails with some sshd
Felix Lee
felix.1 at canids.net
Fri Jun 27 23:22:03 GMT 2003
summary
distccd 2.7.1 i386-unknown-netbsdelf1.5.3 (protocol 1)
sshd version OpenSSH_3.0.2 NetBSD_Secure_Shell-20020626
When sshd execs distccd, it gives distccd stdin and stdout
that are different, and stdin is not writable. distccd
expects to read and write on the same file descriptor. It
reads the request from stdin fine, then tries to write the
result to stdin and fails.
Note, this problem doesn't happen if I use
sshd version OpenSSH_3.6.1p2
on the same machine. So this is not really a big deal, but
it seems to me like it might be worth fixing, since the ssh
method can be used with any type of ssh-like program, and I
don't think there's any guarantee in general that stdin can
be written to.
symptom
$ DISTCC_VERBOSE=1 DISTCC_HOSTS=@remote distcc gcc -o x.o -c x.c
...
distcc[13910] (dcc_x_token_int) send DOTI000047f2
distcc[13910] (dcc_send_job) client finished sending request to server
distcc[13910] (dcc_select_for_read) select for read on fd6
distcc[13910] (dcc_readx) ERROR: unexpected eof on fd6
distcc[13910] (dcc_r_token_int) ERROR: read failed while waiting for token "DONE"
distcc[13910] (dcc_collect_child) ssh child 13912 terminated with status 0x6b00
...
distcc[13910] (dcc_build_somewhere) Warning: failed to distribute, running locally instead
workaround
Use a different sshd.
fix
It looks pretty trivial. Change dcc_run_job() in src/serve.c
to take two file descriptors instead of one, and propagate
the change back up to its callers.
More information about the distcc
mailing list