Архив метки: distcc

Настройка Distcc

У меня есть достаточно старенький ноутбук Р3—700, 256 памяти, видео —  S3 Savage 8 мегабайт. На него я поставил Gentoo. По ходу чтения Хэндбука, наткнулся на описание distcc.

Цитата:

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

У меня в добавок к этому ноутбуку, есть еще 1 ноут — двухядерный с гигом памяти и такой же десктоп, на них установлен Debian Sid. Ну я и решил воспользоваться этим, все равно процессорные мощности пропадают

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

Также можно использовать ccache. Ccache — это быстрый кэш компилятора. Когда вы компилируете программу, он кэширует промежуточные результаты так, что всякий раз, когда вы перекомпилируете ту же самую программу, время компиляции значительно сокращается. В типичных случаях общее время компиляции может сокращаться в 5—10 раз.

Посмотреть версию компилятора можно командой

$ gcc —v

На компьютерах с Debian у меня установлен gcc версии 4,3, а на Gentoo — 4.1. Я решил использовать нестабильную ветку, чтобы в Gentoo тоже использовать gcc 4,3 и добавил в файл /etc/make.conf строчку

ACCEPT_KEYWORDS="~x86"

Далее обновляем список программ

# emerge —sync

Устанавливаем gcc

#emerge gcc

Устанавливаем distcc и ccache

# emerge distcc ccache

Добавляем в /etc/make.conf следующие строчки

##Вместо N укажите подходящее число для вашего случая
##Как правило это общее кол-во процессоров на всех компьютерах, умноженное
##на 2 и плюс 1
MAKEOPTS="-jN" ## К примеру у меня — 2 двухядерных + 1  старого ноутбука и еще ##+ 1 . Я выставляю —j11
##Добавим distcc в переменную FEATURES
FEATURES="distcc ccache"
##Установим директорию для временных файлов distcc
DISTCC_DIR="/tmp/.distcc"
CCACHE_SIZE="2G" #размер кэша ccache

Для проверки работоспособности ccache, запросите статистику ccache. Из-за того, что Portage использует другой домашний каталог ccache, также потребуется установить переменную CCACHE_DIR:

# CCACHE_DIR="/var/tmp/ccache" ccache -s

Далее, с помощью distcc-config добавляем IP адреса компьютеров, которые будут участвовать в сборке программ

Правим /etc/conf.d/distccd, добавляем разрешенный диапазон IP адресов. В данном случае — все компьютеры с IP адресом 192.168.1.х

DISTCCD_OPTS="${DISTCCD_OPTS} -allow 192.168.1.0/24"

# distcc-config —set-hosts "192.168.1.2 192.168.1.4"

В данном примере 192.168.1.2 — десктоп, а 192.168.1.4 — ноутбук. Ноутбук, на котором установлен Gentoo имеет IP 192.168.1.5

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

Устанавливаем distcc в Debian

# aptitude install distcc

Открываем файл /etc/default/distcc и меняем в нем следующие строки

STARTDISTCC="false"

на

STARTDISTCC="true"  - при этом значении distcc будет автоматически запускаться при включении компьютера

ALLOWEDNETS="192.168.1.0/24" – IP адреса, для которых разрешен доступ к distcc

И в строке LISTENER="127.0.0.1" меняем 127.0.0.1 на текущий IP адрес компьютера, на котором производится настройка.

В каталоге /etc/distcc/ создаем файлы clients.allow commands-allow.sh. Файл hosts уже должен находится там. Если нет, то точно также создаем его.

Записываем в clients.allow IP адреса, которым можно использовать демон — у меня это 192.168.1.5 — IP старого ноутбука.

В commands-allow.sh прописываем пути до копиляторов, которые может использовать демон

allowed_compilers="
/usr/bin/cc
/usr/bin/c++
/usr/bin/gcc
/usr/bin/g++
/usr/bin/i486-pc-linux-gnu-gcc
/usr/bin/i486-pc-linux-gnu-g++"

В файл hosts пишем те же IP, что и в clients.allow

Переходим в каталог /usr/bin

# cd /usr/bin

И делаем символические ссылки на gcc-4,3 и g++-4,3

# ln —s gcc-4,3 i486-pc-linux-gnu-gcc

# ln —s g++-4,3 i486-pc-linux-gnu-g++

Все, теперь можно запускать distcc на компах с Debian

# /etc/init.d/distcc start

Результаты работы distcc можно посмотреть в логах на Debian машинах в файле /var/log/distcc.log или использовать команду distccmon-text на машине с Gentoo.

Отдельное спасибо пользователям ЛОР’a, особенно Silvy, которые помогли в решении данной задачи