Documentaţie Gentoo pentru Distcc
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
MAKEOPTS="-jN"
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
|
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 |
# rc-update add distccd default
# /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}"
|
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
FEATURES="distcc"
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 |
# /usr/bin/distcc-config --set-hosts "localhost host1 host2 host3 ..."
|
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
# distccmon-gui
# DISTCC_DIR="/var/tmp/portage/.distcc/" distccmon-text N
# 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.
|
Conţinutul acestui document este publicat sub licenţa Creative Commons -
Attribution / Share Alike.
|