Distcc/tr

Distcc, derleme görevlerini ağdaki istemcilere yayarak gerçekleştiren bir yazılımdır. Sunucu servisi, istemci servisi  'dir. Ufak bir yapılandırma ile ccache, Portage ve Automake ile uyumlu şekilde çalışabilir.

Eğer distcc'yi yeni bir Gentoo kurulumunda (bootstrap) kullanmak istiyorsanız makalenin ilgili bölümünü okuduğunuza emin olun.

Kurulum
distcc'yi yapılandırmadan önce, tüm makinelere paketini kuralım.

Tüm makinelerdeki gereksinimler
distcc'yi kullanabilmek için ağınızdaki tüm bilgisayarların birbirine yakın GCC sürümlerini kullanması gerekmektedir. Örneğin, 3.3.x (x değişebilir) sürümlerini birlikte kullanmanız problem oluşturmaz ancak 3.3.x ile 3.2.x sürümleri karıştığında derleme veya derlenmiş programların çalışması sırasında problem oluşabilir.

Distcc kurulumu
Distcc giden görevlerin gösterilmesi için bir arayüze sahip. Bu özelliği kullanmak istiyorsanız  bayraklarınıza   eklediğinize emin olun.

yapılandırmasının ardından kurulabilir:

distcc servisinin otomatik başlatılması
distccd servisinin otomatik olarak başlaması için yapmanız gerekenler, kullandığınız init sistemine bağlı olarak, aşağıdaki gibidir.

OpenRC kullanıyorsanız
dosyasını ihtiyacınıza göre düzenleyin ve  izinlerini yalnızca güvendiğiniz istemcilere verin. Ek güvenlik önlemi olarak hangi istemcilerin dinleneceğini  ile belirleyebilirsiniz. Güvenlik kaygıları için lütfen Distcc güvenlik belgesini inceleyin.

Aşağıdaki örnek 192.168.0.4 ve 192.168.0.5 adreslerinde çalışan istemcilerin çalıştırdığımız distccd servisine erişebilmesine izin verir:

Şimdi dahil olan tüm bilgisayarlarda distccd servisini başlatalım:

systemd kullanıyorsanız
dosyasını düzenleyin ve izin veirlen istemcileri CIDR formatina göre ekleyin. Örnek olarak:

Değişikliğin ardından unit dosyalarını yeniden yüklemelisiniz:

Açılışta distcc</tt> servisinin çalışmasını açıp, ardından servisi başlatın:

Yapılandırma
Şimdi de distcc</tt>'nin yapılandırmasına bakalım.

Dahil olacak istemcileri belirleme
Katılacak istemcileri ayarlamak için distcc-config</tt> komutunu kullanabilirsiniz.

Aşağıdaki örnek istemci listesini inceleyin. Çoğu durumda 1. ve 2. satırların türevleri yeterli olmaktadır. 3. ve 4. satırlardaki kullanımın detayını distcc yardım sayfalarında bulabilirsiniz.

Daha farklı yöntemler kullanabilirsiniz. distcc</tt> yardım sayfalarına ( man distcc ) bakmanızı öneririz.

Bulunduğunuz bilgisayarı da derlemeye dahil etmek istiyorsanız listeye  da eklemeniz gerek. Yavaş bir bilgisayar ise, işlemin genelini yavaşlatacağı için bulundurmamayı seçebilirsiniz.

distcc</tt>'yi örneğin ilk satırında belirtilen bilgisayarları kullanacak şekilde yapılandıralım:

Portage'ı distcc ile kullanmak
Portage ile distcc</tt> kullanımı kolaydır. Yapmanız gereken distcc</tt> özelliğini açıp, aynı anda yapılacak işlem sayısını artırmaktan ibaret (çünkü distcc</tt> bize bu imkanı sağlıyor).

Ardından  ve   değişkenlerini aşağıdaki gibi düzenlemeniz gerek.

Genel strateji şöyledir
 * değerini toplam (sunucu+istemciler) CPU sayısının iki katına, ve
 * değerini sunucudaki işlemcilerin sayısına ayarlayın

için yapılandırmanıza uygun bir değer kullanmalısınız. Distcc hostları erişilemez durumda veya paket yerel olarak derlenmeliyse (gcc gibi)  bayrağı eklemeniz çok fazla işlem üretilmesini engeller.

Örneğin distccd</tt> çalışan iki tane 4 çekirdekli işlemciye sahip bilgisayara sahipseniz ve sunucu çift çekirdekli ise, gerekli  değişkeni şöyle olabilir:

dosyasını düzenlerken,  veya   içerisinde -march=native</tt> bulunmadığına dikkat edin. Eğer  değerinde   bulunuyorsa distccd</tt> kodu diğer sunuculara göndermeyecektir. Hedef için uygun -march=</tt> değeri şu komut ile bulunabilir:

Daha fazla bilgi için Inlining -march=native</tt> for distcc sayfasına bakabilirsiniz.

Distcc'yi automake ile kullanmak
Bu işlem genelde Portage yapılandırmasından daha kolaydır. Yapmanız gereken şey  ortam değişkenine  'yi barındıran dizinden  önce  eklemek. Ancak ccache kullanıyorsanız ccache bölümünün ardına yerleştirmeniz gerek:

Bu komutu kullanıcı bazlı veya global  gibi otomatik yüklenen bir dosyaya ekleyip her sisteme girdiğinizde çalışmasını sağlayabilirsiniz.

Ardından normalde  komutu ile iş yaparken,   tarzında (buradaki N bir sayıdır) kullanabilirsiniz. N değeri ağınızın hızına ve işlemci sayınıza göre değişecektir. Size en uyumlu değeri bulmak için deneme yapmanızı tavsiye ederiz.

distcc'yi bootstrap ile (sıfır kurulumda) kullanmak
distcc</tt>'yi sıfır kurulumda kullanmak bazı ek adımlar gerektirir.

Adım 1: Portage'ı yapılandırın
Boot the new box with a Gentoo Linux LiveCD and follow the installation instructions, while keeping track of the instructions in the Gentoo FAQ for information about bootstrapping. Then configure Portage to use distcc</tt>:

Update the  variable in the installation session as well:

Step 2: getting distcc
Install :

Step 3: setting up distcc
Run distcc-config --install</tt> to setup distcc; substitute the  in the example with the IP addresses or hostnames of the participating nodes.

Distcc is now set up to bootstrap! Continue with the proper installation instructions and do not forget to run <tt>emerge distcc</tt> after running <tt>emerge @system</tt>. This is to make sure that all of the necessary dependencies are installed.

Distcc extras
The <tt>distcc</tt> application has additional features and applications to support working in a <tt>distcc</tt> environment.

Distcc monitors
Distcc ships with two monitoring utilities. The text-based monitoring utility is always built and is called <tt>distccmon-text</tt>. Running it for the first time can be a bit confusing, but it is really quite easy to use. If the program is run with no parameter it will run just once. However, if it is passed a number it will update every  seconds, where   is the argument that was passed.

The other monitoring utility is only enabled when the    flag is set. This one is GTK+ based, runs in an X environment, and it is quite lovely. For Gentoo, the GUI monitor has been renamed to <tt>distccmon-gui</tt> to make it less confusing (it is originally called <tt>distccmon-gnome</tt>).

To monitor Portage's <tt>distcc</tt> usage:

A trick is to set  in environment variables:

Now update the environment:

Finally, start the GUI application:

Using SSH for distcc communication
Setting up distcc via SSH includes some pitfalls. First, generate an SSH key pair without password setup. Be aware that portage compiles programs as the Portage user (or as root if  is not set). The home folder of the Portage user is, which means the keys need to be stored in

Second, create a section for each host in the SSH configuration file:

Send the public key to each compilation node:

Also make sure that each host is available in the file:

Fix the file permissions as follows:

To set up the hosts <tt>test1</tt> and <tt>test2</tt>, run:

Please note the <tt>@</tt> (@ sign), which specifies ssh hosts for distcc.

Finally, tell <tt>distcc</tt> which SSH binary to use:

It is not necessary to run the initscript on the hosts when <tt>distcc</tt> communicates via SSH.

Troubleshooting
If a problem occurs while using <tt>distcc</tt>, then this section might help in resolving the problem.

ERROR: failed to open
As of January 22nd, 2015 emerging fails to create the proper file in. This apparently only effects version 3.1-r8 of distcc. This bug is in the process of being corrected (see ). It is possible to work around this by manually creating the log file, giving it proper ownership, and restarting the distccd daemon:

Next update the path of the <tt>distccd</tt> configuration file in  to the  directory created in the step before:

Finally, restart the distccd service:

Some packages do not use distcc
As various packages are installed, users will notice that some of them aren't being distributed (and aren't being built in parallel). This may happen because the package' doesn't support parallel operations, or the maintainer of the ebuild has explicitly disabled parallel operations due to a known problem.

Sometimes <tt>distcc</tt> might cause a package to fail to compile. If this happens, please report it.

Mixed GCC versions
If the environment hosts different GCC versions, there will likely be very weird problems. The solution is to make certain all hosts have the same GCC version.

Recent Portage updates have made Portage use  (minus gcc) instead of. This means that if i686 machines are mixed with other types (i386, i586) then the builds will run into troubles. A workaround for this may be to run:

It is also possible to set the  and   variables in  to the values list in the command above.

-march=native
Starting with GCC 4.3.0, the compiler supports the <tt>-march=native</tt> option which turns on CPU auto-detection and optimizations that are worth being enabled on the processor on which GCC is running. This creates a problem when using <tt>distcc</tt> because it allows the mixing of code optimized for different processors. For example, running <tt>distcc</tt> with <tt>-march=native</tt> on a system that has an AMD Athlon processor and doing the same on another system that has an Intel Pentium processor will mix code compiled on both processors together.

Heed the following warning:

To know the flags that GCC would enable when called with <tt>-march=native</tt>, execute the following:

External resources

 * Inlining <tt>-march=native</tt> for distcc
 * Distcc homepage