Gentoo Logo

Documentaţie Gentoo pentru Distcc

Conţinut:

1.  Introducere

Ce este distcc?

Distcc este up program de compilare distribuită pe o reţea de sisteme participante. Constă dintr-un program server, distccd şi un program client, distcc. Distcc poate fi integrat uşor cu ccache, Portage şi Automake cu puţine setări.

Folosirea distcc pentru bootstrap

Dacă intenţionaţi să folosiţi distcc pentru procesul de bootstrap al unei instalări Gentoo, vă recomandăm să citiţi secţiunea Folosirea distcc pentru bootstrap de mai jos.

2.  Setare

Dependenţe

Pentru început, toate calculatoarele din reţea trebuie să aibă instalată aceeaşi versiune de GCC. Spre ex., amestecând versiuni 3.3.x (unde x variază) funcţionează, dar combinaţii de versiuni 3.3.x şi 3.2.x ar putea avea ca rezultat erori de compilare sau de rulare.

Instalarea distcc

Există un număr de opţiuni de care ar trebui să le ştiţi înainte de a instala distcc.

Distcc conţine un monitor grafic al sarcinilor pe care calculatorul dumneavoastră le trimite în reţea pentru compilare. Dacă folosiţi Gnome adăugaţi 'gnome' între indicatorii USE. Dacă nu aveţi Gnome şi doriţi să folosiţi monitorul, adăugaţi 'gtk'.

Cod 2.1: Instalarea distcc

# emerge distcc

Setarea Portage pentru a utiliza distcc

Setarea distcc cu Portage este simplă. Pe fiecare calculator care va participa în compilarea distribuită, executaţi următoarele comenzi:

Cod 2.2: Integrarea Distcc şi Portage

# emerge distcc
# nano -w /etc/make.conf
(Setaţi N la un număr potrivit scenariului dvs.)
(O strategie comună este setarea N este de două ori numărul total
de procesoare disponibile + 1)
MAKEOPTS="-jN"
(Adăugaţi distcc la variabila FEATURES)
FEATURES="distcc"

Specificarea Sistemelor Participante

Utilizaţi comanda distcc-config pentru a seta lista de sisteme participante. Iată un exemplu de sisteme ce ar putea să fie conţinute în lista dvs.:

Cod 2.3: Exemplu de definiţii de sisteme participante

192.168.0.1          192.168.0.2                       192.168.0.3
192.168.0.1/2        192.168.0.2                       192.168.0.3/10
192.168.0.1:4000/2   192.168.0.2/1                     192.168.0.3:3632/4
@192.168.0.1         @192.168.0.2:/usr/bin/distccd     192.168.0.3
(Există şi alte metode de a seta sistemele participante. Consultaţi
pagina de manual distcc pentru mai multe detalii.)
Dacă doriţi să compilaţi pe maşina locală, ar trebui să puneţi 'localhost' în
lista de  sisteme gazdă. În schimb, dacă nu doriţi să utilizaţi maşina locală
pentru a compila (caz destul de des întâlnit), omiteţi-l din lista de sisteme
gazdă. Pe o maşină lentă, utilizarea localhost ar putea chiar să îngreuneze
procesul. Asiguraţi-vă că vă testaţi setările pentru performanţă.

Pare complicat, însă în cele mai multe cazuri o variantă a liniei 1 sau 2 va funcţiona.

Deoarece majoritatea utilizatorilor nu vor folosi linii de tipul 3 sau 4, documentaţia distcc, vă voi îndrepta către documentaţia distcc (man distcc) pentru mai multe informaţii.

Spre exemplu, pentru o setare conform liniei 1 în exemplul precedent:

Cod 2.4: Exemplu de setare sisteme participante

# /usr/bin/distcc-config --set-hosts "192.168.0.1 192.168.0.2 192.168.0.3"

Editaţi /etc/conf.d/distccd pentru situaţia dumneavoastră particulară şi nu uitaţi să perimteţi accessul doar sistemelor participante de încredere folosind directiva --allow. Pentru o securizare adiţională, ar trebui să utilizaţi, de asemenea, directiva --listen pentru a-i specifica aplicaţiei daemon distcc adresa IP pe care să asculte (pentru sisteme cu mai multe adrese IP). Pentru mai multe informaţii consultaţi Consideraţiile de securitate pentru distcc.

Important: Este important să utilizaţi --allow şi --listen. Vă rugăm să consultaţi pagina de manual distccd sau documentul de securitate pentru mai multe informaţii.

Apoi, porniţi aplicaţia daemon distcc pe toate calculatoarele participante:

Cod 2.5: Pornirea aplicaţiei daemon distcc

(Adăugaţi distccd în nivelul de execuţie default)
# rc-update add distccd default
(Porniţi aplicaţia daemon distcc)
# /etc/init.d/distccd start

Setarea Distcc pentru Funcţionarea cu Automake

În unele cazuri este mai uşor decât setarea Portage. Aveţi de modificat variabila PATH pentru a include /usr/lib/distcc/bin înaintea directorului care conţine gcc (/usr/bin). O mică observaţie: în cazul în care ccache este de asemenea folosit, distcc trebuie introdus după ccache:

Cod 2.6: Setarea path

# export PATH="/usr/lib/ccache/bin:/usr/lib/distcc/bin:${PATH}"
Puteţi adăuga această linie în fişierul dvs. .bashrc sau echivalent pentru
a vi se seta PATH de fiecare dată când efectuaţi login

Apoi, în loc de make, folosiţi make -jN (unde N este un număr întreg). Valoarea N depinde de reţeaua de compilare şi de tipurile de calculatoare folosite. Încercaţi numere diferite pentru a obţine performanţa maximă.

3.  Compilarea Încrucişată (Cross-Compiling)

Compilarea încrucişată utilizează o arhitectură pentru a compila programe pentru o altă arhitectură. Aceasta poate fi la fel de simplu ca utilizaera unui sistem Athlon (i686) pentru a compila un program pentru K6-2 (i586) sau utilizarea unui sistem Sparc pentru a compila un program pentru arhitectura ppc. Aceasta este documentată în Ghidul pentru Compilarea Încrucişată DistCC.

4.  Folosirea Distcc pentru Procesul de Bootstrap

Pasul 1: Configurarea Portage

Porniţi calculatorul folosind un mediu LiveCD Gento Linux şi urmăriţi instrucţiunile de instalare până la procesul de bootstrap. Consultaţi Ghidul cu Întrebări Frecvente despre Gentoo pentru mai multe informaţii despre procesul de bootstrap). Apoi, configuraţi Portage pentru distcc:

Cod 4.1: Setări preliminare

# nano -w /etc/make.conf
(Adăugaţi distcc în FEATURES)
FEATURES="distcc"
(Modificaţi MAKEOPTS pentru a include -jN, unde N este dublul numărului de procesoare disponibile +1)
MAKEOPTS="-jN"

Cod 4.2: Setarea path

# export PATH="/usr/lib/ccache/bin:/usr/lib/distcc/bin:${PATH}"

Pasul 2: Instalarea distcc

Înainte de a instala distcc, un utilizator cu numele distcc trebuie adăugat în fişierul /etc/passwd:

Cod 4.3: Crearea utilizatorului de sistem distcc

# echo "distcc:x:240:2:distccd:/dev/null:/bin/false" >>/etc/passwd

Important: Este important să notaţi că adăugarea de utilizatori în acest fel este o practică neconvenţională. Noi o utilizăm în acest caz, deoarece nu avem instalat utilitarul useradd (pe care îl utilizaţi în mod normal pentru adăugarea de utilizatori) încă, în acest punct al instalării.

Instalarea distcc:

Cod 4.4: Instalarea distcc pe un calculator nou

# USE='-*' emerge --nodeps sys-devel/distcc

Pasul 3: Setarea distcc

Rulaţi distcc-config --install pentru a seta distcc:

Cod 4.5: Setarea finală distcc

(Substituiţi host1, host2, ... cu adresele de IP ale calculatoarelor participante)
# /usr/bin/distcc-config --set-hosts "localhost host1 host2 host3 ..."
Un exemplu: /usr/bin/distcc-config --set-hosts "localhost 192.168.0.4 192.168.0.6"

distcc este setat, în acest moment, pentru procesul de bootstrap! Continuaţi instalarea conform instrucţiunilor oficiale şi nu uitaţi să reinstalaţi distcc după emerge system. Aceasta, pentru ca să vă asiguraţi că toate dependenţele dorite sunt instalate, de asemenea.

Notă: În timpul procesului de bootstrap şi a pasului emerge system, distcc are putea părea că nu este folosit. Aceasta este de aşteptat, deoarece unele pachete ebuild nu se integrează bine cu distcc, şi îl dezactivează intenţionat.

5.  Probleme

Unele Pachete Nu Utilizează Distcc

Pe măsură ce pachete diferite sunt instalate, veţi observa că unele dintre ele nu sunt distribuite (şi nu sunt compilate în paralel). Aceasta se datorează faptului că fişierul Makefile al pachetului nu suportă operaţii paralele sau dezvoltatorii pachetelor ebuild a dezactivat intenţionat compilarea paralelă datorită unor probleme cunoscute.

Uneori, un pachet nu va fi compilat de către distcc. Dacă aşa ceva se întâmplă, vă rugăm să ne raportaţi pachetul.

Versiuni Mixte de GCC

Dacă aveţi versiuni GCC diferite pe sistemele dumneavoastră participante, este de aşteptat să aveţi probleme. Soluţia este să rulaţi aceeaşi versiune de gcc pe toate sistemele participante din reţeaua de compilare.

Actualizările recente ale Portage au setat ca Portage să utilizeze ${CHOST}-gcc în loc de gcc. Aceasta înseamnă că, dacă aveţi versiuni de maşini i686 amestecate cu alte tipuri (i386, i586) veţi avea probleme. O soluţie de compromis ar fi să exportaţi cu export CC='gcc' CXX='c++' sau să modificaţi în /etc/make.conf.

Important: Aplicarea acestei soluţii redefineşte explicit o parte din comportamentul Portage şi poate avea unele rezultate ciudate, pe viitor. Efectuaţi acest lucru doar în cazul în care amestecaţi medii CHOST.

6.  Aplicaţii Suplimentare Distcc

Aplicaţii de Monitorizare pentru distcc

Distcc este distribuit cu două aplicaţii de monitorizare. distcccmon-text este un monitor în mod text, este compilat întotdeauna şi este foarte uşor de folosit. Dacă rulaţi programul fără nici un parametru, va rula o singură dată. Dacă rulaţi programul cu un număr N drept parametru, programul va afişa la fiecare N secunde.

Cealaltă aplicaţie de monitorizare este compilată numai dacă gtk sau gnome este prezent în indicatorii dvs. USE. Cel bazat pe GTK+ rulează în orice mediu X. În Gentoo aplicaţia grafică de monitorizare este denumită distccmon-gui pentru evitarea confuziilor. În alte părţi este posibil să fie denumită ca distccmon-gnome.

Cod 6.1: Pornirea aplicaţiilor de monitorizare

# distccmon-text N
(sau)
# distccmon-gui
Pentru a monitoriza încărcarea aplicaţiei distcc folosiţi:
# DISTCC_DIR="/var/tmp/portage/.distcc/" distccmon-text N
(sau)
# DISTCC_DIR="/var/tmp/portage/.distcc/" distccmon-ui

Important: Dacă directorul dvs. distcc este în altă locaţie, modificaţi variabila DISTCC_DIR corespunzător.



Imprimare

Actualizat la 4 Aprilie 2006

Versiunea originală a acestui document a fost actualizată ultima dată la 14 Iunie 2009

Sumar: Acest document descrie folosirea distcc în distribuţia Gentoo.

Lisa Seelye
Autor

Mike Frysinger
Editor

Erwin
Editor

Sven Vermeulen
Editor

Lars Weiler
Editor

Tiemo Kieft
Redactor

Lucian Constantin
Translator

Donate to support our development efforts.

Copyright 2001-2012 Gentoo Foundation, Inc. Questions, Comments? Contact us.