Distcc/ru

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

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

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

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

Distcc поставляется с графической программой для просмотра заданий, отправляемых компьютером на компиляцию, которая включается с помощью 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:

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

Please note the '@'-sign, which specifies ssh hosts for.

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

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

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

Шаг 3: Настройка Distcc
Запустите  для установки distcc; замените   на IP-адреса или имена хостов принимающих участие в компиляции узлов DistCC.

Distcc теперь настроена на bootstrap! Продолжайте следовать инструкциям официальной установки и не забудьте заново собрать distcc после. Это нужно для того, чтобы убедиться, что все зависимости, которые Вам требуются, также установлены.

Некоторые пакеты не используют Distcc
Во время установки различных пакетов, Вы можете заметить что некоторые из них не являются распределяемыми (и не собираются параллельно). Это может произойти потому что Makefile пакета не поддерживает параллельные операции или мейнтейнер ebuild-файла явно отключил параллельные операции вследствие известной проблемы.

Иногда distcc может вызвать сбой компиляции пакета. Если это происходит у Вас, пожалуйста, сообщите нам об этом.

Смешанные версии GCC
Если Вы имеете разные версии GCC на Ваших хостах, могут возникнуть очень странные проблемы. Решением является проверка того, что все хосты имеют одну и ту же версию GCC.

Недавние обновления Portage настроили Portage на использование  вместо. Это означает, что если Вы смешиваете машины i686 с другими типами (i386, i586), у Вас могут появиться проблемы. Временным решением может быть запуск команды  или поместить это в.

-march=native
Начиная с GCC 4.3.0, компилятор поддерживает  переключатель, который включает автоматическое обнаружение CPU и оптимизации, которые стоит включить на процессоре, на котором запущен GCC. Это является проблемой для, так как это позволяет смешивать код, оптимизированный для разных процессоров (например, AMD Athlon и Intel Pentium). Не используйте  или   в   или   при компиляции с.

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

Мониторы Distcc
Distcc поставляется с двумя мониторами. Текстовый монитор собирается всегда и называется. Запуск его в течение первого времени может слегка запутать, но на самом деле его достаточно просто использовать. Если Вы запускаете программу без параметра, она запустится один раз. Однако, если Вы передаете ей число, она будет обновляться каждые N секунд, где N - это переданный аргумент.

Другой монитор включается только при включении USE-флага. Этот монитор основан на GTK+, запускается в окружении X и достаточно приятен в использовании. В Gentoo GUI-монитор называется, чтобы устранить путаницу. В других местах он может называться.

или запустите :

Чтобы наблюдать за использованием портежем distcc, Вы можете использовать

Благодарности
Мы хотели бы поблагодарить следующих авторов и редакторов за их вклад в это руководство:


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