Distcc

Материал из Belgorod Linux User Group - Белгород.

Версия от 07:33, 1 февраля 2010; 107 (Обсуждение | вклад)
(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к: навигация, поиск

Содержание

[править] Вступление

Технология, позволяющая производить распределенную сборку пакетов компилятором gcc по сети.

На всех серверах и клиентах желательно использовать одну и ту же версию gcc (и по возможности distcc).

[править] Сервер

Ставим:

emerge distcc

В файле конфигурации разрешаем подсеть, которую будет обслуживать сервер:

vim /etc/conf.d/distccd
DISTCCD_OPTS="${DISTCCD_OPTS} --allow 172.32.0.0/16"

Добавляем в автозапуск и запускаем:

rc-update add distccd default
/etc/init.d/distccd start

[править] Клиент

в /etc/make.conf

# собирать на 10 процессорах (включая удаленные), но load averrage не превышать 4
MAKEOPTS="-j10 -l4"
# использовать distcc
FEATURES="${FEATURES} distcc"
# для ведения статистики distccmon-text
DISTCC_DIR="/tmp/.distcc"

в /etc/profile

 if [ "$EUID" = "0" ] || [ "$USER" = "root" ] ; then
       PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:${ROOTPATH}"
+       PATH="/usr/lib/distcc/bin:${PATH}"
 else

По умолчанию используется только localhost:

distcc-config --get-hosts 

Выставляем еще из сети:

distcc-config --set-hosts "localhost s1.distcc.lan s2.distcc.lan s3.distcc.lan s4.distcc.lan s5.distcc.lan s6.distcc.lan"

Для 64-битных можно вынести отдельный список серверов, все равно 32-битные для них код собирать не умеют.

distcc-config --set-hosts "localhost s1.64.distcc.lan s2.64.distcc.lan s3.64.distcc.lan s4.64.distcc.lan s5.64.distcc.lan"
  • Не забыть прописать эти имена в DNS

К примеру так:

*.distcc            CNAME   server1.lan.
s2.distcc            CNAME   main.lan.

[править] Проблемы

Если пакет не собирается, выдавая ошибку типа:

undefined reference to `__builtin_va_arg_pack’
  • Проверьте версию gcc и distcc на сервере и на клиенте.

Должны совпадать.

  • Добавьте в CFLAGS, CXXFLAGS параметр
-fstack-protector
  • Попробуйте собрать без DISTCC:
FEATURES="-distcc" emerge syslog-ng

Возможно разногласие во флагах CFLAGS на сервере и клиенте.