Distcc/ru

Distcc - это программа разработанная для распределения задач компиляции по сети принимающих участие в компиляции хостов. Она включает в себя сервер,  и клиентское приложение,. Distcc может прозрачно работать с ccache, Portage и Automake с небольшими настройками.

Если Вы планируете использование distcc для помощи в создании новой установки Gentoo с использованием существующего варианта системы (bootstrap), убедитесь, что Вы прочитали раздел Using Distcc to Bootstrap.

Зависимости
Чтобы использовать Distcc, все компьютеры в Вашей сети должны иметь одни и те же версии GCC. Например, смешивание 3.3.x (где x варьируется) вполне возможно, но смешивание 3.3.x с 3.2.x может привести к ошибкам компиляции или выполнения.

Установка Distcc
Есть пара возможностей, о которой Вам должно быть известно перед началом установки distcc.

Distcc поставляется с графическим монитором для просмотра задач, которые Ваш компьютер отправляет на компиляцию. Если Вы пользуетесь GNOME, то поместите 'gnome' в Ваши USE-флаги. Однако, если Вы не пользуетесь GNOME и все же хотите иметь монитор, то поместите 'gtk' в список Ваших USE-флагов.

Настройка Portage на использование Distcc
Настроить Portage на использование distcc легко. Выполните следующие шаги на каждой системе, которая принимает участие в распределенной компиляции:

Теперь установите переменные  и   как показано ниже. Общепринятой стратегией является установка N в два раза большим чем общее количество CPU (локальных и удаленных) + 1 и M как число локальных CPU. На случай если хосты distcc недоступны, или ebuild-файл требует только локальную компиляцию (напр., gcc), флаг  предотвратит запуск чрезмерно большого количества заданий.

Указание участвующих хостов
Используйте команду  для установки списка хостов. Здесь приведен пример некоторых хостов, которые могут быть в Вашем списке:

Примеры определения хоста

Также имеются несколько других методов для настройки хостов. За подробностями обратитесь к man-странице distcc.

Если Вы хотите компилировать на локальной машине, Вы должны поместить 'localhost' в список хостов. Наоборот, если Вы не хотите использовать локальную машину для компиляции (что является частым случаем), не включайте ее в список хостов. Использование localhost на медленной машине может фактически замедлить процесс. Убедитесь что Вы проверили настройки на производительность.

Это может выглядеть сложно, но в большинстве случаев вариант строки 1 или 2 будет работать.

Так как большинство людей не будут использовать строки 3 или 4, я обращаюсь к документации distcc (man distcc) за подробностями, которые включают возможность запуска distcc через SSH-соединение.

Например, чтобы установить первую строку из предыдущего примера:

Отредактируйте в соответствии с Вашими нуждами и установите директиву   чтобы разрешить только те хосты, которым Вы доверяете. Для дополнительной безопасности Вам также следует использовать директиву, чтобы сообщить демону distcc на каком IP необходимо слушать (для систем со множественной адресацией). Больше подробностей по безопасности distcc может быть найдено в Distcc Security Design.

Теперь запустите демон distcc на всех участвующих компьютерах:

Настройка Distcc на работу с Automake
Это, в некоторых случаях, легче, чем настройка Portage. Что Вам необходимо сделать, это обновить переменную  для включения  впереди каталога, который содержит. Однако, есть предостережение. Если Вы используете ccache, Вам нужно поместить distcc после части ccache:

Вы можете поместить это в Ваш или эквивалентный файл, чтобы PATH был установлен каждый раз когда Вы входите в систему.

Затем, в то время когда Вы обычно набираете, наберите   (где N - целое число). Значение N зависит от Вашей сети и типов компьютеров, которые Вы используете для компиляции. Протестируйте Ваши настройки для того, чтобы найти число, которое приводит к лучшей производительности.

Настройка Distcc на работу с ssh
Настройка distcc через ssh включает некоторые подводные камни, о которых Вам должно быть известно. Сначала сгенерируйте ключевую пару ssh без настройки пароля. Учтите что портеж компилирует программы в качестве пользователя portage. Домашний каталог пользователя portage -, что означает что ключи должны хранится в.

Во-вторых, сгенерируйте раздел для каждого хоста в файле конфигурации ssh:

Host test2 HostName 123.456.789.2 Port 1234 User UserName }}

Также, убедитесь что каждый из хостов доступен в файле и добавьте Ваш открытый ключ к файлу  на обоих хостах. Для настройки хостов test1 и test2 запустите

Пожалуйста, обратите внимание на знак '@', который указывает ssh хосты для.

Кросс-компиляция
Кросс-компиляция - это использование одной архитектуры для сборки программ для другой архитектуры. Это может быть так же просто как использование Athlon (i686) для сборки программы для K6-2 (i586) или использование Sparc для сборки программы для ppc. Это продокументировано в нашем Руководстве по кросс-компиляции Distcc.

Шаг 1: Настройка Portage
Загрузите Вашу новую машину с Gentoo Linux LiveCD и следуйте инструкциям по установке до раздела с bootstrap. (См. Gentoo FAQ для получения подробностей о сборке системы методом bootstrap.) Затем сконфигурируйте Portage для использования distcc:

Шаг 2: Установка Distcc
Установите distcc:

Шаг 3: Настройка Distcc
Run  to setup distcc; substitute   with the IP addresses or hostnames of the participating DistCC nodes.

Distcc is now set up to bootstrap! Continue with the official installation instructions and do not forget to re-emerge distcc after. This is to make sure that all of the dependencies you want are installed as well.

Some Packages Don't Use Distcc
As you emerge various packages, you'll notice that some of them aren't being distributed (and aren't being built in parallel). This may happen because the package's Makefile doesn't support parallel operations or the maintainer of the ebuild has explicitly disabled parallel operations due to a known problem.

Sometimes distcc might cause a package to fail to compile. If this happens for you, please report it to us.

Mixed GCC Versions
If you have different GCC versions on your hosts, there will likely be very weird problems. The solution is to make certain all hosts have the same GCC version.

Recent Portage updates have made Portage use  instead of. This means that if you're mixing i686 machines with other types (i386, i586) you will run into problems. A workaround for this may be to  or to put it in.

-march=native
Starting with GCC 4.3.0, the compiler supports the  switch which turns on CPU autodetection and optimizations that are worth being enabled on the processor the GCC is running at. This is a problem with  as it allows mixing of code optimized for different processors (like AMD Athlon and Intel Pentium). Don't use  or   in your   or   when compiling with.

To know the flags that GCC would enable when called with, execute the following:

Distcc Monitors
Distcc ships with two monitors. The text-based one is always built and is called. Running it for the first time can be a bit confusing, but it is really quite easy to use. If you run the program with no parameter it will run once. However, if you pass it a number it will update every N seconds, where N is the argument you passed.

The other monitor is only turned on if you enabled  or   in your   flags. This one is GTK+ based, runs in an X environment and it is quite lovely. For Gentoo the GUI monitor has been called  for less confusion. Elsewhere it may be referred to as.

or run :

To monitor Portage's distcc usage you can use:

Acknowledgements
We would like to thank the following authors and editors for their contributions to this guide:


 * Lisa Seelye
 * Mike Frysinger
 * Erwin
 * Sven Vermeulen
 * Lars Weiler
 * Tiemo Kieft
 * nightmorph