[distcc] Protocol error?
Emre Can Sezer
ecsezer at ncsu.edu
Wed Jul 23 17:56:07 GMT 2008
In srvrpc.c I removed the code that checks the protocol ID and assigned it
DCC_VER_3 assuming that this is the protocol ID for using pump mode. This
solved my connection problems and the server invoked the compiler as it
should. Being a 32 bit machine, the output is no good for me, but this
strengthens my belief that the problem is on the client side code and
there should be a simple fix.
Here is the rude change I made in srvrpc.c;
int dcc_r_request_header(int ifd,
enum dcc_protover *ver_ret)
{
unsigned vers;
int ret;
if ((ret = dcc_r_token_int(ifd, "DIST", &vers)) != 0) {
rs_log_error("client did not provide distcc magic fairy dust");
return ret;
}
/*
if (vers > DCC_VER_3) {
rs_log_error("can't handle requested protocol version is %d", vers);
return EXIT_PROTOCOL_ERROR;
}
*/
// JohnS
vers = DCC_VER_3;
*ver_ret = (enum dcc_protover) vers;
return 0;
}
JohnS
> I compiled distcc using the -m32 flag as follows:
>
> ecsezer at xensezer:~/distcc-3.0rc2$ make clean
> ecsezer at xensezer:~/distcc-3.0rc2$ CC="gcc -m32" ./configure
>
> I don't know much about cross compiling, so I checked the output which
> seems to have compiled for 32-bits.
>
> ecsezer at xensezer:~/distcc-3.0rc2$ readelf -h distcc
> ELF Header:
> Magic: 7f 45 4c 46 01 01 01 00 00 00 00 00 00 00 00 00
> Class: ELF32
> Data: 2's complement, little endian
> Version: 1 (current)
> OS/ABI: UNIX - System V
> ABI Version: 0
> Type: EXEC (Executable file)
> Machine: Intel 80386
> Version: 0x1
> Entry point address: 0x8049c60
> Start of program headers: 52 (bytes into file)
> Start of section headers: 285204 (bytes into file)
> Flags: 0x0
> Size of this header: 52 (bytes)
> Size of program headers: 32 (bytes)
> Number of program headers: 7
> Size of section headers: 40 (bytes)
> Number of section headers: 38
> Section header string table index: 35
>
>
> I did not perform any changes on the server machines since I thought I
> would be able to see if server was sending DISTfffffff or not.
> Unfortunately, it still is. So the problem persists.
>
> Please let me know if there is anything else you'd like me to try.
>
> JohnS
>
>> Just from a quick glance, this looks like it might be a 64-bit porting
> issue.
>> So a likely work-around is to build with a 32-bit compiler (e.g. set
> CC=i486-linux-gnu-gcc before running configure).
>>
>> But I will take a more detailed look...
>>
>> On Tue, Jul 22, 2008 at 3:01 PM, Emre Can Sezer <ecsezer at ncsu.edu>
>> wrote:
>>
>>> I've installed distcc on two computers and I'm trying to build the
> linux kernel. I'm having difficulty with getting distcc to work. I
> get the following error on the server side (distccd) when run with
> verbose:
>>>
>>> distccd[12535] (main) chdir to /tmp
>>> distccd[12535] (dcc_setup_daemon_path) daemon's PATH is
>>> /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
> distccd[12535] (dcc_listen_by_addr) ERROR: bind of 152.14.92.46:3632
> failed: Address already in use
>>> distccd[12535] (dcc_exit) exit: code 102; self: 0.000000 user 0.000000
> sys; children: 0.000000 user 0.000000 sys
>>> distccd[12540] (main) chdir to /tmp
>>> distccd[12540] (dcc_setup_daemon_path) daemon's PATH is
>>> /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
> distccd[12540] (dcc_listen_by_addr) listening on 152.14.92.46:3632
> distccd[12540] (dcc_defer_accept) TCP_DEFER_ACCEPT turned on
>>> distccd[12540] (dcc_standalone_server) 2 CPUs online on this server
> distccd[12540] (dcc_standalone_server) allowing up to 4 active jobs
> distccd[12540] (dcc_ignore_sighup) ignoring SIGHUP
>>> distccd[12541] (dcc_detach) setsid to session 12541
>>> distccd[12541] (dcc_log_daemon_started) preforking daemon started
>>> (3.0rc2
>>> i686-pc-linux-gnu, built Jul 22 2008 13:30:26)
>>> distccd[12541] (dcc_create_kids) up to 1 children
>>> distccd[12541] (dcc_create_kids) up to 2 children
>>> distccd[12541] (dcc_create_kids) up to 3 children
>>> distccd[12541] (dcc_create_kids) up to 4 children
>>> distccd[12542] (dcc_check_client) connection from 152.14.92.51:47447
> distccd[12542] (dcc_check_address) deny client 0x335c0e98, value
> 0x100007f, mask 0xffffffff
>>> distccd[12542] (dcc_check_address) match client 0x335c0e98, value
> 0x5c0e98, mask 0xffffff
>>> distccd[12542] (dcc_r_token_int) got DISTffffffff
>>> distccd[12542] (dcc_r_request_header) ERROR: can't handle requested
> protocol version is -1
>>> distccd[12542] (dcc_cleanup_tempfiles_inner) deleted 3 temporary files
> distccd[12542] (dcc_job_summary) client: 152.14.92.51:47447 REJ_BAD_REQ
> exit:0 sig:0 core:0 ret:109 time:0ms
>>>
>>>
>>>
>>>
>>> So the protocol token I'm passing is fffffffff. I confirmed this on
> the client side as well (running distcc in case I'm using the wrong
> terms).
>>>
>>>
>>>
>>> ...
>>> distcc[9560] (dcc_unlock) release lock fd5
>>> distcc[9560] exec on haemosu,cpp: /usr/bin/gcc -MD -MF
> init/.version.o.d -nostdinc -isystem
> /usr/lib/gcc/x86_64-linux-gnu/4.2.3/include
>>> -D__KERNEL__ -Iinclude -include include/linux/autoconf.h -Wall -Wundef
> -Wstrict-prototypes -Wno-trigraphs -fno-strict-aliasing -fno-common
> -Werror-implicit-function-declaration -O2 -fno-stack-protector -m64
> -mtune=generic -mno-red-zone -mcmodel=kernel -funit-at-a-time
>>> -maccumulate-outgoing-args -pipe -Wno-sign-compare
>>> -fno-asynchronous-unwind-tables -mno-sse -mno-mmx -mno-sse2 -mno-3dnow
> -Iinclude/asm-x86/mach-default -fomit-frame-pointer -g
>>> -Wdeclaration-after-statement -Wno-pointer-sign -DKBUILD_STR(s)=#s
> -DKBUILD_BASENAME=KBUILD_STR(version)
>>> -DKBUILD_MODNAME=KBUILD_STR(version)
>>> -c -o init/.tmp_version.o init/version.c -MT init/.tmp_version.o
> distcc[9560] (dcc_note_state) note state 2, file "version.c", host
> "haemosu"
>>> distcc[9560] (dcc_connect_by_addr) started connecting to
>>> 152.14.92.46:3632
>>> distcc[9560] (dcc_select_for_write) select for write on fd5
>>> distcc[9560] (dcc_note_state) note state 4, file "(NULL)", host
> "(NULL)" distcc[9560] (dcc_x_token_int) send DISTffffffff
>>> distcc[9560] (dcc_x_token_int) send CDIR00000022
>>> distcc[9560] (dcc_x_token_string) send string
>>> '/home/ecsezer/kernels/linux-2.6.26'
>>> distcc[9560] (dcc_x_token_int) send ARGC0000002f
>>> distcc[9560] (dcc_x_token_int) send ARGV0000000c
>>> distcc[9560] (dcc_x_token_string) send string '/usr/bin/gcc'
>>> distcc[9560] (dcc_x_token_int) send ARGV00000003
>>> distcc[9560] (dcc_x_token_string) send string '-MD'
>>> distcc[9560] (dcc_x_token_int) send ARGV00000003
>>> distcc[9560] (dcc_x_token_string) send string '-MF'
>>> distcc[9560] (dcc_x_token_int) send ARGV00000011
>>> distcc[9560] (dcc_x_token_string) send string 'init/.version.o.d'
> distcc[9560] (dcc_x_token_int) send ARGV00000009
>>> distcc[9560] (dcc_x_token_string) send string '-nostdinc'
>>> distcc[9560] (dcc_x_token_int) send ARGV00000008
>>> distcc[9560] (dcc_x_token_string) send string '-isystem'
>>> distcc[9560] (dcc_x_token_int) send ARGV0000002b
>>> distcc[9560] (dcc_x_token_string) send string
>>> '/usr/lib/gcc/x86_64-linux-gnu/4.2.3/include'
>>> distcc[9560] (dcc_x_token_int) send ARGV0000000c
>>> distcc[9560] (dcc_x_token_string) send string '-D__KERNEL__'
>>> distcc[9560] (dcc_x_token_int) send ARGV00000009
>>> distcc[9560] (dcc_x_token_string) send string '-Iinclude'
>>> distcc[9560] (dcc_x_token_int) send ARGV00000008
>>> distcc[9560] (dcc_x_token_string) send string '-include'
>>> distcc[9560] (dcc_x_token_int) send ARGV00000018
>>> distcc[9560] (dcc_x_token_string) send string
> 'include/linux/autoconf.h' distcc[9560] (dcc_x_token_int) send
> ARGV00000005
>>> distcc[9560] (dcc_x_token_string) send string '-Wall'
>>> distcc[9560] (dcc_x_token_int) send ARGV00000007
>>> distcc[9560] (dcc_x_token_string) send string '-Wundef'
>>> distcc[9560] (dcc_x_token_int) send ARGV00000013
>>> distcc[9560] (dcc_x_token_string) send string '-Wstrict-prototypes'
> distcc[9560] (dcc_x_token_int) send ARGV0000000e
>>> distcc[9560] (dcc_x_token_string) send string '-Wno-trigraphs'
>>> distcc[9560] (dcc_x_token_int) send ARGV00000014
>>> distcc[9560] (dcc_x_token_string) send string '-fno-strict-aliasing'
> distcc[9560] (dcc_x_token_int) send ARGV0000000b
>>> distcc[9560] (dcc_x_token_string) send string '-fno-common'
>>> distcc[9560] (dcc_x_token_int) send ARGV00000025
>>> distcc[9560] (dcc_x_token_string) send string
>>> '-Werror-implicit-function-declaration'
>>> distcc[9560] (dcc_x_token_int) send ARGV00000003
>>> distcc[9560] (dcc_x_token_string) send string '-O2'
>>> distcc[9560] (dcc_x_token_int) send ARGV00000014
>>> distcc[9560] (dcc_x_token_string) send string '-fno-stack-protector'
> distcc[9560] (dcc_x_token_int) send ARGV00000004
>>> distcc[9560] (dcc_x_token_string) send string '-m64'
>>> distcc[9560] (dcc_x_token_int) send ARGV0000000e
>>> distcc[9560] (dcc_x_token_string) send string '-mtune=generic'
>>> distcc[9560] (dcc_x_token_int) send ARGV0000000d
>>> distcc[9560] (dcc_x_token_string) send string '-mno-red-zone'
>>> distcc[9560] (dcc_x_token_int) send ARGV0000000f
>>> distcc[9560] (dcc_x_token_string) send string '-mcmodel=kernel'
> distcc[9560] (dcc_x_token_int) send ARGV00000010
>>> distcc[9560] (dcc_x_token_string) send string '-funit-at-a-time'
> distcc[9560] (dcc_x_token_int) send ARGV0000001a
>>> distcc[9560] (dcc_x_token_string) send string
>>> '-maccumulate-outgoing-args'
>>> distcc[9560] (dcc_x_token_int) send ARGV00000005
>>> distcc[9560] (dcc_x_token_string) send string '-pipe'
>>> distcc[9560] (dcc_x_token_int) send ARGV00000011
>>> distcc[9560] (dcc_x_token_string) send string '-Wno-sign-compare'
> distcc[9560] (dcc_x_token_int) send ARGV0000001f
>>> distcc[9560] (dcc_x_token_string) send string
>>> '-fno-asynchronous-unwind-tables'
>>> distcc[9560] (dcc_x_token_int) send ARGV00000008
>>> distcc[9560] (dcc_x_token_string) send string '-mno-sse'
>>> distcc[9560] (dcc_x_token_int) send ARGV00000008
>>> distcc[9560] (dcc_x_token_string) send string '-mno-mmx'
>>> distcc[9560] (dcc_x_token_int) send ARGV00000009
>>> distcc[9560] (dcc_x_token_string) send string '-mno-sse2'
>>> distcc[9560] (dcc_x_token_int) send ARGV0000000a
>>> distcc[9560] (dcc_x_token_string) send string '-mno-3dnow'
>>> distcc[9560] (dcc_x_token_int) send ARGV0000001e
>>> distcc[9560] (dcc_x_token_string) send string
>>> '-Iinclude/asm-x86/mach-default'
>>> distcc[9560] (dcc_x_token_int) send ARGV00000014
>>> distcc[9560] (dcc_x_token_string) send string '-fomit-frame-pointer'
> distcc[9560] (dcc_x_token_int) send ARGV00000002
>>> distcc[9560] (dcc_x_token_string) send string '-g'
>>> distcc[9560] (dcc_x_token_int) send ARGV0000001d
>>> distcc[9560] (dcc_x_token_string) send string
>>> '-Wdeclaration-after-statement'
>>> distcc[9560] (dcc_x_token_int) send ARGV00000011
>>> distcc[9560] (dcc_x_token_string) send string '-Wno-pointer-sign'
> distcc[9560] (dcc_x_token_int) send ARGV00000012
>>> distcc[9560] (dcc_x_token_string) send string '-DKBUILD_STR(s)=#s'
> distcc[9560] (dcc_x_token_int) send ARGV00000025
>>> distcc[9560] (dcc_x_token_string) send string
>>> '-DKBUILD_BASENAME=KBUILD_STR(version)'
>>> distcc[9560] (dcc_x_token_int) send ARGV00000024
>>> distcc[9560] (dcc_x_token_string) send string
>>> '-DKBUILD_MODNAME=KBUILD_STR(version)'
>>> distcc[9560] (dcc_x_token_int) send ARGV00000002
>>> distcc[9560] (dcc_x_token_string) send string '-c'
>>> distcc[9560] (dcc_x_token_int) send ARGV00000002
>>> distcc[9560] (dcc_x_token_string) send string '-o'
>>> distcc[9560] (dcc_x_token_int) send ARGV00000013
>>> distcc[9560] (dcc_x_token_string) send string 'init/.tmp_version.o'
> distcc[9560] (dcc_x_token_int) send ARGV0000000e
>>> distcc[9560] (dcc_x_token_string) send string 'init/version.c'
>>> distcc[9560] (dcc_x_token_int) send ARGV00000003
>>> distcc[9560] (dcc_x_token_string) send string '-MT'
>>> distcc[9560] (dcc_x_token_int) send ARGV00000013
>>> distcc[9560] (dcc_x_token_string) send string 'init/.tmp_version.o'
> distcc[9560] (dcc_x_token_int) send NFIL0000010e
>>> distcc[9560] (dcc_x_token_int) send NAME0000003b
>>> distcc[9560] (dcc_x_token_string) send string
>>> '/home/ecsezer/kernels/linux-2.6.26/include/linux/autoconf.h'
>>> distcc[9560] (dcc_x_file) send 27349 byte file
>>>
>>> /dev/shm/tmp3AYAwj.include_server-6245-1/home/ecsezer/kernels/linux-2.6.26/include/linux/autoconf.h.lzo
> with token FILE and compression 69
>>> distcc[9560] (dcc_x_token_int) send FILE00006ad5
>>> distcc[9560] (dcc_pump_sendfile) sendfile: partial transmission of
> 10147 bytes; retrying 17202 @10147
>>> distcc[9560] (dcc_select_for_write) select for write on fd5
>>> distcc[9560] (dcc_pump_sendfile) select() returned, continuing to write
> distcc[9560] (dcc_pump_sendfile) ERROR: sendfile failed: Connection
> reset
>>> by peer
>>> distcc[9560] (dcc_x_token_int) send NAME00000036
>>> distcc[9560] (dcc_writex) ERROR: failed to write: Broken pipe
>>> distcc[9560] (dcc_mark_timefile) mark
>>> /home/ecsezer/.distcc/lock/backoff_tcp_haemosu_3632_0
>>> distcc[9560] (dcc_unlock) release lock fd4
>>> distcc[9560] Warning: failed to distribute init/version.c to
>>> haemosu,cpp,
>>> running locally instead
>>> ...
>>>
>>>
>>>
>>> I'm running Ubuntu8.04 on a x86-64. I've tried both the release and
> the svn repository versions. I'd appreciate any help.
>>>
>>> Thanks,
>>>
>>> JohnS
>>>
>>>
>>> __
>>> distcc mailing list http://distcc.samba.org/
>>> To unsubscribe or change options:
>>> https://lists.samba.org/mailman/listinfo/distcc
>>>
>>
>>
>>
>> --
>> Fergus Henderson <fergus at google.com>
>>
>
>
>
> __
> distcc mailing list http://distcc.samba.org/
> To unsubscribe or change options:
> https://lists.samba.org/mailman/listinfo/distcc
>
More information about the distcc
mailing list