Блог coopht

Регистрация

coopht

Linux Maniac

<<< Удаление завершающих пробелов в Emacs.
gnat-gcc-4.4.3 в Gentoo Linux.>>>

Распределенная компиляция: Gentoo Ubuntu и distcc

На моей домашней машине стоит Gentoo Linux, а это значит я постоянно там что нибудь компиляю. Так вот я уже много всяких штук перепробовал для ускорения компиляции, таких как ccache, компиляция в оперативной памяти. И вот недавно, в связи с приобретением ноутбука, появилась возможность установить и настроить distcc для распределенной компиляции.

Итак что мы имеем:

1. Desktop :
  • AMD Athlon (tm) 64 3000+, 2 гб. оперативной памяти.
  • Gentoo Linux x86_64, 2.6.33 - linux kernel, gcc version 4.4.3
2. Laptop :
  • Intel(r) Core(tm) i3 CPU M 330, 2.13GHz, 3 гб. оперативной памяти.
  • Ubuntu Linux x86_64, 2.6.33 - linux kernel, gcc version 4.4.3
Для того, чтобы собранные с помощью distcc бинарники работали, необходимо, чтобы
первые две цифры в версии компилятора были одинаковыми.

Настройка Ubuntu.
Устанавливаем компиляторы и distcc:

sudo apt-get install gcc g++ distcc

Затем добавляем в файл /etc/distcc/hosts адрес хоста, на котором можно запускать кrомпиляцию и через "/" максимальное количество потоков, которое способен принять для компиляции компьютер:

echo "192.168.2.1/2" > /etc/distcc/hosts

Далее нужно настроить демон distcc который будет принимать файлы для компиляции от Desktop компьютера. Для этого редактируем файл /etc/default/distcc где устанавливаем какой интерфейс слушать, сколько работ может принимать хост для компляции и т.д. Вот пример моего файла конфигурации:

STARTDISTCC="true"
ALLOWEDNETS="127.0.0.1 192.168.2.1"
LISTENER="192.168.2.2"
NICE="10"
JOBS="4"

После этого запускаем демон distcc:

/etc/init.d/distcc start

Настройка Gentoo.
Устанавливаем distcc :

emerge -v distcc

Указываем список хостов, на которые передавать данные для компиляции и количество потоков:

/usr/bin/distcc-config --set-hosts "
192.168.2.1/2 192.168.2.2/4"

настраиваем демон distcc, добавляя в файл /etc/conf.d/distccd следующие строки:

DISTCCD_OPTS="${DISTCCD_OPTS} --allow 192.168.2.2"
DISTCCD_OPTS="${DISTCCD_OPTS} --listen 192.168.2.1"
DISTCCD_OPTS="${DISTCCD_OPTS} --jobs 2"


запускаем distcc:

/etc/init.d/distccd start

Для того, чтобы проверить, что все настроено правильно добавляем в Gentoo в файл /etc/make.conf строчку:

FEATURES="distcc"

и пробуем собрать какой нибудь пакет:

emerge dev-libs/glib

И в то же самое время, смотрим на Ubuntu файл логов distcc. Если все работает нормально, то сообщения должны быть примерно такими:

distccd[5791] (dcc_job_summary) client: 192.168.2.1:55352 COMPILE_OK exit:0 sig:0 core:0 ret:0 time:67ms x86_64-pc-linux-gnu-gcc /var/tmp/ccache/api.tmp.ZION.23853.i

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

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

distccd[4506] (dcc_execvp) ERROR: failed to exec x86_64-pc-linux-gnu-g++: No such file or directory.

Это сообщение появлялось из за того, что в Gentoo компилятор называется x86_64-pc-linux-gnu-g++ а в Ubuntu x86_64-linux-gnu-g++.
Чтобы это вылечить, нужно создать в каталоге /usr/bin/ символическую ссылку:

ln -s g++ x86_64-pc-linux-gnu-g++



http://lindev.blogspot.com/

Теги: distcc|gentoo|ubuntu