Distcc
Från Unix.se, den fria unixresursen.
Distcc är ett verktyg för att distribuera arbetsbördan av programkompilering till två eller flera datorer. Detta gör det väl lämpat för källkodsbaserade distributioner som Gentoo.
Innehåll |
Distcc i Gentoo
Installation
Distcc har en grafisk frontend för övervakning av distribuerade kompileringar som byggs om 'gnome' eller 'gtk' är med i USE-variabeln. Kommandot
# USE="-gnome -gtk" emerge distcc
installerar distcc utan denna frontend.
Konfiguration
Distcc består av en klient och en daemon. Klienten låter dig skicka kompileringsdata till andra datorer och få den tillbaka i kompilerad form; daemonen tar emot data från andra datorer, kompilerar och skickar tillbaka. Daemonen konfigureras genom att redigera filen /etc/conf.d/distccd, medan klienten konfigureras genom det Gentoo-specifika programmet distcc-config. Observera att klient och server måste ha samma version av GCC.
Konfiguration av daemonen
Det finns två viktiga kommandoradsväxlar att överväga då man sätter upp en distcc-server. Den första är --port som specifierar vilken port daemonen ska lyssna på (standard är 3632). Om du är bakom en NAT-brandvägg bör du ha olika portar för varje distccd-server i det lokala nätverket, annars kommer de inte att vara tillgängliga utifrån. Den andra är --allow som specifierar vilka värdar som tillåts ansluta till din server. Inte bara mellanslagsseparerade IP-adresser är tillåtna, utan även adresser med en viss CIDR-masklängd, specifierad efter ett /. Om vi exempelvis antar att alla lokala datorer har adresser i området 192.168.0.1-192.168.0.254 så skulle --allow 192.168.0.0/24 låta dem alla ansluta till servern. Observera att om du inte specificerar någon adress med --allow så kan vem som helst ansluta.
Båda dessa växlar kan konfigureras i /etc/conf.d/distccd genom att redigera raden som innehåller DISTCCD_OPTS. Standard är att loggning hanteras genom systemets loggningsdaemon; ange ett filnamn efter --log-file på samma rad för att ändra denna inställning. Detta är rekommenderat eftersom distccd tenderar att generera mycket loggtrafik. Notera att användaren 'distcc' i gruppen 'daemon' måste ha skrivrättigheter till filen, annars blir det ett felmeddelande vid start.
För att sammanfatta, så är följande en typisk rad i /etc/conf.d/distccd:
DISTCCD_OPTS="--port 3632 --log-file /var/log/distccd.log --allow 192.168.0.0/24"
När daemonkonfigurationen är klar, startar du servern genom att skriva
# /etc/init.d/distccd start
Konfiguration av klienten
När klienten är korrekt konfigurerad kommer distribuerad kompilering att fungera felfritt med nästan alla icke-binära ebuilds. Några distcc-serveradresser behövs naturligtvis. Om servrarna är på Internet, och inte i det lokala nätverket, är det en god idé att använda komprimering - mer om det längre ner.
Alla växlar till klienten sätts vanligtvis genom miljövariabler i skalet. I Gentoo finns dock programmet distcc-config, med vilket man kan specifiera dem en gång för alla. Kör
# distcc-config
för att få en kort förklaring av alla möjliga växlar. Den viktigaste variabeln är DISTCC_HOSTS som sätts genom --set-hosts. Den används inte bara för att specifiera adresserna till servrarna (separerade med mellanslag) utan även vilken port servern lyssnar på och om LZO-komprimering ska användas. Eftersom det är en miljövariabel så måste värdet efter växeln avgränsas med citationstecken. Alltså:
# distcc-config --set-hosts "lokal-server1:3632 lokal-server2:3633 avlägsen-server:3632,lzo localhost"
där det avslutande ,lzo specifierar att komprimering ska användas på servern i fråga. Notera att komprimering är ett val som bara görs i klienten; en server kommer alltid att skicka tillbaka komprimerad data som svar på komprimerade kompileringsförfrågningar. Adressordningen i DISTCC_HOSTS är viktig; värdar i början av listan kommer att prioriteras när arbete ska distribueras. Distcc-dokumentationen föreslår att servrarna anges i nedstigande ordning med avseende på processorhastighet (inklusive localhost, om klientdatorn inte är för långsam).
Det andra valet att notera är --set-log $FILNAMN, som gör att distcc skriver klientloggen till $FILNAMN, t ex /var/log/distcc.log. Filrättigheter är inget att bry sig om nu, eftersom det oftast är root-kontot som används vid distribuerade kompileringar.
Distcc och portage
För att aktivera distcc i portage ska du redigera /etc/make.conf och se till att 'distcc' är listad i FEATURES, på följande vis:
FEATURES="distcc"
Använd funktionen 'parallell make' för optimal prestanda genom att lägga till
MAKEOPTS="jN"
i samma fil. N specifierar antalet parallella make-instanser; det vanligaste rådet är att det bör vara antalet CPU:er i distcc-serverlistan plus ett, men det är kanske inte alltid det bästa.
Annan dokumentation
Se även man-sidorna för distcc och distccd samt den officiella guiden för distcc i Gentoo (http://www.gentoo.org/doc/en/distcc.xml).
Externa länkar
- distcc:s hemsida (http://distcc.samba.org)