====== Distcc ====== ===== Overview ===== Distcc is used to compile packages faster on slow machines, such as [[Santo]] or the virtual machines, by doing some of the grunt work on physical hosts. ===== Build Hosts ===== * build0.sihnon.net ([[River]]) * build1.sihnon.net ([[Badger]]) * build2.sihnon.net ([[Hex]]) //todo// The build hosts use the following architectures: {| class="wikitable" cellspacing="10" |+ Architecture details |- ! Name ! Value |- | **CHOST** | x86_64-pc-linux-gnu |- | **gcc version** | 4.4.2 |} The following cross-compilation environments are also available: * i586-pc-linux-gnu * i686-pc-linux-gnu ===== Configuring a build host ===== * Install {{Package|direct=yes|sys-devel/distcc}} {{USEFlag|{{EnableFlag|avahi}}}}, and {{Package|direct=yes|sys-devel/crossdev}} * Configure the distcc daemon to accept connections from local machines only {{File|/etc/conf.d/distccd| }} ==== Configuring a new cross-compilation environment ==== Run the following command on each build host, where i586 is the name of the new environment. {{Root| crossdev -t i586 }} This command will build the necessary tools for cross-compilation, and will take a considerable time to run. To serve as a progress check, the following stages are run: * binutils * linux-headers-quick * glibc-headers * gcc-stage1 * linux-headers * glibc * gcc-stage2 ===== Configuring a build client ===== If the client has the same CHOST as all the build hosts, then setting up distcc is straightforward: * Install {{Package|direct=yes|sys-devel/distcc}} {{USEFlag|{{EnableFlag|avahi}}}} * Configure distcc to use each of the available build hosts with the following command: {{Root| distcc-config --set-hosts "build0.sihnon.net build1.sihnon.net build2.sihnon.net" }} * Configure portage to use distcc for compilations by adding setting the following option: {{File|/etc/make.conf| FEATURES="distcc" }} ==== Configuring a build client with a different CHOST to the build hosts ==== As explained in the Gentoo documentation, set up a wrapper script to have distcc tell the build host which environment to use for compilation. * Create the wrapper script in /usr/lib/distcc/bin/, with the name of the CHOST to be used, for example, i686-pc-linux-gnu-wrapper, containing the following: {{File|/usr/lib/distcc/bin/i686-pc-linux-gnu-wrapper| #!/bin/bash exec /usr/lib/distcc/bin/sparc-unknown-linux-gnu-g${0:$[[-2]]} "$@" }} * Make the wrapper script executable, and replace the unqualified tool symlinks with symlinks to the new wrapper: {{Root| cd /usr/lib/distcc/bin chmod a+x i686-pc-linux-gnu-wrapper rm cc gcc c++ g++ ln -s i686-pc-linux-gnu-wrapper cc ln -s i686-pc-linux-gnu-wrapper gcc ln -s i686-pc-linux-gnu-wrapper c++ ln -s i686-pc-linux-gnu-wrapper g++ }} ===== See Also ===== * http://www.gentoo.org/doc/en/distcc.xml * http://www.gentoo.org/doc/en/cross-compiling-distcc.xml