# distcc mit Fehler "still in backoff period"

## LinuxTom

Hallo Leute,

ich bin am Ende meiner Weisheiten (und der von Google). Irgend wie weiß ich nicht, wo der Fehler liegt. Immer wenn ich beispielsweise "emerge k3b" mache funktioniert es nicht. Es kommt die Fehlermeldung:

```
distcc[7101] (dcc_parse_hosts_file) load hosts from /etc/distcc/hosts                                                                                  

distcc[7101] (dcc_parse_hosts) found tcp token "192.168.1.5"                                                                                           

distcc[7101] (dcc_parse_hosts) found tcp token "192.168.1.27"                                                                                          

distcc[7101] (dcc_check_backoff) still in backoff period for 192.168.1.5                                                                               

distcc[7101] (dcc_remove_disliked) remove 192.168.1.5 from list                                                                                        

distcc[7101] (dcc_check_backoff) still in backoff period for 192.168.1.27                                                                              

distcc[7101] (dcc_remove_disliked) remove 192.168.1.27 from list                                                                                       

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

distcc[7101] (dcc_lock_host) /var/tmp/portage/.distcc/lock/cpu_localhost_0 is busy                                                                     

distcc[7101] (dcc_lock_host) /var/tmp/portage/.distcc/lock/cpu_localhost_1 is busy                                                                     

distcc[7101] (dcc_lock_host) /var/tmp/portage/.distcc/lock/cpu_localhost_2 is busy                                                                     

distcc[7101] (dcc_lock_host) got cpu lock on localhost slot 3 as fd3                                                                                   

distcc[7101] exec on localhost: x86_64-pc-linux-gnu-g++ -DMAKE_K3BDEVICE_LIB -D_BSD_SOURCE -D_XOPEN_SOURCE=500 -D_BSD_SOURCE -DQT_NO_STL -DQT_NO_CAST_T
```

Mache ich "emerge nano", funktioniert es:

```
distcc[5682] (dcc_parse_hosts_file) load hosts from /etc/distcc/hosts                                                                                  

distcc[5682] (dcc_parse_hosts) found tcp token "192.168.1.5"                                                                                           

distcc[5682] (dcc_parse_hosts) found tcp token "192.168.1.27"                                                                                          

distcc[5682] (dcc_check_backoff) still in backoff period for 192.168.1.27                                                                              

distcc[5682] (dcc_remove_disliked) remove 192.168.1.27 from list                                                                                       

distcc[5682] (dcc_lock_host) /var/tmp/portage/.distcc/lock/cpu_tcp_192.168.1.5_3632_0 is busy                                                          

distcc[5682] (dcc_lock_host) got cpu lock on 192.168.1.5 slot 1 as fd3                                                                                 

distcc[5682] (dcc_lock_host) got cpu lock on localhost slot 0 as fd4                                                                                   

distcc[5682] (dcc_note_state) note state 3, file "(NULL)", host "localhost"                                                                            

distcc[5682] (dcc_strip_dasho) result: x86_64-pc-linux-gnu-gcc -DHAVE_CONFIG_H -I. -I. -I.. "-DLOCALEDIR="/usr/share/locale"" "-DSYSCONFDIR="/etc"" -I/usr/include/ncursesw -march=nocona -O2 -pipe -MT nano.o -MD -MP -MF .deps/nano.Tpo -c nano.c                                                           

distcc[5682] (dcc_spawn_child) forking to execute: x86_64-pc-linux-gnu-gcc -DHAVE_CONFIG_H -I. -I. -I.. "-DLOCALEDIR="/usr/share/locale"" "-DSYSCONFDIR="/etc"" -I/usr/include/ncursesw -march=nocona -O2 -pipe -MT nano.o -MD -MP -MF .deps/nano.Tpo -E nano.
```

So, und nun noch ein paar Konfigurationen:

```
[ebuild   R   ] sys-devel/distcc-3.1-r4  USE="gnome gtk ipv6 -avahi -hardened (-selinux) -xinetd" 0 kB
```

```
tcp        0      0 192.168.1.27:3632       0.0.0.0:*               LISTEN     11540/distccd
```

```
192.168.1.5 192.168.1.27
```

```
...

DISTCCD_OPTS="${DISTCCD_OPTS} --allow 192.168.1.5"

DISTCCD_OPTS="${DISTCCD_OPTS} --listen 192.168.1.27"

...
```

```
/usr/lib/distcc/bin:/usr/local/sbin:/usr/loca ....
```

----------

## Hollowman

 *Quote:*   

> Wenn Sie verschiendene Pakete emergen werden Sie bemerken, dass nicht alle verteilt kompiliert (und vor allem noch nicht einmal parallel gebaut) werden. Dies kann dadurch verursacht werden, dass das Makefile eines Pakets parallele Arbeiten nicht unterstützt oder der Maintainer eines Ebuilds parallele Arbeiten wegen einem bekannten Problem explizit deaktiviert hat. 

 

Liegt das vielleicht daran?

Sebastian

----------

## LinuxTom

Nein. Die Verbindung innerhalb des distcc funktioniert nicht. Irgend wie scheint die Umgebung da irgend etwas zu "verstellen". Wenn -j=1 wäre, dann wird nur ein Prozess gestartet, aber nicht der Host als "schlecht" gemarkert. Denke ich zumindest.

----------

## Randy Andy

Hmmh,

sitze zwar gerade nicht an meiner Maschiene, aber ich hatte vor einiger Zeit ähnliche Probleme, mit zunehmender Tendenz.

Mit jedem weiteren world Update wurden immer weniger Pakete verteilt gebaut, und die Fehlermeldungen von Distcc häuften sich.

Letztlich lag's wohl am auseinanderdriften der Toolchain meines Systems (~x86_64 immer aktuell), und des darin installierten Crosscompilers der nämlich nicht mit aktualisiert wird!

Vermutlich da er aus dem lokalen Overlay stammt, und dessen Toolchain auf Basis des zum Installationszeitpunkt aktuellen systems gebaut wird.

Ich habe also meine alte Crossdev erst mal gelöscht.

Dann wieder die aktuelle Cross-dev-Toolchain bauen lassen mit crossdev -t [deine Zielarch]

Info's vermutlich wie bekannt auch hier:[url] http://www.gentoo.org/doc/en/cross-compiling-distcc.xml[/url]

Die symlinks hab ich aber nicht mehr händisch erstellt, wenn ich mich recht erinnere hab ich eine wrapper paket (Name=?) aus dem Portage tree stattdessen installiert.

Du solltest auch mal deine distccd / distcc/hosts Konfiguration überprüfen. Wenn du die aktuelle Version >3.? Verwendest, kann man den pump mode benutzen, aber man muss noch in besagten conf.s cpp hinzufügen.

Jedenfalls läuft's bei mir seitdem wie Schmitz Katze, und Crosscompiling mit distcc macht wieder richtig Spaß!

Viel Erfolg,

Andy.

----------

## musv

Ich geh mal davon aus, dass du die gleiche Architektur bei allen beteiligten Rechnern hast. Ansonsten brauchst du noch einen Cross-Compiler:

http://www.gentoo.org/doc/en/cross-compiling-distcc.xml

http://www.gentoo.org/proj/en/base/embedded/handbook/?part=1&chap=4

Meine Konfigurationen sind so:

Server:

```

DISTCCD_OPTS="${DISTCCD_OPTS} --allow 192.168.0.0/24

```

Client:

```

localhost/2 192.168.0.1/3

```

Die make.conf sollte klar sein - genauso, dass auf dem Server der distccd gestartet sein sollte.

----------

## LinuxTom

Mein Problem ist Randy Andy's sehr ähnlich. Ich werde mal den pump-Mode ausprobieren.

----------

## Randy Andy

LinuxTom,

dann hier noch zu Vergleich meine settings:

client

/etc/distcc/hosts

```
big-server,cpp,lzo localhost --localslots=2 --localslots_cpp=4
```

server

netstat -anp --ip | grep distcc

```
tcp        0      0 0.0.0.0:3632            0.0.0.0:*               LISTEN      5461/distccd
```

/etc/conf.d/distccd

```
ISTCCD_OPTS=""

DISTCCD_EXEC="/usr/bin/distccd"

DISTCCD_PIDFILE="/var/run/distccd/distccd.pid"

DISTCCD_OPTS="${DISTCCD_OPTS} --port 3632"

DISTCCD_OPTS="${DISTCCD_OPTS} --log-level critical"

DISTCCD_OPTS="${DISTCCD_OPTS} --allow 192.168.69.0/24"

#DISTCCD_OPTS="${DISTCCD_OPTS} --listen 192.168.69.4"

DISTCCD_OPTS="${DISTCCD_OPTS} -N 15"

DISTCCD_OPTS="${DISTCCD_OPTS} --zeroconf"

```

Den pump mode startest du einfach durch voranstellen von pump vor jeden emerge Befehl.

Viel Erfolg, Andy.

----------

## LinuxTom

Jetzt funktioniert es. Lag evtl. am --listen-Argument in der conf-Datei. Habe ich jetzt auch weggelassen.

Aber: OHNE Pump-Mode. Mit pump kommen immer Fehler, da die Pakete nicht gebaut werden. Er findet dann irgend etwas nicht. Wohl lokal noch nicht da.

```
libtool --quiet --tag=CC --mode=link i686-pc-linux-gnu-gcc -export-dynamic -Wl,-O1 -o lua lua.lo liblua.la -lreadline                                       

libtool --quiet --tag=CC --mode=link i686-pc-linux-gnu-gcc -static -export-dynamic -Wl,-O1 -o lua_test lua.lo liblua.la -lreadline                          

libtool --quiet --tag=CC --mode=link i686-pc-linux-gnu-gcc -static -Wl,-O1 -o luac luac.lo print.lo liblua.la                                               

./.libs/liblua.a(ldo.o): In function `luaD_throw':                                                                                                          

ldo.c:(.text+0x99f): undefined reference to `__longjmp_chk'                                                                                                 

collect2: ld returned 1 exit status                                                                                                                         

distcc[31704] ERROR: compile (null) on localhost failed                                                                                                     

make: *** [luac] Fehler 1
```

Vielleicht hat der PUMP-Mode mit den unterschiedlichen Architekturen ein Problem. Lokal: CHOST="i686-pc-linux-gnu". Beide Server: CHOST="x86_64-pc-linux-gnu". Alle gleiche GCC's und auf den Servern entsprechende "crossdev -t i686" installiert.

----------

## Randy Andy

Hi LinuxTom,

immerhin schon mal ein Teilerfolg...

An der Konstellation deiner Rechnerarchitekturen kann es aber nicht liegen, da ich zufällig genau die gleiche Kombination verwende.

Ich erinnere mich aber noch dunkel dass der Pump Mode zwingend mindestens das cpp und ev. auch das lzo in der hosts Datei der clients benötigt.

Versuch's doch mal in deinem Fall mit:

/etc/distcc/hosts:

```
192.168.1.5,cpp,lzo 192.168.1.27,cpp,lzo
```

Zur Sicherheit eventuell erst mal mit nur einem laufenden Server beginnen, das entspräche dann genau meiner Konstellation.

Gruß, Andy.

----------

## LinuxTom

Laut diesem Artikel ist eine kleine Anpassung für den pump-Mode notwendig. Vielleicht funktioniert er deshalb nicht. Scheint sich auch mit meiner Fehlermeldung zu decken. Also kein pump bei mir.  :Sad: 

----------

## Randy Andy

Ja, den Artikel kenn ich, seit dem ich seinerzeit bei Einführung des pump mode, recherchieren wollte wie man ihn aktiviert. Damals stand's noch nicht in der man-page dass emerge einfach nur mit pump aufgerufen werden muss.

Jedenfalls bedarf es distcc ab Version 3.x aufwärts, sowie der richtigen Konfiguration, und dann läut's wie Jeck!

Guckst Du. (distccmon-text)

```

7377  Preprocess  qguiplatformplugin.cpp                       big-server[2]

  7373  Compile     qdesktopwidget.cpp                           big-server[3]

  7331  Compile     qstackedlayout.cpp                            localhost[0]

  7253  Compile     qboxlayout.cpp                                localhost[1]

  7531  Blocked                                                            [2]

  7524  Compile     qbmphandler.cpp                              big-server[2]

  7529  Preprocess  qppmhandler.cpp                              big-server[3]

  7519  Compile     qpixmap_x11.cpp                               localhost[0]

  7478  Compile     qpixmap.cpp                                   localhost[1]

  7667  Preprocess  qtessellator.cpp                             big-server[2]

  7655  Compile     qregion.cpp                                  big-server[2]

  7670  Preprocess  qtextureglyphcache.cpp                       big-server[3]

  7638  Compile     qprintengine_pdf.cpp                          localhost[0]

  7609  Compile     qpaintengineex.cpp                            localhost[1]

  7780  Preprocess  qtextformat.cpp                              big-server[2]

  7775  Compile     qtextlayout.cpp                              big-server[2]

  7782  Preprocess  qtextobject.cpp                              big-server[3]

  7728  Compile     qpaintengine_x11.cpp                          localhost[0]

  7682  Compile     qpaintbuffer.cpp                              localhost[1]

  7915  Preprocess  qplastiquestyle.cpp                          big-server[2]

  7897  Compile     qcommonstyle.cpp                             big-server[3]

  7919  Preprocess  qgtkstyle.cpp                                big-server[3]

  7868  Compile     qfontengine_x11.cpp                           localhost[0]

  7923  Compile     qgtkpainter.cpp                               localhost[1]

  8028  Compile     qprogressbar.cpp                             big-server[2]

  8034  Compile     qradiobutton.cpp                             big-server[3]

  8038  Compile     qrubberband.cpp                               localhost[0]

  7993  Compile     qlcdnumber.cpp                                localhost[1]

```

Solltest du also im stable Zweig arbeiten, dann ggf. distcc demaskieren, um an die Version > 3 zu gelangen.

Ansonsten wüsste ich nicht warum es bei dir nicht laufen soll.

Gruß, Andy.

----------

