[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