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
distcchomepage for further details. Note also that with a slow system like the B3, I would not recommend addinglocalhostto the hosts list. The B3 will fall back to local compilation where necessary in any event.
Note - the
/10is 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 particulardistccserver'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 ><