Распределенная компиляция (gentoo и не только)

Введение

Если у вас процессор архитектуры i686 (или amd64), то устанавливайте пакет sys-devel/distcc и сможете компилировать в несколько раз быстрее, используя другие компьютеры в локалке(Gentoo Linux), на которые также установлен и запущен демон distccd
p.s. Естественно, что мы ожидаем, что и вы позволите использовать ваш комп в этих же целях =)

Сами понимаете, это взаимовыгодно - когда кто-то не юзает свой комп, его комп вполне может быть использован в качестве помощника при компиляции

Настройка

Для информации по настройке distcc см. GENTOO DISTCC HOWTO, ну и конечно, обращайтесь ко всем нам :)

Можете обращаться к: BAleks, kir

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

Чтобы вы компилировали

  1. (для генту) в /etc/portage/make.conf добавьте FEATURES=«$FEATURES distcc»
    • (для не генту) как-нибудь по-другому сделайте, например export CC=distcc (может сработает)
  2. договоритесь с людьми из списка компов, чтобы они добавили вас в –allow в свой конфиг distcc (см. ниже)
  3. выполните команду distcc-config –set-hosts «localhost 10.0.9.11 10.0.15.32 …» (список компов, кого использовать при компилировании) 1)

Продвинутая информация

  • Откуда берется инфа о хостах:
    1. Переменная окружения DISTCC_HOSTS
    2. Файл конфигурации DISTCC_DIR/hosts (управляется с помощью distcc-config)
  • Как компилить ядро:
[user@system ~] export DISTCC_HOSTS="192.168.0.10"
[user@system ~] cd /usr/src/linux
[user@system ~] make CC="distcc" -j4

© http://gentoo-wiki.com/HOWTO_Compile_Kernel_With_Distcc_and_CCach

Чтобы следить за своей компиляцией

$ export DISTCC_DIR=/var/tmp/portage/.distcc        (по умолчанию в генту)
$ distccmon-text 1             (для текстового просмотра)
$ distccmon-gui                (для графического просмотра) (gentoo USE=gtk)

Чтобы через вас компилировали

  1. Настройте параметры запуска демона distccd.
    • Добавить –allow [host] … в параметры запуска демона.
    • В генту это в /etc/conf.d/distccd
  2. Запустите демон и настройте его для автоматического запуска.
    • В генту это: $ /etc/init.d/distccd start; rc-update add distccd default;
  3. Добавьте информацию о себе на эту страницу.
    • Версию distcc, версию gcc, архитектуру компьютера.

Таблица компилеров =)

Кросс-компиляция (между различными архитектурами)

Вы можете использовать для компиляции машины даже с архитектурой отличной от Вашей, но это требует некоторых дополнительных настроек. Связано это со следующей особенностью работы distcc: он пытается вызвать на удаленной машине тот же компилятор, что и на локальной машине. То есть, например, если Вы вызвали на i686 компилятор командой «g++», то на удаленной машине (допустим, AMD64) он то же вызовет «g++», но этот «g++» будет уже под AMD64.

Предположим, у Вас машина архитектуры i686 (известна как x86), а у предполагаемых компилеров-помошников amd64. Вот что нужно сделать:

На стороне compile-helper'ов

напомню, архитектура здесь amd64, а компилировать мы будем для i686!

  • установка пакета crossdev
# emerge crossdev
  • установка компиляторов и библиотек i686 (занимает довольно продолжительное время)
# crossdev -t i686

больше ничего на стороне сервера (помошника) делать не надо.

На стороне клиента

не ошибитесь: клиент это тот, кто запускает компиляцию (командой emerge), а следующие инструкции нет необходимости выполнять серверу (тот кто будет помогать компилировать)!

  • для начала попробуйте выполнить следующее
# cd /usr/lib/distcc/bin
# ls -l
total 0
drwxr-xr-x 2 root   root   4096 Июн  4 15:24 .
drwxr-xr-x 3 root   root   4096 Авг 23  2005 ..
lrwxrwxrwx 1 root   root     15 Авг 23  2005 c++ -> /usr/bin/distcc
lrwxrwxrwx 1 root   root     15 Авг 23  2005 cc -> /usr/bin/distcc
lrwxrwxrwx 1 root   root     15 Авг 23  2005 g++ -> /usr/bin/distcc
lrwxrwxrwx 1 root   root     15 Авг 23  2005 gcc -> /usr/bin/distcc
lrwxrwxrwx 1 root   root     15 Авг 23  2005 i686-pc-linux-gnu-c++ -> /usr/bin/distcc
lrwxrwxrwx 1 root   root     15 Авг 23  2005 i686-pc-linux-gnu-g++ -> /usr/bin/distcc
lrwxrwxrwx 1 root   root     15 Авг 23  2005 i686-pc-linux-gnu-gcc -> /usr/bin/distcc

Первые четыре ссылки не позволяют Вам вызывать корректный компилятор (речь об архитектуре) на стороне сервера. Попробуем это исправить.

  • удаляем ссылки
# rm c++ g++ gcc cc
  • затем создаем скрипт-обертку, файл i686-pc-linux-gnu-wrapper со следующим содержимым
#!/bin/bash
exec /usr/lib/distcc/bin/i686-pc-linux-gnu-g${0:$[-2]} "$@"
  • делаем скрипт исполняемым и добавляем корректные ссылки
# chmod a+x /usr/lib/distcc/bin/i686-pc-linux-gnu-wrapper
# ln -s /usr/lib/distcc/bin/i686-pc-linux-gnu-wrapper c++
# ln -s /usr/lib/distcc/bin/i686-pc-linux-gnu-wrapper cc
# ln -s /usr/lib/distcc/bin/i686-pc-linux-gnu-wrapper g++
# ln -s /usr/lib/distcc/bin/i686-pc-linux-gnu-wrapper gcc

Этот пример проверен точно в таком виде, как приведён здесь. Работает на 100%. С вопросами касательно настройки можно обращаться к любому compile-helper'у :) и, конечно, ко мне \\LSD

1) это запишется в файл /etc/distcc/hosts

Обсуждение

Ваш комментарий. Вики-синтаксис разрешён:
 
linux/distcc.txt · Последние изменения: Y-m-d H:i — 188.226.8.148
Наверх
CC Attribution-Noncommercial-Share Alike 3.0 Unported
Driven by DokuWiki Recent changes RSS feed Valid CSS Valid XHTML 1.0