Distcc
Материал из Belgorod Linux User Group - Белгород.
Содержание |
[править] Вступление
Технология, позволяющая производить распределенную сборку пакетов компилятором 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 на сервере и клиенте.

