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 и следуйте инструкциям по установке до раздела про bootstraping. (Подробнее о bootstraping’е можно почитать в ЧаВо о Gentoo.) Затем настройте Portage для использования distcc:

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

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

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

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

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

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

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

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

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

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

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

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

Чтобы наблюдать за тем, как Portage использует distcc, можно запустить:

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


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