Gentoo Logo

Upozornění : Tento dokument již neplatí a není udržován.


Distcc v Gentoo

Obsah:

1.  Úvod

Co je distcc?

Distcc je program, který rozloží kompilaci mezi několik strojů v síti. Skládá se ze serveru, distccd, a klientské části, programu distcc. Distcc umí transparentně pracovat s ccache, Portage a Automake jen s minimálním úsilím.

Použití distcc při instalaci systému

Pokud plánujete použít distcc při instalaci Gentoo, přečtěte si prosím sekci použití distcc pro bootstrap systému.

2.  Nastavení

Závislosti

Abyste mohli používat distcc, musí mít všechny stroje v síti stejnou verzi GCC. Můžete například míchat 3.3.x (kde je x rozdílné), ale směšování 3.3.x a 3.2.x může vést k chybám při kompilaci nebo při běhu programů.

Instalace distcc

Je tu několik věcí, na které byste si před instalací distcc měli dát pozor.

Distcc je dodáváno s grafickou nadstavbou, která monitoruje, jaké části kódu, váš stroj posílá ke kompilaci ven. Pokud používáte GNOME, tak přidejte "gnome" do proměnné USE (v make.conf). Nepoužíváte-li jej a přesto chcete monitor používat, nastavte USE proměnnou "gtk".

Výpis kódu 2.1: Instalace distcc

# emerge distcc

Důležité: Laskavému čtenáři je to pravděpodobně jasné, avšak pro pořádek připomínáme, že distcc musí být nainstalovaná na všech kompilace se zúčastnivších se strojích.

Nastavení Portage

Nastavení Portage je jednoduché. Stačí udělat následující kroky na každém systému, který se zúčastní distribuované kompilace:

Výpis kódu 2.2: Integrace distcc a Portage

# emerge distcc
# nano -w /etc/make.conf
(Zadej N podle své situace)
(Obvykle počet všech  CPU + 1)
MAKEOPTS="-jN"
(Přidejte distcc do FEATURES)
FEATURES="distcc"

Zadání zúčastňujících se strojů

Použijte příkaz distcc-config k vytvoření seznamu účastnících se strojů. Příklad konfigurace:

Výpis kódu 2.3: Příklady definice seznamu strojů

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
(Existuje ještě několik dalších metod, jak definovat seznam strojů;
detaily viz manuálová stránka distcc.)
Chcete-li kompilovat na lokálním stroji, měli byste jako první položku
uvést 'localhost'. Naopak pokud nechcete, aby se Váš současný stroj podílel na
kompilacích (což je poměrně časté), v seznamu jej jednoduše neuvádějte. Na
pomalých strojích může uvedení localhostu celý proces zpomalit. Pro optimální
výkon otestujte svá nastavení.

Zdá se to komplikované, ale ve většině případů budou fungovat varianty příkladů z první nebo druhé řádky.

I když většina lidí 3. a 4. řádku nepoužije, dovolujeme si Vás tímto nasměrovat na dokumentaci distcc (man distcc), kde je možné získat další informace.

Např. použití první řádky z předchozího příkladu:

Výpis kódu 2.4: Ukázkový příkaz nastavení seznamu strojů

# /usr/bin/distcc-config --set-hosts "192.168.0.1 192.168.0.2
192.168.0.3"

Editujte podle potřeby /etc/conf.d/distccd a ujistěte se, že používáte --allow k umožnění přístupu jen povoleným strojům. K dalšímu zvýšení bezpečnosti můžete použít direktivu --listen, která distcc démonu říká, na kterých IP adresách má naslouchat (užitečné pro systémy s více IP adresami). Další informace o zabezpečení distcc najdete na stránce Distcc Security Design.

Důležité: Použití --allow a --listen je důležité. Pro dalši informace si prosím přečtěte manuálovou stránku distccd či výše uvedený dokument o bezpečnosti.

Nyní spusťte distcc démona na všech účastnících se strojích:

Výpis kódu 2.5: Spuštěnídistcc démona

(Přidání distccd do runlevelu default)
# rc-update add distccd default
(Spuštění distcc démona)
# /etc/init.d/distccd start

Nastavení spolupráce distcc s Automake

V některých případech je to jednodušší než nastavení Portage. Musíte jen změnit proměnnou PATH tak, aby obsahovala /usr/lib/distcc/bin před adresářem obsahujícím gcc (/usr/bin).Má to však háček - používáte-li ccache, musíte distcc dát do proměnné path až za ccache:

Výpis kódu 2.6: Nastavení cesty

# export PATH="/usr/lib/ccache/bin:/usr/lib/distcc/bin:${PATH}"
Chcete-li, aby se toto provedlo automaticky při každém přihlášení,
můžete tento řádek přidat do ~/.bashrc či podobného souboru.

Nyní již jen místo make volejte make -jN (kde N je celé číslo). Hodnota N záleží na Vaší síti a strojích, které ke kompilaci používáte. Pro nejvyšší výkon si vyzkoušejte vlastní nastavení.

3.  Cross-kompilace

Cross-kompilace znamená vytváření programů pro jednu architekturu pomocí stroje jiné architektury. Jednoduše můžete použít Athlon (i686) k výrobě programu pro K6-2 (i586) nebo použít SPARC k výrobě programu pro PPC. Pro více informací viz DistCC Cross-compiling Guide.

4.  Použití distcc během bootstrapu systému

Krok 1: konfigurace Portage

Nabootujte svůj stroj pomocí LiveCD Gentoo Linuxu a postupujte podle instalačních instrukcí až k bootsrappingu (pro další informace o bootstrappingu viz Gentoo FAQ). Pak nakonfigurujte Portage, aby používal distcc:

Výpis kódu 4.1: Předběžné nastavení

# nano -w /etc/make.conf
(Přidejte distcc do FEATURES)
FEATURES="distcc"
(Změňte MAKEOPTS tak, aby obsahovalo -jN, kde N je počet procesorů + 1)
MAKEOPTS="-jN"

Výpis kódu 4.2: Nastavení proměnné path

# export PATH="/usr/lib/ccache/bin:/usr/lib/distcc/bin:${PATH}"

Krok 2: instalace distcc

Před instalací distcc musíte přidat uživatele distcc do /etc/passwd:

Výpis kódu 4.3: Založení uživatele distcc

# echo "distcc:x:240:2:distccd:/dev/null:/bin/false" >>/etc/passwd

Důležité: Je důležité poznamenat, že přidat uživatele tímto způsobem je velmi špatné. Ale jinak to v této fázi nejde, chybí totiž program useradd, který normálně pro přidávání uživatelů používáme.

Instalace distcc:

Výpis kódu 4.4: Instalace distcc na novém stroji

# USE='-*' emerge --nodeps sys-devel/distcc

Krok 3: nastavení distcc

K nastavení distcc spusťte distcc-config --install:

Výpis kódu 4.5: Dokončení nastavení distcc

(Nahraďte host1, host2, ...  IP adresami účastnících se strojů)
# /usr/bin/distcc-config --set-hosts "localhost host1 host2 host3 ..."
Příklad: /usr/bin/distcc-config --set-hosts "localhost 192.168.0.4 192.168.0.6"

Distcc je teď připraven pro bootstrap! Můžete pokračovat v instalaci a řídit se normální instalační příručkou a nezapomeňte znovu nainstalovat distcc po emerge system. To zajistí konzistenci všech závislostí.

Poznámka: Během bootstrapu a emerge system se může stát, že distcc nebude použito. To je nutné, protože některé ebuildy s distcc neumí správně spolupracovat, takže jej schválně zakazují.

5.  Problémy

Některé balíčky distcc nepoužívají

Během instalace některých balíčků si možná všimnete, že některé z nich distcc nepoužívají, nejsou kompilovány paralelně. Je to tím, že vývojáři těchto ebuildů tuto funkci zakázali, neboť se o ní ví, že způsobuje problémy.

Občas distcc způsobí pád kompilace. Když se vám to stane, oznamte, prosím, chybu, uvítáme to.

Společné použití různých verzí GCC

Pokud máte na svých strojích různé verze GCC, budete mít divné potíže. Řešením je použití stejných verzí GCC na všech strojích.

Poslední verze Portage používají při kompilaci ${CHOST}-gcc místo gcc. To znamená, že při kombinaci i686 s jinými stroji (i386, i586) budete mít problémy. Mohlo by pomoci export CC='gcc' CXX='c++' nebo toto zadat do /etc/make.conf, ale chce to otestovat. Když se vám to povede, pošlete mi, prosím zprávu (Lisa Seelye).

6.  Něco navíc k distcc

Distcc monitory

Distcc je dodáván se dvěma monitory. První, textově orientovaný, se jmenuje distccmon-text. Jeho první spuštění může být trochu matoucí, ale ve skutečnosti je jeho používání jednoduché. Když jej spustíte bez parametrů, proběhne jen jedenkrát. Ale když mu dáte jako parametr číslo, bude zobrazovat informace každých N sekund kde N je parametr, který jste mu předali.

Druhý monitor je možné používat jen se zapnutou podporou gtk nebo gnome v USE proměnné, je totiž založen na podpoře GTK+, běží v prostředí X a je velmi roztomilý.

Výpis kódu 6.1: Spouštění monitorů

# distccmon-text N
(nebo)
# distccmon-gnome
Ke sledování využití distcc Portagem, můžete použít:
# DISTCC_DIR="/var/tmp/portage/.distcc/" distccmon-text N
(nebo)
# DISTCC_DIR="/var/tmp/portage/.distcc/" distccmon-gnome

Důležité: Pokud je adresář distcc někde jinde, musíte odpovídajícím způsobem změnit proměnnou DISTCC_DIR.



Tisk

Aktualizace: 24. prosinec 2006

Původní verze tohoto dokumentu již není udržována

Shrnutí: Tento dokument má být návodem, jak použít distcc v Gentoo.

Lisa Seelye
Autor

Mike Frysinger
Editor

Erwin
Editor

Sven Vermeulen
Editor

Lars Weiler
Editor

Tiemo Kieft
Korektor

Mirek Dvořák
Překladatel

Jan Kundrát
Překladatel

Donate to support our development efforts.

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