First of all, thanks to everybody who answered my questions, and
helped me get it working.  Now for the setup.  This is a home LAN, so I
don't bother with ssh tunneling, etc, which will be necessary if you're
going over untrusted links, e.g. the public internet.

* The host, IP address 192.168.123.251, is an over 7 year old Dell
  Dimension 530 with a Core Duo, running 64-bit Gentoo.  It will
  compile for the client.

* The client, IP address 192.168.123.253, is an ancient Acer netbook,
  with an Atom CPU so old that it only runs 32-bit mode.

  *** On the host ***
=====================================================================

* emerge crossdev

* build a toolchain that can compile for the client's architecture...

crossdev -S -t <client's CHOST>

  You need to know what the CHOST variable is in the client's make.conf.
e.g. on my netbook CHOST="i686-pc-linux-gnu" so the command would be

crossdev -S -t i686-pc-linux-gnu

  The "-S" tells crossdev to build the latest stable gcc and utilities
version.  The default (without the "-S") is to build the absolute latest
version available, as if gcc and utilities were keyworded.  Note that
the gcc versions must be essentially the same on the client and the
server crossdev toolchain.  E.g. for gcc-a.b.c, the 3rd part (the
revison # "c") can differ.  But if either the major or minor version
portions differ, you are guaranteed to have problems.

* emerge distcc

* edit the DISTCCD_OPTS variable to indicate allowed clients.  On my
  host machine, it's...

DISTCCD_OPTS="--port 3632 --log-level notice --log-file /var/log/distccd.log -N 
15 --allow 192.168.123.253"

  Notes;
- The default port is 3632
- "N" is the "nice" level.
- you can allow multiple addresses, e.g.
   "--allow 192.168.123.253 --allow 169.254.0.1" etc.

* start up the distccd daemon with the command
  /etc/init.d/distccd start

* optionally set it to come up whenever the machine boots up
  rc-update add distccd default

  *** On the client ***
=====================================================================

specify host(s) in /etc/distcc/hosts e.g. in my case

192.168.123.251/6,lzo,cpp

  Notes;
- you can have multiple entries, using a space as the separator.  The
  leftmost entry will be the preferred host, and any additional entries
  will have descending priority.
- the "/6" is not a CIDR number.  It specifies how many simultaneous
  jobs to send to that server.  The optimal number will vary depending
  on how powerful the server is, and whether it's also being used as a
  desktop, etc.
- The "lzo" entry specifies lzo compression.  It is necessary for "pump"
  mode.  You will want pump mode.
- The "cpp" entry is also necessary for "pump" mode.  You will want pump
  mode.

  If you have "distcc distcc-pump" in FEATURES in make.conf, the
"emerge" command will transparently invoke pump mode.  Without them,
builds will be done locally.  Does that mean you have to edit your
make.conf file each time you switch between local and distcc builds?
NO.  Remember how you can temporarily modify the USE variable for an
emerge like so...

USE="foo" emerge bar

...the exact same method works for the FEATURES variable.

* do *NOT* put "distcc distcc-pump" directly into FEATURES in make.conf

* make an executable script /root/bin/xmerge with 2 lines...

#!/bin/bash
FEATURES="distcc distcc-pump" emerge ${*}

  Now compare the outputs of...
emerge --info | grep ^FEATURES
xmerge --info | grep ^FEATURES

aa1 portage # emerge --info | grep ^FEATURES
FEATURES="assume-digests binpkg-logs distlocks ebuild-locks fixlafiles 
merge-sync news parallel-fetch protect-owned sandbox sfperms strict 
unknown-features-warn unmerge-logs unmerge-orphans userfetch userpriv 
usersandbox usersync"


aa1 portage # xmerge --info | grep ^FEATURES
FEATURES="assume-digests binpkg-logs distcc distcc-pump distlocks ebuild-locks 
fixlafiles merge-sync news parallel-fetch protect-owned sandbox sfperms strict 
unknown-features-warn unmerge-logs unmerge-orphans userfetch userpriv 
usersandbox usersync"

  Your FEATURES options will probably differ from mine.  The important
point is that when launched from the xmerge script, emerge sees the
options "distcc distcc-pump" in FEATURES, and transparently uses distcc.
When launched directly from the command line, emerge won't see this, and
will therefore build locally.  In the above example, only the parameter
"--info" was passed to xmerge.  But you can pass any legal energe
parameters to xmerge, e.g.

xmerge --changed-use --deep --update @world

-- 
Walter Dnes <waltd...@waltdnes.org>
I don't run "desktop environments"; I run useful applications

Reply via email to