Disclaimer :
This document is not valid and is not maintained anymore.
|
Distcc vejledningen
1.
Introduktion
Hvad er distcc?
Distcc er et program designet til at distribuere kompileringsopgaver
på tværs af et netværk til deltagende værtscomputere. Det er bestående
af en server, distccd, og et klient program,
distcc. Distcc kan fungere transparent med ccache og Portage med lidt arbejde.
Brug af distcc til bootstrap
Hvis du planlægger at bruge distcc til at hjælpe dig med at
bootstrappe en Gentoo installation, vær sikker på at du læser
sektionen om Brug af distcc til
bootstrapping, som er placeret længere ned i dette dokument.
2.
Opsætning
Afhængigheder
For at bruge Distcc, skal alle computere i dit netværk have samme
GCC-versioner. Mix af 3.3.x (hvor x varierer) er ok, men blanding af 3.3.x
og 3.2.x vil resultere i at dine programmer har fejl i dem.
Installation af Distcc
Der er nogle få indstillinger som du bør være opmærksom på før du
begynder med installationen af distcc.
Distcc sendes med en grafisk overvåger til at overvåge opgaver, som
din computer sender afsted til kompileringen. Hvis du bruger Gnome, så
put 'gnome' i dine USE-flag. Imens, hvis du ikke bruger Gnome og
stadigvæk vil have overvågeren, så skal du putte 'gtk' i dine
USE-flag.
Kode oversigt 2.1: Installation af distcc |
# emerge distcc
|
At sætte Portage op til at bruge Distcc
Opsætningen af distcc er meget nemt i Portage. Udfør disse
simple trin på hver af de computere, som skal være del i de distribuerede kompilinger:
Kode oversigt 2.2: Integration af Distcc og Portage |
# emerge distcc
# nano -w /etc/make.conf
MAKEOPTS="-jN"
FEATURES="distcc"
|
At specificere deltagende hosts
Brug distcc-config kommandoen for at indstille listen af
værter. Her er et eksempel på nogle værter, som måske er med i din
liste:
Kode oversigt 2.3: Eksempler på vært definitioner |
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
|
Det kan godt se meget indviklet ud, men i de fleste tilfælde vil en
variation af linie 1 eller 2 virke.
- Linie 1 er bare en pladsbegrænsende liste af værter
-
Linie 2 er en liste af værter, der specificerer det maksimale antal
af jobs (ved at bruge /N) der højest kan sendes til en vært på
ethvert givent tidspunkt (specificeret med /n).
Da de fleste folk ikke kommer til at bruge linerne 3 og 4, vil jeg blot pege på distcc docs for
at få mere information. For at tilføje sikkerhed bør du også bruge
--listen direktivet for at fortælle Distcc daemonen hvilken IP
den skal lytte på (til systemer med flere hjem).
F.eks. for at indstille den første linie i det foregående eksempel:
Kode oversigt 2.4: Kommando-eksempel for at indstille værter |
/usr/bin/distcc-config --set-hosts "192.168.0.1 192.168.0.2 192.168.0.3"
|
Rediger /etc/conf.d/distccd til dine behov og vær sikker
på at sætte --allow direktivet til kun at tillade værter du
stoler på. For mere sikkerhed, så bør du bruge --listen
direktivet, som fortæller distcc daemonen hvilken IP den skal lytte
til (for netværk med flere distcc grupper). For mere information kig på Distcc Security
Design (engelsk).
Start nu distcc-daemonen for alle de involverede computere:
Kode oversigt 2.5: Start af distcc daemon |
# rc-update add distccd default
# /etc/init.d/distccd start
|
At sætte Distcc op til at virke med Automake
Dette er i nogle tilfælde nemmere end opsætningen af Portage. Det du
skal gøre er at opdatere din PATH miljø-variabel til at
inkludere /usr/lib/distcc/bin før det bibliotek, hvor gcc
befinder sig (/usr/bin). Men ikke uden en advarsel. Hvis du
bruger ccache, skal du sætte distcc efter ccache delen:
Kode oversigt 2.6: Opsætning af din sti |
# export PATH="/usr/lib/ccache/bin:/usr/lib/distcc/bin:${PATH}"
|
Derefter, når du normalt ville skrive make, skal du nu skrive
make -jN (hvor N igen er et positivt heltal). Em værdi af N
afhænger af dit netværk og typen af de computere du bruger til at
kompilere. Jeg har selv en dual processor P3 og en K6-2/400 der
kompilerer alt til min desktop (en 1200MHz Athlon Thunderbird) og jeg
bruger -j5. Test dine egne indstillinger for at finde det rigtige tal.
3.
Cross-Compiling
En note om Cross-Compiling
Cross-compiling bruger en arkitektur til at bygge programmer til en
anden arkitektur. Dette er så simpelt som at bruge en Athlon (i686)
til at bygge et program til en K6-2 (i586), eller at bruge en Sparc
til at bygge at program til en ppc.
En introduktion til Cross-compiling
Hvis du vil prøve cross-compiling et forsøg, så kan følge The Cross
Compile HOWTO(engelsk); Da Crossdev er forældet.
I den nærmeste fremtid håber jeg, at kunne skaffe en Sparc af en eller type
så jeg kan putte Gentoo på den og lege med det i min lejlighed.
4.
Brug af distcc til bootstrap
Trin 1: Indstilling a ny computer
Opstart din nye box med en Gentoo Linux LiveCD og følg Installationsinstruktionerne
indtil bootstrapping delen. Indstil så Portage til at bruge distcc:
Kode oversigt 4.1: Indledende indstillinger |
# nano -w /etc/make.conf
FEATURES="distcc"
MAKEOPTS="-jN"
|
Kode oversigt 4.2: At sætte din sti op |
# export PATH="/usr/lib/ccache/bin:/usr/lib/distcc/bin:${PATH}"
|
Trin 2: At få fat i Distcc
Før installationen af distcc skal der være tilføjet en bruger med navn
distcc i /etc/passwd:
Kode oversigt 4.3: Lav distcc bruger |
# echo "distcc:x:240:2:distccd:/dev/null:/bin/false" >> /etc/passwd
|
Vigtigt:
Det er vigtigt at bemærke at tilføje brugere på denne måde er
galt. Vi gær det her kun fordi der ikke er noget useradd
værktøj (som du normalt ville bruge til at tilføje brugere)
tilgængeligt i dette punkt af installationen.
|
Installer distcc:
Kode oversigt 4.4: Få fat i Distcc på den nye computer |
# USE='-*' emerge --nodeps sys-devel/distcc
|
Trin 3: Indstilling af distcc
Kør distcc-config --install for at sætte distcc op:
Kode oversigt 4.5: Afsluttende distcc opsætning |
# /usr/bin/distcc-config --set-hosts "localhost host1 host2 host3 ..."
|
Distcc er nu sat op til bootstrap! Fortsæt med den officielle
installationsvejledning, og glem ikke at gen-emerge distcc
efter emerge system. Dette er for at være sikker på at
afhængighederne du vil have også er installeret.
Bemærk:
Under bootstrap og emerge system ser det måske ikke ud til at
Distcc bliver brugt. Dette kan forventes, idet nogle ebuilds eller
pakker virker ikke godt med distcc, så de slår med overlæg distcc fra.
|
5.
Fejlfinding
Mozilla og XFree
Når du emerger forskellige pakker, vil du bemærke at de ikke bliver
distribueret (og virkelig ikke bliver bygget parallelt). Dette er
fordi at udviklerne af Mozilla og XFree .ebuild'ene har slået parallel
bygning fra, fordi det er kendt for at skabe problemer..
Nogen gange kan det ske at en pakke fejler i kompileringen. Hvis dette
sker for dig, så send venligst en rapport til os.
En blanding af modstandsdygtig-gcc og ikke-modstandsdygtig-gcc værter vil være fejlfuld.
Med sådan en lang titel, er næsten alt forklaring unødvendigt. Men,
hvis du planlægger at bruge distcc spredt over værter, som bruger PaX/hardened-gcc
modstandsdygtig projekt, og andre ikke har, vil du løbe ind i
problemer.
Løsningen kræver en lille smule fremsynethed fra din side; du bliver
nødt til at køre hardened-gcc -R på væreten, som har
PaX/hardened-gcc, eller du bliver nødt til at aktivere PaX
beskyttelser i din kerne og emerge hardened-gcc. Begge ting er
godt at gør, siden for det meste er beskyttelserne tilbud af begge
pakker, og det er en god idé at være transparent over for brugeren.
GCC-versionsmix
Hvis du har forskellige versioner af GCC på dine værter, vil der
sikkert opstå mærkelige problemer. Løsningen er at blive sikker på at
alle væreter bruger samme GCC-version.
Nye opdateringer af Portage har fået Portage til at bruge
${CHOST}-gcc i stedet for gcc. Dette betyder at hvis du
blander i686 maskiner med andre typer (i386, i586), så vil du løbe ind
i problemer. En løsning på dette er at export CC='gcc'
CXX='c++' eller putte det i /etc/make.conf, men det
mangler testning. Hvis det virker for dig, så send venligst en email
til mig Lisa Seelye(skal være
engelsk, ellers send en dansk til Arne
Mejlholm).
6.
Distcc ekstra ting
Distcc overvågere
Distcc kommer med to overvågningsværktøjer. Den tekst-baserede bliver
altid bygget og kaldes distccmon-text. Når du kører den for den
første gang kan det godt virke lidt forvirrende, men den er faktisk
ganske nem at bruge. Hvis du kører programmet uden en parameter så
kører det kun en gang. Hvis du derimod giver den et tal så opdaterer
den hver N sekunder, hvor N er den parameter du giver den
Det andet overvågningsværktøj findes kun hvis du har gtk i dit
USE flag. Denne er baseret på GTK+ og kører i et X miljø, og er
faktisk ret dejligt.
Der følger en advarsel med til brugeren af disse programmer. Hvis du
vil overvåge en vilkårlig emerge, så er du nødt til at starte
overvågningsværktøjet sådan:
Kode oversigt 6.1: At starte overvågningsværktøjerne |
# distccmon-text N
# distccmon-gnome
# DISTCC_DIR="/var/tmp/portage/.distcc/" distccmon-text N
# DISTCC_DIR="/var/tmp/portage/.distcc/" distccmon-gnome
|
Vigtigt:
Hvis dit distcc bibliotek er et andet sted, så skal du også
tilsvarende ændre DISTCC_DIR variablen.
|
Indholdet i dette dokument er autoriseret under en Creative Commons -
Attribution / Share Alike licens.
|