Set Up Your B3 as a distcc Client - sakaki-/gentoo-on-b3 GitHub Wiki
Let your B3 invoke remote cross-compilation on your PC, via distcc
, and massively speed up the build process!
Prerequisites
This guide assumes that you have already set up your PC as a distcc
server as detailed here. So, if you haven't yet, please do this first, before proceeding.
Configuring the B3 as a distcc Client
The live-USB image already has the necessary software (and wrappers) in place for you, so setting up your B3 as a distcc
client is easy.
In what follows, I'm going to assume your PC is at the fixed address 192.168.1.116; obviously, adapt the instructions as appropriate.
First, tell distcc
where the server is; edit the file /etc/distcc/hosts
(on the B3) and append the (uncommented) line:
192.168.1.116/10,cpp,lzo
Note - you can of course set up multiple servers here, but that's beyond the scope of this short guide; see the
distcc
homepage for further details. Note also that with a slow system like the B3, I would not recommend addinglocalhost
to the hosts list. The B3 will fall back to local compilation where necessary in any event.
Note - the
/10
is nothing to do with the IP address (confusingly); it is the maximum number of simultaneous jobs to send to that server (here, 10). The default is 4 if unspecified. Adjust to suit your particulardistcc
server's capabilities.
Next, edit the file /etc/portage/make.conf
(on the B3), and uncomment the following line, thus:
FEATURES="distcc distcc-pump"
That's it! You're now ready to roll.
Using distcc
Now you have everything set up, using distributed cross-compilation from your B3 is really easy. In fact, the (installed) scripts genup
and buildkernel-b3
will automatically make use of it - so the next time you update your system, or build a new kernel on the B3, you should notice a significant speed-up.
To use distcc
when performing a normal make
or emerge
, simply prefix the command with pump
. So for example:
b3 ~ # pump emerge --ask --verbose www-servers/nginx
That's it!
Monitoring distcc
You can check on distcc's operation at the client end with:
b3 ~ # watch DISTCC_DIR="/var/tmp/portage/.distcc/" distccmon-text
and at the server, most simply, by
gentoo_pc ~ # tail -f /var/log/messages
(or other log viewer, if you are not using syslog-ng
).
Troubleshooting
Distributed cross-compilation with distcc
/crossdev
is neat, but it is not a magic bullet. For example:
- some parts of the build process (such as autotools
./configure
) must still run locally on the B3 (and are considerably time-consuming); - some packages (like
sys-devel/gcc
) rely on running tools that were created during the build, as part of the build; this cannot be distributed withdistcc
; and - languages other than C and C++ are not supported by
distcc
.
In addition, you will occasionally encounter packages that do not build correctly under distcc
(although this is quite rare). You can simply build locally in such cases.
As to other issues, this is only a short guide, and you should read the notes on the distcc
site and Gentoo wiki if you experience problems. One important point that is worth mentioning here though - you must ensure that gcc
is the same version on your B3 and in your crossdev
environment on the PC; bad things are almost guaranteed to happen if not ><