Distcc/ru

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

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

Зависимости
Для работы с 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).

Например, если ваш локальный двухъядерный компьютер связан с помощью distcc с двумя четырёхъядерными, то переменная  может выглядеть так:

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

Примеры задания хостов

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

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

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

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

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

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

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

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

Можно поместить это в или его эквивалент, чтобы PATH устанавливался при входе в систему.

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

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

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

Убедитесь также, что каждый из хостов есть в файле, и добавьте на этих хостах свой открытый ключ в файл. Хосты 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
Запустите  для установки 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