Итак что мы имеем:
1. Desktop :
- AMD Athlon (tm) 64 3000+, 2 гб. оперативной памяти.
- Gentoo Linux x86_64, 2.6.33 - linux kernel, gcc version 4.4.3
- 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
первые две цифры в версии компилятора были одинаковыми.
Настройка 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++
А возможна ли компиляция между разными архитектурами? Например, на одной машине x86, а на другой x86_64?
ОтветитьУдалитьА как это использовать в debian?
ОтветитьУдалитьУ меня сеть мощных рабочих станций под debian. Можно сказать, простаивает ;-)
Я хочу для того же debian и собирать пакеты.
Да компиляция возможна. Но у меня почему то пока не получается настроить между x86 и x86_64. Я как только настрою, расскажу как это сделать.
ОтветитьУдалитьВ теории все просто. Ставишь на машине кросс-компилятор (в Gentoo с помощью утилиты crossdev) и и вперед.
К сожалению я не большой знаток дебиана. Но в теории можно распределенно компилировать любой код, указав в качестве компилятора distcc
ОтветитьУдалитьнапример так:
CC=distcc make
А нужен ли distccd на генте? С убунты же врядли что-то будет компилиться?
ОтветитьУдалитьЕще стоить упомянуть pump-mode для distcc, дает еще больше скорости.
Кроскомпиляцию делал по http://www.gentoo.org/doc/en/cross-compiling-distcc.xml , но в данном случае crossdev нужно ствить на убунту же.
distccd на генте нужен, если хост с гентой тоже используется для компиляции. У меня как раз такой случай.
ОтветитьУдалитьПро pump-mode слышал, но пока времени нет до него добраться чтобы попробовать.