Gentoo Logo

Praca z distcc w Gentoo

Spis treści:

1.  Wprowadzenie

Co to jest distcc?

Distcc to program przeznaczony do dystrybucji kompilacji przez sieć do innych komputerów. Składa się z serwera distccd i programu klienta distcc. Po odpowiednim skonfigurowaniu Distcc może pracować transparentnie wraz z ccache, Portage i Automake.

Używanie distcc do bootstrapu

Jeśli distcc ma pomóc podczas instalacji Gentoo na etapie bootstrapu, należy najpierw przeczytać akapit Używanie distcc do bootstrapu, który znajduje się w dalszej części tego dokumentu.

2.  Instalacja

Wymagania

Aby możliwe było skorzystanie z Distcc, wszystkie komputery w sieci muszą posiadać tę samą wersję GCC. Mieszanie kompilatorów w wersjach 3.3.x (gdzie zmienia się x) jest w porządku, jednak mieszanie 3.3.x z 3.2.x może przynieść niepożądany rezultat w postaci błędów podczas kompilacji lub uruchomienia.

Instalacja distcc

Jest kilka rzeczy z którymi należy się zapoznać przed rozpoczęciem instalacji distcc.

Distcc dostarczane jest wraz z graficznym monitorem do nadzorowania zadań, które komputer rozsyła do kompilacji. Jeśli używane jest środowisko Gnome, należy dodać flagę 'gnome' do zmiennej USE. Jeśli Gnome nie jest używany, nadal można używać graficznego monitora poprzez dodanie flagi 'gtk'.

Listing 2.1: Instalacja distcc

# emerge distcc distcc-config

Ważne: Distcc musi zostać zainstalowane na wszystkich komputerach biorących udział w budowaniu programów.

Konfiguracja Portage do współpracy z distcc

Konfiguracja Portage tak, aby korzystał z distcc jest łatwa. Należy wykonać następujące czynności na każdym systemie, który będzie brał udział w dystrybucji kompilacji:

Listing 2.2: Integracja distcc z Portage

# emerge distcc
# nano -w /etc/make.conf
(Należy podmienić N liczbą odpowiednią dla danej konfiguracji)
(Najczęściej N to podwojona liczba dostępnych procesorów + 1)
MAKEOPTS="-jN"
(Trzeba dodać distcc do zmiennej FEATURES)
FEATURES="distcc"

Wybieranie komputerów do pracy distcc

Należy użyć polecenia distcc-config, aby ustawić listę komputerów. Poniżej przykład kilku wpisów które mogłyby się znaleźć na takiej liście:

Listing 2.3: Przykład definicji komputerów

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
(Istnieje także kilka innych metod ustawienia komputerów. Więcej informacji
można znaleźć w podręczniku - man distcc)
Jeśli zamierzamy kompilować także na lokalnej maszynie należy dodać do
tej listy wpis 'localhost'. Oczywiście jeśli nie chcemy kompilować na
lokalnej maszynie (co jest bardzo częste) należy pominąć ten wpis. Na wolnych
maszynach użycie wpisu localhost może tylko spowolnić proces kompilacji. Należy
przetestować swoje ustawienia pod kątem wydajności

To może wyglądać skomplikowanie, ale w większości przypadków zadziała wariant z linii 1 lub 2.

Jako że większość ludzi nie będzie używać linii 3 i 4, po więcej informacji odwołamy się do dokumentacji distcc (man distcc).

Ustawienie przykładu z pierwszej linii:

Listing 2.4: Przykładowe polecenie ustalające listę komputerów

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

Należy dostosować do konkretnych potrzeb plik /etc/conf.d/distccd upewniając się, że użyta jest dyrektywa --allow, co umożliwi dostęp tylko zaufanym komputerom. Dla zwiększenia bezpieczeństwa, należy także użyć dyrektywy --listen, aby powiedzieć demonowi distcc na jakim adresie IP ma nasłuchiwać (dla systemów z wieloma adresami IP). Więcej informacji o bezpieczeństwie w distcc można znaleźć w zarysie bezpieczeństwa w distcc.

Ważne: Użycie --allow i --listen jest kluczowe. Aby uzyskać więcej informacji, należy przeczytać dokumentację man programu distccd lub powyższy dokument o bezpieczeństwie.

Teraz trzeba uruchomić demona distcc na wszystkich komputerach:

Listing 2.5: Uruchamianie demona distcc

(Uruchamianie distcc starcie systemu)
# rc-update add distccd default
(Uruchomienie demona distcc)
# /etc/init.d/distccd start

Konfiguracja distcc do pracy z automake

W niektórych przypadkach jest to łatwiejsze niż konfiguracja z Portage. Jedyne co trzeba zrobić to zmiana zmiennej PATH tak, aby zawierała ścieżkę /usr/lib/distcc/bin przed katalogiem zawierającym gcc (/usr/bin). Jednakże jest pewien wyjątek. Jeśli używane jest ccache należy dodać distcc zaraz po ccache:

Listing 2.6: Ustawianie zmiennej path

# export PATH="/usr/lib/ccache/bin:/usr/lib/distcc/bin:${PATH}"
Można to dodać do swojego pliku ~/.bashrc lub jego odpowiednika by
mieć ustawianą zmienną PATH przy każdym logowaniu

Następnie zamiast normalnego wywołania make, należy wpisać make -jN (gdzie N jest liczbą całkowitą). Wartość liczby N zależy od konfiguracji sieci oraz rodzaju komputerów użytych do kompilacji. Trzeba przetestować różne ustawienia by znaleźć te najbardziej optymalne pod względem wydajności.

3.  Kompilacja skrośna

Kompilacja skrośna to używanie jednej architektury do kompilacji programów dla innej. Może być to np. użycie Athlona (i686) do kompilacji programu na K6-2 (i586) albo użycie SPARC-a do kompilacji programu dla PPC (Power PC). Na temat kompilacji skrośnej można poczytać w Przewodniku kompilacji skrośnej za pomocą DistCC.

4.  Używanie distcc do bootstrapu

Krok 1: konfiguracja Portage

Należy uruchomić komputer z nowym Gentoo LiveCD i postępować zgodnie z Podręcznikiem instalacji Gentoo aż do części dotyczącej bootstrapu (Więcej informacji na temat bootstrapu można znaleźć w odpowiedziach na najczęściej zadawane pytania). Następnie trzeba skonfigurować Portage do pracy z distcc:

Listing 4.1: Wstępna konfiguracja

# nano -w /etc/make.conf
(Dodanie distcc do zmiennej FEATURES
FEATURES="distcc"
(Modyfikacja zmiennej MAKEOPTS by zawierałą -jN, gdzie N to 2 razy
liczba dostępnych procesorów +1)
MAKEOPTS="-jN"

Listing 4.2: Ustawienie zmiennej path

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

Krok 2: instalacja distcc

Instalacja distcc:

Listing 4.3: Instalacja distcc w nowym systemie

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

Krok 3: Konfiguracja distcc

Trzeba uruchomić polecenie distcc-config --install:

Listing 4.4: Końcowa konfiguracja distcc

(Należy podmienić host1, host2, ... adresami IP odpowiednich komputerów)
# /usr/bin/distcc-config --set-hosts "localhost host1 host2 host3 ..."
Na przykład: /usr/bin/distcc-config --set-hosts "localhost
192.168.0.4 192.168.0.6"

Teraz distcc jest skonfigurowane do bootstrapu! Należy kontynuować oficjalną instrukcję instalacji i nie zapomnieć ponownie zainstalować distcc zaraz po emerge system. Zapewni to poprawną instalację wszystkich pakietów wymaganych przez distcc.

Uwaga: Podczas bootstrapu i emerge system może się wydawać że distcc nie jest używane. Jest to pożądane zachowanie jako że niektóre ebuildy nie współpracują z distcc, więc go wyłączają.

5.  Rozwiązywanie błędów

Nie wszystkie pakiety korzystają z distcc

Podczas instalacji różnych pakietów można zauważyć że niektóre nie są rozsyłane (i nie są budowane współbieżnie). Dzieje się tak, ponieważ niektóre pliki Makefile programów po prostu nie potrafią współpracować z równoległymi kompilacjami i twórcy ebuildów do tych programów muszą wyłączać tę możliwość.

Czasem distcc może spowodować, że pakiet nie chce się skompilować. Jeśli tak się zdarzy, należy to zgłosić.

Mieszanie wersji GCC

Jeśli na naszych komputerach zainstalowane są różne wersje GCC, prawdopodobnie będzie wiele dziwnych problemów. Rozwiązaniem jest zapewnienie że wszystkie systemy będą miały tą samą wersję GCC.

Ostatnie aktualizacje Portage sprawiły, że używa on ${CHOST}-gcc zamiast gcc. Oznacza to że jeśli używamy maszyn i686 z innymi typami (i386, i586) szybko wpadniemy w kłopoty. Rozwiązaniem tego może być wykonanie poleceniaexport CC='gcc' CXX='c++' lub wpisanie go na stałe do /etc/make.conf.

Ważne: Wykonanie powyższego polecenia zmienia zachowanie Portage i może nieść za sobą dziwne rezultaty w przyszłości. Należy robić to tylko wtedy, gdy miesza się różne ustawienia CHOST.

-march=native

W wersji GCC 4.3.0 pojawiła się obsługa przełącznika -march=native, który sam wykrywa typ procesora i włącza dla niego najlepsze ustawienia. Niestety przełącznik ten może sprawiać problemy przy pracy z distcc, gdyż może prowadzić do pomieszania kodu zbudowanego dla dwóch róznych procesorów (np. AMD i Pentium). Dlatego nie należy używać -march=native lub -mtune=native w CFLAGS i CXXFLAGS gdy buduje się za pomocą distcc.

6.  Dodatki do distcc

Monitory distcc

Distcc dostarczane jest z dwoma monitorami. Pierwszy, działający w trybie tekstowym jest instalowany zawsze i nazywa się distccmon-text. Pierwsze jego uruchomienie może wprowadzić w zakłopotanie, ale jest on naprawdę całkiem łatwy w użyciu. Jeśli zostanie uruchomiony bez żadnych parametrów uruchomi się raz. Jednakże jeśli poda mu się jako argument liczbę, będzie odświeżał ekran co określoną liczbę sekund.

Kolejny program monitorujący jest instalowany tylko wtedy gdy mamy ustawioną w zmiennej USE którąkolwiek z flag gtk lub gnome. Oparty jest on na GTK+, działa w środowisku X i ma bardzo ładny wygląd. W Gentoo ten monitor nazwany został distccmon-gui. W innych źródłąch może być nazywany distccmon-gnome.

Listing 6.1: Uruchamianie monitorów

# distccmon-text N
(lub)
# distccmon-gui
Aby nadzorować zachowanie distcc z Portage można użyć:
# DISTCC_DIR="/var/tmp/portage/.distcc/" distccmon-text N
(lub)
# DISTCC_DIR="/var/tmp/portage/.distcc/" distccmon-gui

Ważne: Jeśli katalog distcc ma inną lokalizacje, należy odpowiednio ustawić zmienną DISTCC_DIR.



Drukuj

Zaktualizowano 7 kwietnia 2008

Oryginalna wersja tego dokumentu została po raz ostatni zaktualizowana 14 czerwca 2009. Jeśli chcesz pomóc w aktualizacji tego dokumentu do najnowszej wersji, skontaktuj się z Łukaszem Damentko, koordynatorem polskiego projektu tłumaczeń dokumentacji Gentoo.

Podsumowanie: Dokument opisujący konfigurację i pracę z distcc w Gentoo.

Lisa Seelye
Autor

Mike Frysinger
Redaktor

Erwin
Redaktor

Sven Vermeulen
Redaktor

Lars Weiler
Redaktor

Tiemo Kieft
Korekta

Wojciech Baran
Tłumaczenie

Waldemar Korłub
Tłumaczenie

Donate to support our development efforts.

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