Disclaimer :
Dit document is niet juist en is niet meer onderhouden.
|
Gentoo Distcc Documentatie
1.
Introductie
Wat is distcc?
Distcc is een programma ontworpen om het compilen van programmas te verdelen
over een netwerk. Het bestaat uit een server, distccd, en een client
programma, distcc. Distcc kan vlot samenwerken met ccache, Portage, en Automake met lichte
configuratie.
Distcc gebruiken tijdens installatie
Als je van plan bent om distcc te gebruiken om je te helpen bij de
bootstrap, lees dan Distcc
gebruiken voor bootstrap, wat later nog ter sprake komt.
2.
Setup
Dependencies
Om distcc te gebruiken moeten alle computers op je netwerk dezelfde versie van
GCC hebben. Bijvoorbeeld 3.3.x mixen is oke, maar 3.3.x met 3.2.x kan
resulteren in compiltatie errors of runtime errors.
Distcc Installeren
Er zijn een aantal opties waar je bewust van moet zijn alvorens distcc te
installeren.
Distcc komt standaard met een grafische monitor om de taken die je computer
uitzendt te controleren voor compilatie. Als je Gnome gebruikt, zet dan 'gnome'
in je USE flags. Als je geen gnome gebruikt maar toch over deze functie wilt
beschikken, moet je 'gtk' in je USE flags zetten.
Codevoorbeeld 2.1: Distcc installeren |
# emerge distcc
|
Belangrijk:
Onthoud, dat je distcc op alle deelnemende machines moet installeren.
|
Portage installeren om Distcc te gebruiken
Portage configureren voor distcc is simpel. Voer de volgende commando's in op
elk systeem dat deelneemt in de gedistributeerde compilatie.
Codevoorbeeld 2.2: Distcc en Portage integreren |
# emerge distcc
# nano -w /etc/make.conf
MAKEOPTS="-jN"
FEATURES="distcc"
|
Deelnemende hosts specifieeren
Gebruik het distcc-config commando om de lijst met hosts in te stellen.
Hier is een voorbeeld van een aantal hosts die in je lijst kunnen voorkomen:
Codevoorbeeld 2.3: Voorbeelden van host definities |
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
|
Het kan er allemaal moeilijk uitzien, maar in de meeste gevallen is een
configuratiebestand van een of twee lijntjes voldoende.
Aangezien de meeste mensen lijn 3 of 4 niet gaan gebruiken, verwijs ik je naar
de documentatie en
de manpages voor meer informatie (man distcc).
Bijvoorbeeld, om de eerste lijn in het voorbeeld te tonen:
Codevoorbeeld 2.4: Voorbeeld commando om hosts te configureren. |
# /usr/bin/distcc-config --set-hosts "192.168.0.1 192.168.0.2 192.168.0.3"
|
Pas /etc/conf.d/distccd aan naar je noden en zorg ervoor dat je de
--allow directive enkel zet bij hosts die je vertrouwt. Voor extra
veiligheid kun je ook de --listen directive gebruiken om de distcc daemon te
vertellen op welke IP hij moet luisteren. Meer informatie over distcc
beveiliging kun je vinden op Distcc Security Design.
Belangrijk:
Het is belangerijk --allow en --listen te gebruiken. Gelieve de distccd manpage
of het bovenstaand document te lezen voor meer informatie.
|
Start nu de distcc daemon op alle deelnemende computers:
Codevoorbeeld 2.5: De distcc daemon starten: |
# rc-update add distccd default
# /etc/init.d/distccd start
|
Distcc instellen om te werken met Automake
Dit is, in sommige gevallen, gemakkelijker dan de Portage configuratie. Je moet
je PATH variable updaten om /usr/lib/distcc/bin voor de map
die gcc bevat te bekijken. (/usr/bin). Hoewel, als je ccache
gebruikt moet je distcc achter het ccache gedeelte zetten:
Codevoorbeeld 2.6: Je PATH instellen |
# export PATH="/usr/lib/ccache/bin:/usr/lib/distcc/bin:${PATH}"
|
Nu, als je gewoonlijk make zou typen, zou je nu make -jN (waar N
een geheel getal is). De waarde van N hangt af van je netwerk en de types
computer die je gebruik voor compilatie. Test je instellingen om de beste waarde
voor dit getal te vinden.
3.
Cross-Compiling
Cross-compilen is een bepaalde architectuur programma's laten compilen voor een
andere architectuur. Dit kan eenvoudig een Athlon (i686) een programma voor een
K6-2 (i586) laten compilen, of een Sparc laten compilen voor een ppc. Dit is
gedocumenteerd in onze DistCC
Cross-compiling gids.
4.
Distcc gebruiken bij bootstrap
Stap 1: Portage configureren
Start je nieuwe computer op met een Gentoo Linux LiveCD en volg de installatie instructies
tot aan het bootstrap gedeelte. (Zie de Gentoo FAQ voor meer informatie over
bootstrappen.) configureer Portage dan om distcc te gebruiken:
Codevoorbeeld 4.1: Inleidende Setup |
# nano -w /etc/make.conf
FEATURES="distcc"
MAKEOPTS="-jN"
|
Codevoorbeeld 4.2: Je PATH instellen |
# export PATH="/usr/lib/ccache/bin:/usr/lib/distcc/bin:${PATH}"
|
Stap 2: Distcc installeren
Voor de installatie van distcc moet er een gebruiker distcc worden aangemaakt in
/etc/passwd:
Codevoorbeeld 4.3: De gebruiker distcc aanmaken |
# echo "distcc:x:240:2:distccd:/dev/null:/bin/false" >>/etc/passwd
|
Belangrijk:
Het is belangerijk later geen gebruikers toe te voegen op deze manier. Hier doen
we dit enkel omdat er op dit moment van de installatie useradd niet
gebruikt kan worden.
|
distcc installeren:
Codevoorbeeld 4.4: distcc installeren op het nieuwe systeem |
# USE='-*' emerge --nodeps sys-devel/distcc
|
Step 3: Distcc configureren
Voer distcc-config --install uit om distcc te installeren:
Codevoorbeeld 4.5: Afwerkende distcc setup |
# /usr/bin/distcc-config --set-hosts "localhost host1 host2 host3 ..."
|
Distcc is nu klaar om te bootstrappen! Ga verder met de officiele
installaties en vergeet niet om distcc te re-emergen na emerge
system. Dit is om te zorgen dat alle dependencies die je wilt ook
geinstalleerd worden.
Nota:
Tijdens bootstrap en emerge system kan het eruit zien alsof distcc
niet gebruikt wordt. Dit is verwacht aangezien bepalde ebuilds niet werken met
distcc, en het dus moedwillig uitschakelen.
|
5.
Troubleshooting
Bepaalde packages gebruiken distcc niet.
Als je verschillende packages emerged, zul je merken dat sommigen onder hen niet
verdeeld worden (en ook niet parallel gecompiled worden). Dit kan gebeuren omdat
de Makefile van de package dit niet ondersteund of omdat de maintainer
van de ebuild dit expliciet heeft uitgeschakeld omwille van een gekend probleem.
Soms kan distcc ervoor zorgen dat een package niet kan compilen. als dit
gebeurt, gelieve het ons dan te melden.
Verschillende GCC versies
Als je verschillende GCC versies op je hosts hebt, is het waarschijnlijk dat je
op vreemde problemen stuit. De oplossing is ervoor zorgen dat alle hosts
dezelfde versie van GCC gebruiken.
Recente updates van Portage laten Portage ${CHOST}-gcc gebruiken in de
plaats van gcc. Dit betekend dat als je verschillende i686 machines met
andere (i386, i586) types gebruikt, je in de problemen komt. Een oplossing voor
dit kan: export CC='gcc' CXX='c++ zijn, of je kan het in
/etc/make.conf zetten.
Belangrijk:
Dit expliciet doen herdefinieert het gedrag van Portage en kan voor vreemde
resultaten zorgen in de toekomst. Doe dit enkel als je CHOSTs mengt.
|
6.
Distcc Extras
Distcc Monitors
Distcc komt met twee monitors. de text-based versie wordt altijd
ingebouwd, en noemt distccmon-text. Dit voor de eerste keer draaien kan
een beetje verwarrend zijn, maar eigenlijk simpel. Als je het programma met geen
argumenten aanroept, zal het eenmaal draaien. Als je het een getal doorgeeft
echter, zal het elke N seconden update, waar N het argument is dat je doorgaf.
De andere monitor is enkel gecompiled als je de gtk of gnome USE
flags aan legt. Deze is GTK+ gebaseerd en draait in een X omgeving. Voor Gentoo
wordt de GUI monitor distccmon-gui voor minder verwarring. Bij andere
distro's wordt ernaar verwezen als distccmon-gnome.
Codevoorbeeld 6.1: De monitors starten |
# distccmon-text N
# distccmon-gui
# DISTCC_DIR="/var/tmp/portage/.distcc/" distccmon-text N
# DISTCC_DIR="/var/tmp/portage/.distcc/" distccmon-gui
|
Belangrijk:
Als je distcc map zich ergens anders bevindt, verander dan de DISTCC_DIR
variabele toepasselijk.
|
The contents of this document are licensed under the Creative Commons -
Attribution / Share Alike license.
|