Distcc v Gentoo
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
MAKEOPTS="-jN"
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
|
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 |
# rc-update add distccd default
# /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}"
|
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
FEATURES="distcc"
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 |
# /usr/bin/distcc-config --set-hosts "localhost host1 host2 host3 ..."
|
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
# distccmon-gnome
# DISTCC_DIR="/var/tmp/portage/.distcc/" distccmon-text N
# 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.
|
Obsah tohoto dokumentu je licencován pod licencí Creative Commons -
Attribution / Share Alike.
|