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 может привести к ошибкам при компиляции или выполнении.

Installing distcc
Distcc поставляется с графическим монитором для отслеживания заданий, отправляемых компьютером на компиляцию. Он включается с помощью USE-флага.

After configuring the  setting, install the  package:

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

First, make sure that is installed:

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

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

Не используйте  в переменных   и   своего. Если  установлен в , то   не сможет распределить работу по другим машинам. Подходящее значение для  можно найти в. Подробности можно найти на странице Inlining -march=native for distcc.

See Inlining -march=native for distcc for more information.

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

The following is an example list of host definitions. In most cases, variants of lines 1 and 2 suffice. More information about the syntax used in lines 3 and 4 can be found in the distcc manual page.

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

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

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

Отредактируйте в соответствии со своими нуждами и обязательно установите директиву , чтобы разрешить только те хосты, которым вы доверяете. Для усиления безопасности можно также добавить директиву, сообщив с её помощью демону 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:

Update the  variable in the installation session as well:

Шаг 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). Не используйте  и   в   и   при компиляции с.

Heed the following warning:

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

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

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

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

Ссылки

 * Inlining -march=native for distcc.