distcc

установил на двух машинах distcc, запустил, хосты разрешил, но во время компиляции выдает
distcc[14080] (dcc_build_somewhere) Warning: failed to distribute, running locally instead
в это время на второй машине netstat выдает соединение но time_whit

файрвол не режет трафик? Вот

файрвол не режет трафик?

Вот это делали?

Edit /etc/conf.d/distccd to your needs and be sure to set the --allow directive to allow only hosts you trust. For added security, you should also use the --listen directive to tell the distcc daemon what IP to listen on (for multi-homed systems).

трафик не режется, в конфиге

трафик не режется, в конфиге --allow на подсеть прописал
Странно только что при запуске на одной из машин пишется:
gentoo init.d # ./distccd start
* Starting distccd ...
./distccd: line 20: command not found
./distccd: line 20: 01m*: command not found
./distccd: line 21: [1]: command not found [ ok ]
gentoo init.d #

хотя после этого демон работает....

toxa__

toxa__ написал(а):
./distccd: line 20: command not found
./distccd: line 20: 01m*: command not found

По тому, что в /etc/conf.d/distcc
вы указываетет:
--log-level critical"
--log-level critical"
, а надо:
DISTCCD_OPTS="${DISTCCD_OPTS} --log-level critical"
DISTCCD_OPTS="${DISTCCD_OPTS} --log-file /var/log/distccd.log"

тоже самое с allow и listen.

P.S. Я вот не могу понять, --listen это локальный адрес или удаленной машины?
Насколько я понимаю здесь указываеться адрес локального итерфейса, на который принимаються запросы.
Прав ли я?

greenif написал(а): Я вот не

greenif написал(а):
Я вот не могу понять, --listen это локальный адрес или удаленной машины?
Насколько я понимаю здесь указываеться адрес локального итерфейса, на который принимаються запросы.
Прав ли я?

Да, абсолютно прав - это указываются адреса на машине, на которых слушать серверу distcc

А чего пример конфига?

А чего пример конфига не выложили?
Выложили бы чтобы остальные посмотрели...

да, к стати. и по wiki и по примерам настройки делал. не пашет. ни на одном компе.
ошибок ни одной, порты прослушиваются, со стороны всё отлично, кроме того, что при сборке пакета distcc говорит - невозможно передать задание на другие компы, работаем локально... у кого-нибудь была подобная ситуация?

Ну вроде вот так:

# /etc/make.conf
FEATURES="distcc ccache"
DISTCC_DIR="/tmp/.distcc"
# /etc/distcc/hosts
192.168.1.2/5 192.168.1.3/3 ; локальный хост/число потоков компиляции, удаленный хост/число потоков
# /etc/conf.d/distccd: config file for /etc/init.d/distccd
DISTCCD_OPTS=""
DISTCCD_EXEC="/usr/bin/distccd"
DISTCCD_PIDFILE="/var/run/distccd/distccd.pid"
DISTCCD_OPTS="${DISTCCD_OPTS} --port 3632"
DISTCCD_OPTS="${DISTCCD_OPTS} --log-level critical"
DISTCCD_OPTS="${DISTCCD_OPTS} --allow 192.168.1.0/24" ; разрешить доступ для подсети
DISTCCD_OPTS="${DISTCCD_OPTS} -N 15"

второй конфиг такой же, только хосты местами поменяны

Цитата:
сборка Кедов на удаленной машине (kde-base/kde-meta)с помощью сабжа в 8 потоков,
3 локальных, 5 сетевых. Сжатие не включено.
Статистика 27-02-2010:
Отправлено : 11,365 Гб
Получено : 612,28 Мб
Всего : 11,977 Гб

Ситуация такая - собирает распределенно все что может, но периодически отказывается и гонит локально,
через 1-2 задания опять распределяет. Напрягает не сильно, собирается все правильно, ошибок нет.
Выигрыш очевиден, может локальный адрес указать 127.0.0.1? (не пробовал, все собрано и обновлено)

Gentoo - Symphony of Creations

Вот-вот. Все так же и у меня

Вот-вот. Все так же и у меня было настроено. Только у меня было 4 хоста с distccd + пятый моя десктопная тачка. Работало все на раз-два-три без проблем. Но именно с четвертыми кедами была засада, такие чудеса творились...
Например:
1. Вылетает на этапе configure. Ругается на отсутствие библиотеки, которая точно в системе есть. Запускаешь повторно, собирается как ни в чем не бывало.
2. Вылетает в процессе сборки по совершенно непонятной ошибке (ругается на отсутствие файла .h), который точно есть там, где он должен быть. После перезапуска опять же собирается нормально.

Что я тогда нарыл:
Оказалось, что с cmake у distcc очень интересное взаимодействие. Если сборка производится не cmake, то этап configure выполняется исключительно локально, сборка - распределенно. А cmake и configure, и сборку делает распределенно.
У меня было четыре хоста с distccd, на которых нет ничего, связанного с иксами вообще. Это машины, используемые для совершенно других задач, и я хотел использовать их процессорное время во время простоя для ускорения сборки кед. Но поскольку configure выполняется распределенно, то очень вероятны либо ошибки конфигурирования, либо неверные его результаты. А значит, и сборка может получиться какая попало.
Вот что интересно... Кто-то в курсе, как cmake подружить с distcc? Или за год эта проблема уже решена?

Нет, у меня не так все печально

Всмысле, сборка всегда заканчивается успешно, просто во время компиляции иногда появляются сообщения,
мол - не могу распределить задачу, буду собирать локально.
При этом все собирается правильно на обоих хостах. После сборки ошибок не выявлено.

Кстати нет, вру ....
На одном все нормально (стабильная ветка) и он такие сообщения не выдает. (192.168.1.3)
Второй (не стабильная ветка) иногда не распределяет и выдает вышеупомянутые мессаги (192.168.1.2)
на нем же настроен ccache (думал проблемы в нем, но сборка заканчивается - успешно, значит не в нем)

чтобы работал distcc, размаскировал на стабильном gcc 4.4.3
(обязательное условие: компиллеры должны совпадать в версии)

Gentoo - Symphony of Creations

Насчет совпадения версий -

Насчет совпадения версий - это понятно. А что, gcc-4.3.x имеет какие-то проблемы с distcc? Надо обязательно 4.4? Почему?

Нет, не обязательно

просто на нестабильной ветке систему поднял раньше
а из-за компилятора проблем (пока) на ней не было.

Gentoo - Symphony of Creations

Поставил, настроил,

Поставил, настроил, попробовал. Получилось отлично. Я не знаю, кто за прошедший год постарался и что именно сделано, но теперь распределенная сброка четвертых кедов проходит без чудес и аномалий.

Ну и что за скромность? )))

версия gcc и системы (стейбл/анстейбл)?

Gentoo - Symphony of Creations

gcc-4.3.2-r3, 4.3.4 я

gcc-4.3.2-r3, 4.3.4 я замаскировал сам, у него пока есть проблемы с моим собственным софтом. kde-4.4.1 (~amd64), остальное в основном стабильное, еще кое-что ~amd64 есть, но немного.

Что мне не нравится в gcc, так это то, что каждый раз после выхода новой версии, даже с изменением самого младшего номера, он находит все новые и новые "недостатки" в коде и начинает материться warning-ами. Код при этом собирается и работает, но неприятно само наличие warning-ов. В одних случаях приходится добавлять к gcc (g++) ключи (типа -Wno-write-strings), в других делать косметические правки кода, не меняющие ничего по сути. Поэтому предпочитаю маскировать новые версии gcc, ибо не люблю warning-и.

Спасибо

Про варнинги - только программеры их не любят ))) (солидарен)

про distcc - пожалуйста держите вкурсе, если проявятся подобные моим глюки,
заметил что такое случается только при CMake

Gentoo - Symphony of Creations

Про варнинги солидарен.

Есть еще одна неприятность в distcc. И он тоже связан с варнингами.
Раньше иногда применял диррективу #warning. Так вот она вводит distcc полный ступор, если этот код компилируется на внешнем компе. Процесс сборки просто останавливается. Если этот файл приходится на свой комп, то всё проходит гладко.

Рекомендуется указывать так же свою машину - 127.0.0.1/N, причем в начале. Это дает существенный прирост скорости на машинах с соизмеримой производительностью.

Еще одно (собственное) наблюдение. Количество параллельных потоков на внешние машины полезно завышать относительно количества их ядер. (Это никак не связано с hyperthreading, потому как при локальной сборке на тех машинах с тем же числом потков это не дает прироста).

Не замечал такого.

Цитата:
Рекомендуется указывать так же свою машину - 127.0.0.1/N, причем в начале. Это дает существенный прирост скорости на машинах с соизмеримой производительностью.

Еще одно (собственное) наблюдение. Количество параллельных потоков на внешние машины полезно завышать относительно количества их ядер. (Это никак не связано с hyperthreading, потому как при локальной сборке на тех машинах с тем же числом потков это не дает прироста).

В доках рекомендуется указывать общее значение потоков равное:
N=N*2+1 (где N - число процессоров)

В моем случае 1 целерон и 1 P4(HT)
при локальной сборке на P4 число потоков больше 3 часто приводит к ошибке, тогда как distcc
собирает Cel(3)+P4HT(5)
Возможно, как раз таки отказ от локального интерфейса и компенсирует решение конфликтов
потому что даже когда Cel - в дауне, P4 собирает без возмущений
ЗЫ: это мои эксперименты, про семафоры и SMP знаю, не утруждайтесь.

Gentoo - Symphony of Creations

.

Наверное, мои наблюдения специфичны.
1. Они в меньшей степени относятся к emerge
2. Наблюдения строились для 1-2 десятков ядер.
3. (совсем специфично) На каждый файл gcc потреблял 1-3 сотни мегобайт оперативки.

эм ... недопонял

1. это ясно
2. вы о чем? (при сборке ядра distcc не используется). Я пока только с десяток версий перевалил при построенных около 50 (но это скорее недочет, чем плюс).
3. все правильно, с этим проблем как раз нет, на обоих машинах по 2 гб.

Gentoo - Symphony of Creations

.

2. я про то, что в сборке принимало участие от 10 до 20 вычислительных ядер (процессорных).

PS. 2Г/200M - это всего на 10 потоков хватит.

допонял :)

я бы написал так
PS. 2Г/~200M - это всего на ~10 потоков

Да это все понятно, вопрос то открытый остался ...
Почему - то распределяет, то говорит - не могу (редко, но говорит)?
Настройки правил, сеть работает нормально, хосты не отваливаются и тп.
У меня так только? или это бывает время от времени?
PS: собранные пакеты работают без ошибок ...

Gentoo - Symphony of Creations

может стоит настроить distcc

может стоит настроить distcc для emerge добавив в make.conf

DISTCC_DIR="/tmp/.distcc"
DISTCC_HOSTS="192.168.0.2/2,lzo 192.168.0.3/2,lzo "

Спасибо, попробую

Похоже дошло в чем дело, оно не в сжатии,
Почитал на лоре, народ пишет что бывают потоки до 512 мб съедают при компиляции
А если так, то тупо не хватает памяти.
Быть может сжатие поможет, попробую.

Gentoo - Symphony of Creations

а чем мешает собирать систему

а чем мешает собирать систему на другой машине?
Мне так больше нравиться в отношении ноутов с их слабеньким охлаждением, медленными винтами и с зачистую малой памятью.
Имею такую картину.
Есть подстольный комп - 4-х ядерный феном, заточенный на бесшумность. Следовательно большой запас по охлаждению. + много памяти.
Есть зоопарк поддерживаемых ноутов. Интелы ( то есть без 3DNow ), частью 32 битные. То есть бинарная совместимость весьма скудная.
1. На большом компе созданы образы систем, установленных на ноутах. После соответсвующего монтирования и чрута - собираю/обновляю пакеты/мир там. PORTAGE_TMPDIR находится на tmpfs (что не смог бы сделать на большинстве ноутов).
2. Далее на ноутах достаточно установить эти пакеты из бинарников. Или даже при необходимости переустановтить весь мир.
Результат.
Проблем кроме ftpbase (а это бродатый анекдот) не встречал.

Да я так и делаю )

Только машины обе используются и distcc - взаимный
готовлюсь соседа собирать у того AMD двудулый хочу за день справиться, чтобы не торчать у него сутками ) (есть проблемы ssh, vnc не предлагать :)))

В вашем же случае - не лучше PXE юзать?

Про фтп расскажете как справились? (можно в отдельной ветке, если не сложно)
Буду признателен (чую меня это ждет) :)

Gentoo - Symphony of Creations

.

не понял что в отдельной ветке. :( Придется здесь пофудить. Если что - я есть в jabber, или можите открыть ветку - буду писать туда.

Для соседа - можно использовать указанны мною метод. Тогда установка (у него) займет 1-2 часа в зависимости от скорости диска и количества пакетов (у меня 1.5 часа на 5400 диске и 1000 пакетах)

PXE - совсем другая тема. У меня ноуты. Они к сети не привязаны. А вот обновляются только в ее присутствии.

ftpbase не устанавливается из-за стрющего бага. Обход стандартный --skip-first, а по окончании его локальная пересборка.
Есть еще шалости. a) 15-30% дает параллельная установка пакетов. Странно но работает. б) virtualbox например требует чтения лицензии

В случае с соседом - я бы сделал всё подругому. Если состав пакетов более менее одинаков с вашим - то просто залил бы ему образ своей системы.
mount -o bind / /mnt/tmp; cd /mnt/tmp; tar -cpzf path/file.tgz; # осторожнее с путем чтобы не стал себя же паковать + исключить /home и т.п., если он на том же разделе.
далее исправил СFLAGS и поставил бы на пересборку. Можно на время помочь своим через distcc.
Но главное - у него система рабочая через 30 минут готова.

и почему проблемы с ssh?

Ну не так все красочно

в отдельной ветке про ftpbase ввиду, но вы уже все рассказали, думаю - не проще сделать через самбу?
с PXE понял, не подойдет (плюс заморочки с wifi)

про соседа:
у меня интелы, у него AMD
у меня x32 (оба) у него x64 (придется кроскомпилить с distcc)
сеть у него со мной через wifi а это значит придется ставить без сети, компилить ядро и поднимать сеть
только после этого обновлять
ssh - проблемы по той же причине, можно конечно и в лсд поднять, но рестартов при установке не избежать
а следовательно и ssh упадет.

Gentoo - Symphony of Creations

Можно ваш конфиг

Можно ваш конфиг посмотреть?
Я когда ставил его себе год с небольшим назад, вообще ничего не настраивал практически. Указал только allow и listen. И по-моему там еще что-то было насчет количества задач. Все сразу заработало замечательно, но я его снес, поскольку kde4 с его помощью собрать было нереально. А он мне для этого в первую очередь и был нужен.

Кстати, вопрос чуть не совсем в тему: а удавалось ли кому-нибудь собрать 4-е кеды с distcc, при условии, что требуемые зависимости кед установлены только на одной системе, в которой все и собирается, а на остальных вообще нет ничего GUI-шного?

У меня такое

У меня такое :)

/etc/conf.d/distccd

DISTCCD_OPTS="--daemon"
DISTCCD_EXEC="/usr/bin/distccd"
DISTCCD_PIDFILE="/var/run/distccd/distccd.pid"
DISTCCD_OPTS="${DISTCCD_OPTS} --port 3632"
DISTCCD_OPTS="${DISTCCD_OPTS} --log-level critical"
DISTCCD_OPTS="${DISTCCD_OPTS} --allow 192.168.0.0/16 --allow 10.0.0.0/8"
DISTCCD_OPTS="${DISTCCD_OPTS} --listen 0.0.0.0"
DISTCCD_NICE="15"

/etc/distcc/hosts

localhost/1,cpp software/3,lzo,cpp comp1/1,lzo,cpp comp2/1,lzo,cpp comp3/1,lzo,cpp

/etc/make.conf

...
MAKEOPTS="-j7"
FEATURES="distcc"
...

pump emerge -NDu world -a

Все работает шикарно, софт собирается быстрее чем происходит распаковка архивов :)
Единственное что с -j7 нужно много ОЗУ :)

Собирается ядро и весь мир :) Иногда не собираются openoffice, virtualbox-modules-ose

Working on Gentoo Linux for Asus P535 and Qtopia :-)

Интересный ход с pump. То

Интересный ход с pump.

То есть в make.conf нет упоминания о distcc?
Он позволяет при необходимости собирать только локально?

PS. Упс! не внимательно прочел. А счастье было так близко! :(

ээээ в /etc/make.conf distcc

ээээ
в /etc/make.conf distcc конечно же есть :)

Working on Gentoo Linux for Asus P535 and Qtopia :-)

Странно

Цитата:
Собирается ядро и весь мир :) Иногда не собираются openoffice, virtualbox-modules-ose

У меня не использует distcc при компиляции ядра (что-то добавить надо?)
Все остальное собирается без ошибок на обоих машинах.
ЗЫ: интересная опция в make.conf - DISTCC_VERBOSE="1"

Gentoo - Symphony of Creations

если используешь genkernel то

если используешь genkernel то в нем редактируешь:

MAKEOPTS="-j7"
KERNEL_CC="distcc"

Если собираешь руцями:

$ make CC=distcc -j7 all

Working on Gentoo Linux for Asus P535 and Qtopia :-)

Ясно

Спасибо, не знал )

Gentoo - Symphony of Creations

oleg_kaa написал(а): Если

oleg_kaa написал(а):
Если собираешь руцями:

$ make CC=distcc -j7 all

если "руцями" собирать то ничего не поможет.
А по теме проще для root-а дописать .bashrc

export PATH="/usr/lib/distcc/bin:${PATH}"

так будет собираться все через distcc для root-а
PS. Напомните пожайлуста аналог distcc - то чем собирается redhat

хе-хе

прописано, не собирает ;)

Gentoo - Symphony of Creations

Прописан в

Прописан в /etc/genkernel.conf?

Про .bashrc это полный бред :)))

Working on Gentoo Linux for Asus P535 and Qtopia :-)

Ой, запутался

Я имел ввиду distcc прописан в глобальных путях
в генкернел прописал:
MAKEOPTS="-j7"
KERNEL_CC="distcc"

я просто руками компилю ядро, потому и запутался (distcc не активировался)

Теперь знаю как включить (проверю в ближайшее время)

пока проблема с двумя мышами заинтриговала )

Gentoo - Symphony of Creations

Кое-что нарыл в инете по

Кое-что нарыл в инете по поводу "failed to build somewhere, running locally instead" во время сборки связанных с kde4 пакетов.
Обсуждение велось на английском, и мне кое-что было не совсем понятно, но я понял главное: в какой-то момент времени distcc по какой-то ему одному ведомой причине начинает думать, что удаленный(е) хост(ы) непригоден(дны) для того, чтобы на нем что-то компилить, "помечает" его(их) как "плохой"(ие) и исключает из списка возможных удаленных distcc хостов на одну минуту. Через минуту "плохая метка" "протухает", и distcc снова пользуется услугами удаленного хоста. Пометка делается просто - создается файл /tmp/.distcc/lock/backoff_tcp_имя_хоста_3632_номер. Если этот файл удалить, все прекрасно компилится удаленно.

Я написал за 5 минут программку на С, которая раз в 2 секунды сканирует каталог "/tmp/.distcc/lock" и удаляет из него все файлы backoff*. Когда программка работает - kde4 компиляется абсолютно без ругательств по поводу "failed to build somewhere". Причем - реально компиляется на удаленных хостах, без ошибок.

Это, конечно, костыль, причем - грубейший... Я так и не пойму, почему distcc именно с kde4 пакетами так странно себя ведет, чем ему не нравятся удаленные distcc-хосты, и как заставить distcc штатно вести себя более благоразумно, когда идет речь о паектах kde4... Но зато проблема решена.

Может, у кого-то есть идеи получше или соображения?

Хотелось бы видеть архитектуру

те:
1 машина, объем памяти, количество потоков, тип процессора, сжатие lzo
2 машина, объем памяти, количество потоков, тип процессора, сжатие lzo
...
N машина, объем памяти, количество потоков, тип процессора, сжатие lzo

Настройки просмотра комментариев

Выберите нужный метод показа комментариев и нажмите "Сохранить установки".