Decrease Gentoo compilation times by leveraging spare resources
500K+
Decrease Gentoo compilation times by leveraging spare resources, such as an Ubuntu or Windows box idling around. Docker is the only prerequisite.
amd64armarm64ppc64x86Note
Only the stable toolchain of these architectures is supported.
On the worker node(s), run the containerized distcc server (distccd):
docker run -d -p 3632:3632 --name gentoo-distcc --rm ksmanis/gentoo-distcc
distccd should now be accessible from all interfaces at port 3632
(0.0.0.0:3632).
Note
Only private IP addresses are allowed to connect to distccd by default.
Command-line arguments are passed on verbatim to distccd. For instance, you can turn on the built-in HTTP statistics server:
docker run -d -p 3632-3633:3632-3633 --name gentoo-distcc --rm ksmanis/gentoo-distcc --stats
The statistics server should now be accessible from all interfaces at port 3633
(0.0.0.0:3633).
For a full list of options refer to distccd(1).
If you share a worker instance between multiple clients, you might be interested
in enabling server-side caching with ccache to avoid redundant recompilations.
To do so, pull the ccache tag:
docker run -d -p 3632:3632 --name gentoo-distcc-ccache --rm ksmanis/gentoo-distcc:ccache
The directory /var/cache/ccache automatically persists in an anonymous Docker
volume, but a named Docker volume or a bind mount may also be used for stronger
persistence guarantees.
Ccache statistics can be queried as follows:
docker exec gentoo-distcc-ccache ccache -sv
For projects that require the Clang compiler, dedicated image variants are available. These variants include both the GCC and Clang compilers.
To use the Clang variant:
docker run -d -p 3632:3632 --name gentoo-distcc-clang --rm ksmanis/gentoo-distcc:clang
To use the Clang variant with ccache:
docker run -d -p 3632:3632 --name gentoo-distcc-ccache-clang --rm ksmanis/gentoo-distcc:ccache_clang
All amd64 image variants support cross-compilation for the arm64
architecture (specifically the aarch64-unknown-linux-gnu toolchain) and vice
versa: all arm64 image variants support cross-compilation for the amd64
architecture (specifically the x86_64-pc-linux-gnu toolchain). In other words,
an amd64 desktop can be used to cross-compile for an arm64 Raspberry Pi and
vice versa.
Cross-compilation support is enabled out of the box without any user configuration. More architecture combinations can be added upon request.
A manual way to test the containers is to compile a sample C file:
#include <stdio.h>
int main() {
printf("Hello, distcc!\n");
return 0;
}
DISTCC_HOSTS="127.0.0.1:3632" DISTCC_VERBOSE=1 distcc gcc -c main.c -o /dev/null
Content type
Image
Digest
sha256:7c55243ea…
Size
1.1 GB
Last updated
3 days ago
docker pull ksmanis/gentoo-distcc:branch-master-ccache_clang