Avahi/Zeroconf patch for distcc updated
I finally found them time to sit down and update my venerable Avahi (http://avahi.org)/Zeroconf ( http://en.wikipedia.org/wiki/Zeroconf) patch for distcc (http://0pointer.de/public/distcc-avahi.patch). A patched distcc (http://distcc.samba.org/) automatically discovers suitable compiler servers on the local network, without the need to manually configure them. (Announcement (http://lists.samba.org/archive/distcc/2007q4/003593.html)).
Here’s a quick HOWTO for using a patched distcc like this:
• Make sure to start distccd (the server) with the new –zeroconf switch, This will make it announce its services on the network.
• Edit your $HOME/.distcc/hosts and add +zeroconf. This magic string will enable Zeroconf support in the client, i.e. will be expanded to the list of available suitable distcc servers on your LAN.
• Now set $CC to distcc gcc globally for your login sessions. This will tell all well-behaving build systems to use distcc for compilation (this doesn’t work for the kernel, as one notable exception). Even better than setting $CC to distcc gcc is setting it to ccache distcc gcc which will enable ccache (http://ccache.samba.org/) in addition to distcc. i.e. stick something like this in your ~/.bash_profile: export CC=“ccache distcc gcc”
• And finally use make -j distcc -j instead of plain make
to enable parallel building with the right number of concurrent processes.
Setting $MAKEFLAGS properly is an alternative option, however is suboptimal if
the evalutation is only done once at login time.
If this doesn’t work for you than it is a good idea to run distcc –show-hosts to get a list of discovered distcc servers. If this list isn’t complete then this is most likely due to mismatching GCC versions or architectures. To check if that’s the case use avahi-browse -r _distcc._tcp and compare the values of the cc_machine and cc_version fields. Please note that different Linux distributions use different GCC machine strings. Which is expected since GCC is usually patched quite a bit on the different distributions. This means that a Fedora distcc (the client) will not find a Debian distccd (the server) and vice versa. But again: that’s a feature, not a bug.
The new -j and –show-hosts options for distcc are useful for non-zeroconf setups, too.
The patch will automatically discover the number of CPUs on remote machines and make use of that information to better distribute jobs.
In short: Zeroconf support in distcc is totally hot, everyone should have it!
For more information have a look on the announcement of my original patch from 2004 (http://lists.samba.org/archive/distcc/2004q4/002774.html) (at that time for the historic HOWL Zeroconf daemon), or read the new announcement linked above.
Distribution packagers! Please merge this new patch into your packages! It would be a pity to withhold Zeroconf support in distcc from your users any longer!
Unfortunately, Fedora doesn’t include any distcc packages. Someone should be changing that (who’s not me ;-)).
You like this patch? Then give me a kudo on ohloh.net (http://www.ohloh.net/accounts/7661). Now that I earned a golden 10 (after kicking Larry Ewing from position 64. Ha, take that Mr. Ewing!), I need to make sure I don’t fall into silver oblivion again. ;-)
Write a comment