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.

Verify that all systems use the same version of binutils (eselect binutils list) or many packages will fail linking with various errors like text relocation.

Emerge
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:

Service
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:

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:

Distcc also supports a pump mode, by invoking the command. This may significantly reduce build time when multiple files are compiled in parallel. It caches preprocessed headers on the server side and, as a result, gets rid of repeated uploading and preprocessing of these header files.

To configure a host for pump mode, add the  suffix to the hosts definitions. Pump mode requires both  and   flags (regardless of the files being C or C++).

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:

CFLAGS and CXXFLAGS
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.

A GCC bug has recently been fixed in the 8.0 dev tree which facilitates a more reliable and succinct mechanism for extrapolating appropriate machine flags. The fix has been backported to the 6 and 7 branches and should be released fairly soon. Some processing is still required and a script can be found in the distccflags repo, or via :

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
Distcc'yi yapılandırmak için  komutunu çalıştırın. Aşağıdaki komutta  ile başlayan yerleri DistCC derlemesine katılan cihazların IP adresi veya hostname adresi ile değiştirin:

Kurulum oturumunda  değişkeninin de güncellenmesi gerekmekte:

Adım 2: Distcc kurulumu
paketini kurun:

Adım 3: Distcc'yi yapılandırma
Distcc'yi yapılandırmak için  komutunu çalıştırın. Aşağıdaki komutta  ile başlayan yerleri DistCC derlemesine katılan cihazların IP adresi veya hostname adresi ile değiştirin:

Distcc artık sıfırdan kuruluma hazır! Kuruluma devam edebilirsiniz. Ancak emerge @system</tt> komutunun ardından emerge distcc</tt> komutunu çalıştırıp tüm gerekli bağımlılıkların yüklendiğinden emin olun.

Distcc Ekstraları
Distcc</tt> uygulamasının bazı özellikleri ve yardımcı uygulamaları bulunmakta.

Distcc İzleme Araçları
Distcc iki tane izleme aracı ile gelmekte. Bunlardan metin tabanlı olanı. İlk kez kullanıyorsanız biraz kafa karıştırıcı olabilir ancak kullanımı kolaydır. Eğer herhangi bir parametre vermezseniz bir defa, herhangi bir numara -örneğin - verirseniz her   saniyede bir çalışacaktır.

Diğer izleme aracı da yalnızca    bayrağı açıksa kurulacaktır. GTK+ temelli, X ortamında çalışan sevimli bir uygulamadır. Gentoo'da, kafa karışıklığını önlemek için bu uygulamaya <tt>distccmon-gui</tt> (orijinal ismi <tt>distccmon-gnome</tt>'dur).

Portage'ın <tt>distcc</tt> kullanımını ölçmek için:

değişkenini ortam değişkenleriyle ayarlamak için bir ipucu:

Ardından ortam değişkenlerini güncelleyin:

Ardından grafiksel uygulamayı başlatabilirsiniz:

Cross-Compiling (Çapraz derleme)
Cross-compiling (çapraz derleme), derleme işlemini kullandığınız işlemci mimarisinden farklı bir mimaride çalışması için yaptığınız duruma verilen addır. Yani Athlon (i686) işlemci ile K6-2 (i586) için veya Sparc işlemci ile ppc için derleme yapmak gibi. Bu konuya Distcc/Cross-Compiling|DistCC Cross-compiling Belgesinde]] değinilmiştir.

Adım 1: Portage'ı Yapılandırın
Send the public key to each compilation node:

Yeni bilgisayarı Gentoo Linux CD'si ile başlatıp kurulum dökümanlarındaki adımlardan bootstrap'a kadar gelin. (Bootstrap için detaylı bilgiyi buradan bulabilirsiniz.) Ardından portage'ı distcc kullanmak için yapılandırın:

Fix the file ownership as follows:

To set up the hosts  and , run:

Finally, tell which SSH binary to use:

It is not necessary to run the initscript on the hosts when  communicates via SSH.

Testing
To test, write a simple Hello distcc program and run in verbose mode to see if it communicates properly.

Next, turn on verbose mode, compile the program using and link the generated object file into an executable:

There should be a bunch of output about finding its configuration, selecting the host to connect to, starting to connect to it, and ultimately compile. If the output does not list the desired hosts, check the configuration.

Finally, ensure the compiled program works properly. To test each host, enumerate each compile host in the hosts file.

If a problem occurs while using, 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  configuration file in  to the  directory created in the step before:

Finally, restart the distccd service:

-march=native
GCC 4.3.0 sürümünden itibaren derleyici  parametresi ile işlemcinizin türünü ve kullanılması gereken derleme seçeneklerini otomatik olarak tanımlayabiliyor. Bu durum  gibi farklı işlemcileri aynı anda kullanan bir sistem için problem oluşturmakta. Bu sebeple  kullanırken   veya   değerlerinizde   or   kullanmayın.

Distcc İzleme Araçları
Distcc iki tane izleme aracı ile gelmekte. Bunlardan metin tabanlı olanı. İlk kez kullanıyorsanız biraz kafa karıştırıcı olabilir ancak kullanımı kolaydır. Eğer herhangi bir parametre vermezseniz bir defa, herhangi bir numara -örneğin N- verirseniz her N saniyede bir çalışacaktır.

Diğer izleme aracı da  bayraklarınızda   veya   açık durumda ise derlenecek olan, GTK+ temelli grafiksel arayüzdür. Diğer dağıtımlarda genellikle  ismiyle bilinen bu arayüz Gentoo'da karışıklığa sebep olmamak için   ismindedir.

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

veya  için:

Heed the following warning:

See the CFLAGS and CXXFLAGS section and Inlining  for distcc for more information.

Get more output from emerge logs
It is possible to obtain more logging by enabling verbose mode. This is accomplished by adding DISTCC_VERBOSE to :

The verbose logging can then be found in.

Keep in mind that the first invocation visible in  isn’t necessary the first  call during a build process. For example a build server can get a one-minute backoff period during the configuration stage when some checks are performed using a compiler ( sets a backoff period when compilation on a remote server failed, it doesn’t matter whether it failed on local machine or not).

Dig into the directory to investigate such situations. Find other logs, or call explicitly from within the working directory.

Another interesting variable to use is DISTCC_SAVE_TEMPS. When set, it saves the standard output/error from a remote compiler which, for Portage builds, results in files in the directory.

Adım 2: Distcc Kurulumu
Distcc'yi kurun:

External resources

 * Inlining  for distcc
 * Distcc homepage