Gentoo Logo

Distcc vejledningen

Indhold:

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
(Indstil N til et brugbart nummer til specifikke opsætning)
(En typisk heuristisk strategi er dobbelt så højt et nummmer af CPUer + 1)
MAKEOPTS="-jN"
(Tilføj distcc til dine FEATURES-variabler)
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
(Der er også adskillige andre metoder til at sætte værts
definitioner op. Se distcc man siderne for at få flere detajer.)

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

(Tilføj distccd til standard runlevel)
# rc-update add distccd default
(Start af distcc daemon)
# /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
(Tilføj distcc til FEATURES-variablen
FEATURES="distcc"
(Modificer MAKEOPTS til at indeholde -jN men N i en passende integer)
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

(Udskift host1, host2 ... med IP-numre på de pågældende værter
# /usr/bin/distcc-config --set-hosts "localhost host1 host2 host3 ..."
Et eksempel: /usr/bin/distcc-config --set-hosts "localhost 192.168.0.4 192.168.0.6"

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
(Eller)
# distccmon-gnome
For at overvåge Portages distcc forbrug kan du bruge:
# DISTCC_DIR="/var/tmp/portage/.distcc/" distccmon-text N
(Eller)
# 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.



Udskriv

Opdateret 25. marts 2005

The original version of this document was last updated April 7, 2008

Opsummering: Dette dokument fungerer som en HOWTO for at bruge distcc med Gentoo.

Lisa M. Seelye
Forfatter

Mike Frysinger
Redaktør

Erwin
Redaktør

Sven Vermeulen
Redaktør

Lars Weiler
Redaktør

Tiemo Kieft
Anmelder, Redaktør

Arne Mejlholm
Oversætter

Jesper Brodersen
Korrektur

Donate to support our development efforts.

Support OSL

Support OSL

Gentoo Centric Hosting: vr.org

VR Hosted

Tek Alchemy

Tek Alchemy

SevenL.net

SevenL.net

Global Netoptex Inc.

Global Netoptex Inc.

Bytemark

Bytemark

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