distcc

Alle weiteren Dienste, die nicht in die drei oberen Foren gehören.
Antworten
darthdungeon
Beiträge: 11
Registriert: 15.08.2007 16:44:07

distcc

Beitrag von darthdungeon » 15.08.2007 16:56:32

hallo,

mein erster post *freu* bin ganz aufgeregt^^

ich habe auf nen gentoo rechner mit dual core cpu nen distccd laufen. wenn ich auf dem recher etwas compilieren möchte, zeigt mir distccmon-gui an, das das über den distccd läuft. ist zwar trotzdem der selbe rechner aber egal.

nun möchte ich, das auch meinen alten pentium 1 mit dem debian sarge auf dem gentoo distccd compiliert. das will er aber nicht. ich hab distcc per apt-get install installiert und die allow-option vom server auf 192.168.10.0/24 gesetzt, da alle rechner im 10 subnet liegen. nun habe ich auch

Code: Alles auswählen

export DISTCC_HOSTS="192.168.10.2"

gesetzt. wenn ich jetzt etwas mit

Code: Alles auswählen

make -j8 CC=distcc
compilieren will, macht er das, aber nur lokal, der server macht nichts.

bei nem

Code: Alles auswählen

 distcc cc -c foo.o
kommt immer

Code: Alles auswählen

distcc[2316] (dcc_build_somewhere) Warning: failed to distribute, running locally instead
.

in der distcc.log des client steht

Code: Alles auswählen

distccd[1739] (dcc_setup_daemon_path) daemon's PATH is /usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
distccd[1739] (dcc_socket_listen) Notice: socket address family 10 not supported
distccd[1739] (dcc_listen_by_addr) listening on :::3632
distccd[1739] (dcc_standalone_server) 1 CPU online on this server
distccd[1739] (dcc_standalone_server) allowing up to 3 active jobs
distccd[1741] (dcc_log_daemon_started) preforking daemon started (2.18.3 i386-pc-linux-gnu, built Mar 12 2005 02:23
:29)
und beim server taucht nichts in den logs auf.

kann mir jmd helen, was ich vergessen / verjehrt gemacht habe?

gms
Beiträge: 7798
Registriert: 26.11.2004 20:08:38
Lizenz eigener Beiträge: MIT Lizenz

Beitrag von gms » 15.08.2007 19:17:01

Willkommen im Forum!
darthdungeon hat geschrieben: kann mir jmd helen, was ich vergessen / verjehrt gemacht habe?
scheint alles richtig zu sein, statt der Environmentvariablen "DISTCC_HOSTS" würde ich die Hosts in die Konfigurationsdatei "~/.distcc/hosts" oder "/etc/distcc/hosts" eintragen

Ich verwende distcc auch sowohl unter Debian als auch unter Gentoo, zwar auf einem Debian Mischsystem aus Testing und Unstable, die distcc Version ist jedoch die gleiche wie unter Sarge und Gentoo ( überall 2.18.3 )

Bekommst du beim ersten Aufruf keine weiteren Fehlermeldungen, bei mir spukt der erste Aufruf im Fehlerfall mehr Fehlermeldungen aus:
Hier mit abgedrehtem distccd:

Code: Alles auswählen

root@gms4:~# distcc cc -c x.c
distcc[4410] (dcc_writex) ERROR: failed to write: Connection refused
distcc[4410] (dcc_writex) ERROR: failed to write: Broken pipe
distcc[4410] Warning: failed to distribute x.c to 192.168.3.1, running locally instead
root@gms4:~# distcc cc -c x.c
distcc[4416] (dcc_build_somewhere) Warning: failed to distribute, running locally instead
root@gms4
Hast du vielleicht eine Firewall installiert? Vielleicht einmal mit tcpdump überprüfen, ob die Verbindung aufgebaut wird ( Ist das schon eine Aufforderung zur Gesetzesübertretung ? )

Bei deinem Sarge wird sicherlich eine alte gcc Version eingesetzt, du mußt daher die gleiche Version auf deinem Gentoo Rechner emergen und verwendest danach am besten statt "cc" den vollen Namen "gcc-3.x". Nachdem die Versionen vom distcc nicht überprüft werden, hat das aber nichts mit deinem derzeitigen Problem zu tun.

Gruß
gms


edit:
daran sollte es auch nicht liegen:

Code: Alles auswählen

distccd[1739] (dcc_socket_listen) Notice: socket address family 10 not supported
"Socket Address Family 10" entpricht INET6 sein

darthdungeon
Beiträge: 11
Registriert: 15.08.2007 16:44:07

Beitrag von darthdungeon » 15.08.2007 20:17:08

zu den versionen, beide male 2.18.3

server : distcc --version

Code: Alles auswählen

distcc 2.18.3 i686-pc-linux-gnu (protocols 1 and 2) (default port 3632)
  built Aug 15 2007 14:10:43
Copyright (C) 2002, 2003, 2004 by Martin Pool.
Includes miniLZO (C) 1996-2002 by Markus Franz Xaver Johannes Oberhumer.

distcc comes with ABSOLUTELY NO WARRANTY.  distcc is free software, and
you may use, modify and redistribute it under the terms of the GNU
General Public License version 2 or later.
client: distcc --version

Code: Alles auswählen

distcc 2.18.3 i586-pc-linux-gnu (protocols 1 and 2) (default port 3632)
  built Jul 24 2007 13:41:10
Copyright (C) 2002, 2003, 2004 by Martin Pool.
Includes miniLZO (C) 1996-2002 by Markus Franz Xaver Johannes Oberhumer.

distcc comes with ABSOLUTELY NO WARRANTY.  distcc is free software, and
you may use, modify and redistribute it under the terms of the GNU
General Public License version 2 or later.
dran sollte es eig nicht liegen. beim gentoo bekomme ich die fehlermeldung, das er

Code: Alles auswählen

Warning: failed to distribute, running locally instead 
das nicht verteil kann, weil er ja der einzige server ist. deshalb macht er lokal, aber auch per distccd server, nur halt alles auf dem selben recher.

und eine firewall habe ich nicht, jedenfalls nicht dafür!

edit: jetzt kommt plötzlich ne fehlermeldung auf dem debian clienten:

Code: Alles auswählen

host #~ distcc cc -c /home/fritz/noip-2.1.4/noip2.c
distcc[2630] (dcc_build_somewhere) Warning: failed to distribute, running locally instead

gms
Beiträge: 7798
Registriert: 26.11.2004 20:08:38
Lizenz eigener Beiträge: MIT Lizenz

Beitrag von gms » 15.08.2007 20:29:36

darthdungeon hat geschrieben:edit: jetzt kommt plötzlich ne fehlermeldung auf dem debian clienten:

Code: Alles auswählen

host #~ distcc cc -c /home/fritz/noip-2.1.4/noip2.c
distcc[2630] (dcc_build_somewhere) Warning: failed to distribute, running locally instead
setze einmal die DISTCC_LOG Variable auf eine Logdatei und DISTCC_VERBOSE auf 1 und poste dann die Ausgabe von dem Logfile

darthdungeon
Beiträge: 11
Registriert: 15.08.2007 16:44:07

Beitrag von darthdungeon » 15.08.2007 21:07:50

Code: Alles auswählen

distcc[2787] (dcc_trace_version) distcc 2.18.3 i586-pc-linux-gnu; built Jul 24 2007 13:41:10
distcc[2787] (dcc_recursion_safeguard) safeguard level=0
distcc[2787] (main) compiler name is "distcc"
distcc[2787] (dcc_scan_args) scanning arguments: cc -c /home/sebastian/noip-2.1.4/noip2.c
distcc[2787] (dcc_scan_args) found input file "/home/sebastian/noip-2.1.4/noip2.c"
distcc[2787] (dcc_scan_args) no visible output file, going to add "-o noip2.o" at end
distcc[2787] compile from noip2.c to noip2.o
distcc[2787] (dcc_get_hostlist) read hosts from environment
distcc[2787] (dcc_parse_hosts) found tcp token "192.168.10.2"
distcc[2787] (dcc_lock_host) got cpu lock on 192.168.10.2 slot 0 as fd4
distcc[2787] (dcc_strip_dasho) result: cc -c /home/sebastian/noip-2.1.4/noip2.c
distcc[2787] (dcc_spawn_child) forking to execute: cc -E /home/sebastian/noip-2.1.4/noip2.c
distcc[2787] (dcc_spawn_child) child started as pid2788
distcc[2787] (dcc_strip_local_args) result: cc -c /home/sebastian/noip-2.1.4/noip2.c -o noip2.o
distcc[2787] exec on 192.168.10.2: cc -c /home/sebastian/noip-2.1.4/noip2.c -o noip2.o
distcc[2787] (dcc_note_state) note state 2, file "noip2.c", host "192.168.10.2"
distcc[2787] (dcc_connect_by_addr) started connecting to 192.168.10.2:3632
distcc[2787] (dcc_select_for_write) select for write on fd5
distcc[2788] (dcc_increment_safeguard) setting safeguard: _DISTCC_SAFEGUARD=1
distcc[2787] (dcc_note_state) note state 4, file "(NULL)", host "(NULL)"
distcc[2787] (dcc_x_token_int) send DIST00000001
distcc[2787] (dcc_x_token_int) send ARGC00000005
distcc[2787] (dcc_x_token_int) send ARGV00000002
distcc[2787] (dcc_x_token_int) send ARGV00000002
distcc[2787] (dcc_x_token_int) send ARGV00000022
distcc[2787] (dcc_x_token_int) send ARGV00000002
distcc[2787] (dcc_x_token_int) send ARGV00000007
distcc[2787] (dcc_note_state) note state 3, file "(NULL)", host "(NULL)"
distcc[2787] (dcc_collect_child) cpp child 2788 terminated with status 0
distcc[2787] (dcc_collect_child) cpp times: user 0.520000s, system 0.050000s, 289 minflt, 508 majflt
distcc[2787] cpp /home/sebastian/noip-2.1.4/noip2.c on localhost completed ok
distcc[2787] (dcc_x_file) send 172276 byte file /tmp/distcc_9cd24eb7.i with token DOTI
distcc[2787] (dcc_x_token_int) send DOTI0002a0f4
distcc[2787] (dcc_writex) ERROR: failed to write: Connection reset by peer
distcc[2787] (dcc_mark_timefile) mark /root/.distcc/lock/backoff_tcp_192.168.10.2_3632_0
distcc[2787] Warning: failed to distribute /home/sebastian/noip-2.1.4/noip2.c to 192.168.10.2, running locally instead
distcc[2787] (dcc_lock_host) got cpu lock on localhost slot 0 as fd6
distcc[2787] exec on localhost: cc -c /home/sebastian/noip-2.1.4/noip2.c -o noip2.o
distcc[2787] (dcc_note_state) note state 5, file "noip2.c", host "localhost"
distcc[2787] (dcc_spawn_child) forking to execute: cc -c /home/sebastian/noip-2.1.4/noip2.c -o noip2.o
distcc[2787] (dcc_spawn_child) child started as pid2790
distcc[2790] (dcc_increment_safeguard) setting safeguard: _DISTCC_SAFEGUARD=1
distcc[2787] (dcc_collect_child) cc child 2790 terminated with status 0
distcc[2787] (dcc_collect_child) cc times: user 4.890000s, system 0.210000s, 1588 minflt, 1060 majflt
distcc[2787] compile /home/sebastian/noip-2.1.4/noip2.c on localhost completed ok
distcc[2787] elapsed compilation time 5.677564s
distcc[2787] (dcc_exit) exit: code 0; self: 0.000000 user 0.010000 sys; children: 5.410000 user 0.260000 sys
distcc[2787] (dcc_cleanup_tempfiles) deleted 1 temporary files
frage: mekrt sich mein debian die exportierten eigenschaften oder werden die nach dem neustart gelöscht und ich muss sie irgendwo eintragen, damit sie erhalten bleiben? wenn ja, wo? ich könnt es aj in die .bashrc schrieben, aber gibt es auch einen weg, der für alle user gilt?

gms
Beiträge: 7798
Registriert: 26.11.2004 20:08:38
Lizenz eigener Beiträge: MIT Lizenz

Beitrag von gms » 15.08.2007 22:01:40

Code: Alles auswählen

distcc[2787] (dcc_writex) ERROR: failed to write: Connection reset by peer
würde ich als Problem auf dem Server interpretieren, ist die "allow" Option wirklich korrekt gesetzt ?
darthdungeon hat geschrieben: beim gentoo bekomme ich die fehlermeldung, das er

Code: Alles auswählen

Warning: failed to distribute, running locally instead 
das nicht verteil kann, weil er ja der einzige server ist. deshalb macht er lokal, aber auch per distccd server, nur halt alles auf dem selben recher.
nein, der distccd daemon wird hier auch nicht verwendet, der Compiler wird hier vom distcc Client aufgerufen
darthdungeon hat geschrieben: frage: mekrt sich mein debian die exportierten eigenschaften
diese Variablen werden nur für die aktuelle Shell und deren Unterprozesse gesetzt, ( ohne export würde die Variable nur für die aktuelle Shell gesetzt und nicht an Unterprozesse vererbt ). D.h nach dem Neustart sind diese Einstellungen futsch ( Das ist nicht Debian spezifisch, gilt für alle unixartige Betriebssysteme )
darthdungeon hat geschrieben: oder werden die nach dem neustart gelöscht und ich muss sie irgendwo eintragen, damit sie erhalten bleiben? wenn ja, wo? ich könnt es aj in die .bashrc schrieben, aber gibt es auch einen weg, der für alle user gilt?
Du kannst diese Variablen auch in /etc/profile, /etc/bash.bashrc oder /etc/environment setzen

Gruß
gms

darthdungeon
Beiträge: 11
Registriert: 15.08.2007 16:44:07

Beitrag von darthdungeon » 15.08.2007 22:34:52

danke, es läuft!!!! :D

weil du sagtest, es ist wahrscheinlich ein server-problem, habe ich mi die config dort ansehen wollen. und was stellt sich rauß? der rechner, auf dem ich distccd laufen habe, ist nen anderer, als ich per export auf dem debian festgelegt!
ich könnte mich schon wieder... argh
andere ip geexportet und es läuft

nächste frage: wenn ich jetzt

Code: Alles auswählen

make -j8 CC=distcc
ausführe,

Code: Alles auswählen

distcc[3027] (dcc_trace_version) distcc 2.18.3 i586-pc-linux-gnu; built Jul 24 2007 13:41:10
distcc[3027] (dcc_recursion_safeguard) safeguard level=0
distcc[3027] (main) compiler name is "distcc"
distcc[3027] (dcc_scan_args) scanning arguments: cc -Wall -g -O2 -Dlinux "-DPREFIX="/usr/local"" noip2.c -o noip2
distcc[3027] (dcc_scan_args) found input file "noip2.c"
distcc[3027] (dcc_scan_args) found object/output file "noip2"
distcc[3027] (dcc_scan_args) compiler apparently called not for compile
distcc[3027] (dcc_lock_host) got cpu lock on localhost slot 0 as fd4
distcc[3027] exec on localhost: cc -Wall -g -O2 -Dlinux "-DPREFIX="/usr/local"" noip2.c -o noip2
distcc[3027] (dcc_note_state) note state 5, file "noip2.c", host "localhost"
distcc[3027] (dcc_spawn_child) forking to execute: cc -Wall -g -O2 -Dlinux "-DPREFIX="/usr/local"" noip2.c -o noip2
distcc[3027] (dcc_spawn_child) child started as pid3028
distcc[3028] (dcc_increment_safeguard) setting safeguard: _DISTCC_SAFEGUARD=1
distcc[3027] (dcc_client_signalled) Interrupt
distcc[3027] (dcc_cleanup_tempfiles) deleted 0 temporary files
warum nimmt der auch hier nicht den server?

edit: das distcc funktioniert ja den logs zufolge und es ist auch merklich schneller, aber wenn ich distccmon-text auf dem server laufen lasse, erscheind da kein vermerkt über irgendeine compilierung.

gms
Beiträge: 7798
Registriert: 26.11.2004 20:08:38
Lizenz eigener Beiträge: MIT Lizenz

Beitrag von gms » 16.08.2007 07:29:52

darthdungeon hat geschrieben:

Code: Alles auswählen

distcc[3027] (dcc_scan_args) compiler apparently called not for compile 
...
distcc[3027] exec on localhost: cc -Wall -g -O2 -Dlinux "-DPREFIX="/usr/local"" noip2.c -o noip2
warum nimmt der auch hier nicht den server?
Bei diesem Kommando wird aus dem Sourcefile "noip2.c" ein Binary ( Exe) "noip2" erzeugt. Es wird also nicht nur kompiliert, sondern auch gleich der Linker angeworfen. Daher kann dieses Kommando nicht über den distccd ausgeführt werden.

Gruß
gms

darthdungeon
Beiträge: 11
Registriert: 15.08.2007 16:44:07

Beitrag von darthdungeon » 16.08.2007 10:43:02

das find ich aber blöd, weil normalerweise wird doch ein paket mit ./configure && make && make install ausgeführt und das will ich ja (bis auf configure natürlich) auf den server verlagern. auf der homepage von distcc steht ja auch "make -j8 CC=distcc" und ich dachte, damit compiliert der das dann auf dem server?! wenn das nicht geht, bringt mir das hja eigentlich nichts, oder?

gms
Beiträge: 7798
Registriert: 26.11.2004 20:08:38
Lizenz eigener Beiträge: MIT Lizenz

Beitrag von gms » 16.08.2007 11:27:18

Diese Fälle kommen doch relativ selten vor, daß ein Modul ( Programm oder (Shared)Library ) nur aus EINEM Objectfile (kompiliert aus EINEM Sourcefile) besteht. Wenn doch, wird es oft auch performanter sein, dieses Modul lokal zu erstellen und den meisten Anwendern geht es ja hauptsächlich um die Performance.
Geht es dir jetzt darum, daß ein spezielles Paket KOMPLETT auf dem Server kompiliert wird ?

darthdungeon
Beiträge: 11
Registriert: 15.08.2007 16:44:07

Beitrag von darthdungeon » 16.08.2007 11:35:14

ich wollte eigentlich, das alles auf dem server kompiliert wird, u.a ein neuer kernel der auf nem pentium I nen eweigkeit bräuchte, und da muss ich ja make machen...

gms
Beiträge: 7798
Registriert: 26.11.2004 20:08:38
Lizenz eigener Beiträge: MIT Lizenz

Beitrag von gms » 16.08.2007 11:57:06

Falls es überhaupt möglich ist, den Kernel über distcc zu bauen, ist es sicherlicht trotzdem schneller den Kernel komplett auf dem Gentoo-System zu erstellen. Nachdem der Kernel keine Abhängigkeit zu Userspace Libraries hat, ist es auch nicht nötig, den Linkvorgang auf dem Debiansystem durchzuführen, wie bei "normalen" distcc-Anwendungsfällen.
Ich habe es zwar noch nie ausprobiert, aber es sollte sogar möglichsein auf dem Gentoo-System ein deb-Paket des Kernels zu erstellen.

darthdungeon
Beiträge: 11
Registriert: 15.08.2007 16:44:07

Beitrag von darthdungeon » 16.08.2007 12:04:26

also geht das nicht, das ich make-anweißungen von den debian-client an den gentoo-server schicke, um sie dort zu compielieren?
INSTALLING DISTCC
There are three different ways to call distcc, to suit different circumstances:

distcc can be installed under the name of the real compiler, to intercept calls to it and run them remotely. This "masqueraded" compiler has the widest compatibility with existing source trees, and is convenient when you want to use distcc for all compilation. The fact that distcc is being used is transparent to the makefiles.
das steht in der doku auf distcc.samba.org. ist das nicht das was ich haben will?

edit: ich habe mal die anweisungen ausgeführt, um masqueraded distcc compiler benutzen zu können. nach den logs zu folge nuntzt er auch tatsächlich den server dafür 8) also geht es doch

gms
Beiträge: 7798
Registriert: 26.11.2004 20:08:38
Lizenz eigener Beiträge: MIT Lizenz

Beitrag von gms » 16.08.2007 13:07:49

irgendwie haben wir anscheinend ein Kommunikationsproblem:

###################################################
darthdungeon hat geschrieben: also geht das nicht, das ich make-anweißungen von den debian-client an den gentoo-server schicke, um sie dort zu compielieren?
wer hat denn behauptet, daß das nicht geht ?

###################################################
gms hat geschrieben: Geht es dir jetzt darum, daß ein spezielles Paket KOMPLETT auf dem Server kompiliert wird ?
darthdungeon hat geschrieben: ich wollte eigentlich, das alles auf dem server kompiliert wird,
das wird dir von distcc nicht garantiert!!!
distcc manual page hat geschrieben: The compiler can be invoked with a command line gcc hello.c to both compile and link. distcc doesn't split this into separate parts, but rather runs the whole thing locally.
Daher wurde "noip2" auch nicht über den distccd Daemon erstellt:
gms hat geschrieben: Bei diesem Kommando wird aus dem Sourcefile "noip2.c" ein Binary ( Exe) "noip2" erzeugt. Es wird also nicht nur kompiliert, sondern auch gleich der Linker angeworfen. Daher kann dieses Kommando nicht über den distccd ausgeführt werden.

darthdungeon
Beiträge: 11
Registriert: 15.08.2007 16:44:07

Beitrag von darthdungeon » 16.08.2007 13:32:09

ich meinte, mit alles, das generelle compilierungen mit hlfe des servers geschehen, nicht das unbediengt jede anweisung eines paketes auf dem server geschieht. natürlich je mehr desto besser.
ich glaub ich habs jetzt verstanden und esläuft auch so weit. danke noch mals.

nur wenn ich auf dem server distccmon-text ausführe, zeigt er nicht an, das gerade etwas auf ihm compiliert wird, obwohl der client daten an ihn schickt, die nach den logs zu urteilen auch da compiliert werden.

Antworten