Gentoo Logo

Предупреждение : Этот документ находится в разработке, и его пока не следует считать официальным.


Описание distcc в Gentoo

Содержание:

1.  Введение

Что такое distcc?

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

2.  Установка

Необходимые условия

Основным условием является наличие компилятора gcc одинаковой версии на всех компьютерах, которые вы планируете использовать. Можно использовать разные версии ветки 3.3.х, где х меняется, но нельзя объединять 3.3.х и 3.2.х, иначе в ваших программах обязательно будут ошибки.

Установка distcc

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

В пакет distcc также входит графический монитор для наблюдения за состоянием задач, которые ваш компьютер послал другим компьютерам. Если вы используете Gnome, то не забудьте написать 'gnome' в ваших флагах USE (в файле /etc/make.conf). В любом случае, даже если вы не используете Gnome, но желаете иметь эту мониторинговую утилиту (она замечательно работает, в том числе и под KDE), укажите 'gtk' в ваших флагах USE.

Листинг 2.1: Установка distcc

# emerge distcc

Настройка системы портежей Gentoo для использования ее совместно с distcc

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

Листинг 2.2: Подключение distcc к системе портежей

# emerge distcc
# nano -w /etc/make.conf
(Вместо N укажите подходящее число для вашего случая)
Как правило это общее кол-во процессоров на всех компьютерах, умноженное
на 2 и плюс 1
MAKEOPTS="-jN"
(Добавим distcc в переменную FEATURES)
FEATURES="distcc"
(Установим директорию для временных файлов distcc)
DISTCC_DIR="/tmp/.distcc"

Далее вам необходимо указать компьютеры, которые вы намерены задействовать. Используйте для этого утилиту distcc-config. Например, список компьютеров может быть таким:

Листинг 2.3: Примеры определения хостов

192.168.0.1          192.168.0.2                       192.168.0.3
192.168.0.1/2        192.168.0.2                       192.168.0.3/10
192.168.0.1:4000/2   192.168.0.2/1                     192.168.0.3:3632/4
@192.168.0.1         @192.168.0.2:/usr/bin/distccd     192.168.0.3
(Есть еще несколько способов установить список хостов. См. man distcc)

Поначалу может показаться, что это очень сложно, но на самом деле в большинстве случаев сойдет вариант первой или второй строки.

  • первая строка - это просто список хостов, разделенных пробелами
  • вторая строка указывает максимальное количество задач (параметр /N), которые можно послать машине в любой момент времени

Так как большинству пользователей не понадобятся строки 3 или 4, я отправлю вас к документации по distcc за более подробной информацией.

Чтобы установить первую строку из этого примера:

Листинг 2.4: Образец команды для установки списка хостов

# /usr/bin/distcc-config --set-hosts "192.168.0.1 192.168.0.2
# 192.168.0.3"

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

Листинг 2.5: Запуск distcc демона

(Добавим distccd в default runlevel)
# rc-update add distccd default
(Запуск distcc демона)
# /etc/init.d/distccd start

Настройка distcc для работы с Automake

Все, что вам необходимо сделать для этого, так это установить переменную PATH так, чтобы директория /usr/lib/distcc/bin была перед директорией, содержащей gcc (обычно это /usr/bin). Однако есть один нюанс: если же вы используете ccache, то директорию с distcc необходимо указывать после директории, содержащей ccache:

Листинг 2.6: Установка PATH

# export PATH="/usr/lib/ccache/bin:/usr/lib/distcc/bin:${PATH}"

Теперь, если ранее вы вводили make, теперь пишите make -jN где N - это число, зависящее от вашей сети и типов компьютеров, которые вы будете использовать для распределенной компиляции. Например, автор этой статьи имеет машину с двумя процессорами P3, а также машину K6-2/400, которые работают в качестве distcc-серверов, а клиентом является третий компьютер (1200MHz Athlon Thunderbird). Автор использует -j5. Попробуйте в качестве N подставлять различные числа, и методом экспериментов выберите оптимальное значение.

3.  Кросс-компилирование

Что такое кросс-компилирование?

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

Дополнительное замечание по кросс-компилированию (от автора)

Я бы с удовольствием поэкспериментировал с кросс-компиляцией, но у меня все машины архитектуры x86. Я могу делать вещи, которые работают в теории, что же касается практики, то мне приходится доверять тестам других людей. Это работает, но до определенного предела.

4.  Использование distcc для bootstrap

Шаг 1: Настройка системы портежей

Загрузитесь с Gentoo Linux LiveCD, следуя указаниям по установке, вплоть до части, посвященной bootstrap. Далее мы настроим систему портежей:

Листинг 4.1: Настройка системы портежей

# nano -w /etc/make.conf
(Добавим distcc в переменную FEATURES)
FEATURES="distcc"
(Установим директорию для временных файлов distcc)
DISTCC_DIR="${PORTAGE_TMPDIR}/.distcc"
(Изменим MAKEOPTS соответствующим -jN, где N - число, описанное выше)
MAKEOPTS="-jN"

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

Листинг 4.2: Установка distcc

# USE='-*' emerge --nodeps distcc

Шаг 3: Настройка distcc

Добавим пользователя "distcc" в файл /etc/passwd и запустим distcc-config для настройки distcc:

Листинг 4.3: Окончательная настройка distcc

# echo "distcc:x:240:2:distccd:/dev/null:/bin/false" >> /etc/passwd
(Замените host1, host2, ... IP-адресами реальных компьютеров)
# /usr/bin/distcc-config --set-hosts "localhost host1 host2 host3 ..."

distcc готов к использованию для bootstrap! Теперь можно продолжать инсталляцию Gentoo как обычно, но не забудьте пересобрать distcc (emerge distcc) после emerge system. Это нужно для того, чтобы все необходимые зависимости были также корректно установлены.

Примечание: Во время bootstrap в процессе emerge system distcc иногда может и не использоваться. Это нормально, так как некоторые ebuild'ы, которые заведомо не могут работать с distcc, не используют его намеренно во избежание ошибок.

5.  Возможные проблемы

Mozilla и XFree

В процессе сборки некоторых пакетов вы можете заметить, что их компиляция не распределяется. Это возможно в том случае, когда разработчики принудительно отключают использование distcc (например, Mozilla и XFree), потому что уже известно, что распределенная сборка таких пакетов приводит к определенным проблемам.

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

Смесь hardened-gcc и non-hardened-gcc заведомо приведет к ошибке!

Название абзаца говорит само за себя, дополнительные комментарии, в общем-то, не требуются. Если некоторые ваши хосты используют PaX/hardened-gcc (англ.), а некоторые - нет, то это приведет к проблемам.

Решение заключается в следующем: либо вы используете hardened-gcc -R на хосте, который имеет PaX/hardened-gcc, либо вы включаете PaX protections в ядре, а затем emerge hardened-gcc. В общем-то, оба варианта хороши, так как устанавливают защиту невидимо для пользователя.

Смешивание различных версий компилятора gcc.

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

6.  Дополнительные возможности

Мониторинг distcc

Как уже говорилось выше, distcc поставляется с двумя мониторами. Первый из них, текстовый монитор, компилируется всегда вместе с distcc и называется distccmon-text. Программа элементарна в использовании, хотя на первый взгляд может показаться немного мудреной. Если вы запустите ее без параметров, она однократно покажет состояние distcc и закончит свою работу. Если же вы запустите ее с параметром N (число), то программа будет выдавать состояние distcc каждые N секунд.

Второй монитор доступен только при условии, что у вас включены gtk или gnome во флагах USE. Этот монитор имеет графический интерфейс на GTK+, и, надо заметить, очень симпатичный.

Листинг 6.1: Образцы запуска мониторов

# distccmon-text 0.5
(или)
# distccmon-gnome

7.  Планы Gentoo на будущее в отношении distcc

distcc-subnetscan

distcc-subnetscan - это скрипт, написанный на perl (в данное время разработка окончательно не завершена), который сканирует заданную подсеть на предмет наличия компьютеров с запущенным и доступным демоном distccd. В будущем эта утилита также сможет проверять соответствие переменной CHOST с целью упростить кросс-компилирование.

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



Для печати

Обновлено 12 мая 2004

Исходный документ обновлен 14 июня 2009

Аннотация: Этот документ представляет собой HOWTO по использованию distcc в Gentoo.

Lisa Seelye
автор

Mike Frysinger
редактор

Erwin
редактор

Sven Vermeulen
редактор

Tiemo Kieft
рецензент

Вячеслав Черноусов
переводчик

Сергей Кулешов
редактор

Donate to support our development efforts.

Copyright 2001-2012 Gentoo Foundation, Inc. Questions, Comments? Contact us.