distcc
Я собираюсь ставить distcc для распределённой компиляции, прочёл следующие руководства
http://www.gentoo.org/doc/en/distcc.xml
http://www.gentoo.org/doc/en/cross-compiling-distcc.xml,
но у меня остались вопросы.
distcc мне нужен для вроде как тривиальной задачи – перенести все вычисления с
нетбука (Gentoo x86 CHOST="i686-pc-linux-gnu Atom N270") на
десктоп (Gentoo amd64 CHOST="x86_64-pc-linux-gnu" Core2Duo E7400)
Прочитав руководства, я так и не понял, необходимо ли запускать и демон и клиент на каждой машине? С одной стороны, без distccd на дескотпе не запустишь компиляцию на нём, с другой – я совсем недавно читал, что у кого-то были проблемы, когда клиент distcc выполнял свои обязанности на слабой машине, которой это уже запретили. Заодно меня интересовало ещё вот что: кажется, на ЛОРе, говорили о том, что при компиляции на неродную архитектуру, список возможностей процессора (mmx, sse{2,3,4}), используемый в байт-коде, зависит от пересечения множеств функционалов той архитектуры, на которой компилируют пакет, и от той, для которой его компилируют. Т.е в случае, если бы у меня был Phenom II против Core2, байт-код был бы весьма плохо оптимизирован?
Нетбук давно (143 дня назад, если верить portage) словил то самое невезучее обновление питона, и у меня руки всё не доходили его починить. Поэтому система там очень старая, и мир пересобирать лучше бы конечно при помощи Большого Брата. Но, раз уж версии gcc надо синхронизировать, значит, надо пересобирать за ним весь тулчейн (если не весь system, включая distcc). Как бы вы сделали? Может, лучше вытащить жестак из нетбука, вставить в десктоп и сделать linux32 chroot, чтобы там всё и собрать, раз уж нетбук и так был бы занят компиляцией?
- Для комментирования войдите или зарегистрируйтесь
Демон надо запускать на тех
Демон надо запускать на тех машинах, которые хочешь использовать для помощи "слабым", а клиент(добавить distcc в FEATURES) на "слабым".("слабым" в кавычках, т.к. это относиться к вашему случаю, а в общем компы могут быть одинаковыми)
Про оптимизации в зависимости от проца,по моему, чушь. Хотя слышал, про сборку gentoo для КПК: собранное на КПК работало лучше, чем на ББ, но не знаю почему.
Вариант с перестановкой винча будет ощутимо быстрее. Хотя если никуда не торопитесь, и не напрягает оставить компы на ночь, то можно и distcc/
_SerEga_ написал(а): Про
не совсем чушь! там, вроде, такая особенность была, что нельзя на клиентской машине использовать -march=native, т.к. этот параметр будет раскрываться уже на сервере, а там проц другой и соответственно получишь не то ;) но я это когда-то где-то читал... самому с distcc работать не приходилось, т.к. crossdev пока ни разу не собирал необходимые пакеты...
вот как раз native и distcc
вот как раз native и distcc несовместимы
_SerEga_ написал(а): Демон
Ага, спасибо.
пробовал я такую же щтуковину
пробовал я такую же щтуковину проделать - не получилось :( crossdev -t i686 не разу не собрал все нужные для кросскомпиляции пакеты :(
да и по сути, затею дольше реаализовывать, чем пересобирать мир на атоме (у меня полная пересборка мира на атоме N270 занимает около 12-15 часов - ~1000 пакетов)
+1000 crossdev не рабочая
+1000
crossdev не рабочая ерунда. Проще потратить пару дней и написать ebuil-ы тулчейна для своих нужд.
не понял о каких ты ебилдах
не понял о каких ты ебилдах :(
кароче, напомнили вы мне об этом distcc и пришла в голову мысля тупо сделать его в чруте ))) взял stage3-x86 и сделал в чруте систему... оттуда и сервис distcc запустил - и понеслась родимая )))
.
А смысл от такой помощи?
Не легче ли в чруте собрать бинарные пакеты для целевой, расшарить с их в целевой и установить.
PS. На целевой про --with-bdeps=y не забывать.
PPS. Для особой замороки можно distcc и обратную строну настроить. ~10% времени удастся сэкономить.
Kevol написал(а): А смысл от
эммм... у меня мощный десктоп на amd64, а нетбук на x86... просто собрать бинарные пакеты, на сколько я понимаю, не удастся, иначе бы distcc прекрасно работал бы и без crossdev ;)
.
У меня таже ситуация.
Мощный amd64 + пара x86. Пробовал им из chroot помогать. Только термопасту зря посушил.
Для сборки на маломощных используется их память и их жесткий диск. А это ни в какое сравнение не идет с быстрым десктоповым диском, скоростью его памяти и объемом позволяющим на tmpfs организовать PORTAGE_TMPDIR.
Плюс бонус. Долгие сборки не мешают в это время использовать портативные устройства по прямому назначению ;)
В результате, даже повесил на десктоп еще одного иждивенца amd64 с парой ядер. Могу сказать - смена термопасты в ноуте дело более заморочное чем пересборка на нем мира. Не предназначены они для нагрузки 100% в течении 24 часов.
хм, ну количество оперативы
хм, ну количество оперативы на нетбуке мне позволяет прикрутить tmpfs... скоро поэкспериментирую на эту тему ;)
Тут лучше на "иждивенцах"
Тут лучше на "иждивенцах" distcc запустить. Помогут немного... :) А собирать в chroot'е. тулчейн не нужен - на x86_64 chroot для x86 запускать так : linux32 chroot /путь /bin/bash. И погнали... :)
P.S.: Linux - это красная таблетка :-) Windows - синяя...
kaf1
Руки у тебя кривые :) У меня 4 кросс тулчейна, один даже для винды и все работают!
Working on Gentoo Linux for Asus P535 and Qtopia :-)
ну, вот и рассказывай давай
ну, вот и рассказывай давай как делал ;) че не делаю, ничего не собирается этим crossdev'ом :(
Надо так ;)
Вот так вот делал, делаю и наверняка буду делать :)
Working on Gentoo Linux for Asus P535 and Qtopia :-)
все равно не собирается
все равно не собирается ((
запускаю
crossdev [-S] -t i686-pc-linux-gnu
и получаю при сборке gcc
Давай логи )
Давай логи )
Working on Gentoo Linux for Asus P535 and Qtopia :-)
cross-i686-pc-linux-gnu-info.
cross-i686-pc-linux-gnu-info.log
cross-i686-pc-linux-gnu-binutils.log
cross-i686-pc-linux-gnu-glibc-headers.log
cross-i686-pc-linux-gnu-linux-headers-quick.log
cross-i686-pc-linux-gnu-gcc-stage1.log
А с ключом -S ?
А с ключом -S ?
А еще emerge --info :)
Working on Gentoo Linux for Asus P535 and Qtopia :-)
с ключем -S все то же самое,
с ключем -S все то же самое, ровно как и с другими версиями gcc и binutils для родной системы... меня эта ошибка приследует на двух абсолютно разных машинах ~amd64 :(
emerge --info
На время сборки убери ~x86
На время сборки убери ~x86 ~amd64 из make.conf, это ведь не стабильно ;)
или запусти вот так, не редактируя make.conf:
Working on Gentoo Linux for Asus P535 and Qtopia :-)
oleg_kaa написал(а): На время
~x86 поставил как раз ради эксперимента - разницы никакой :( при комментировании ACCEPT_KEYWORDS="~amd64" ошибка та же :(
мне вот интересно, почему каждый раз не видится PORTAGE_CONFIGROOT
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- * crossdev version: 20101011 * Host Portage ARCH: amd64 * Target Portage ARCH: x86 * Target System: i686-pc-linux-gnu * Stage: 4 (C/C++ compiler) * binutils: binutils-2.20.1-r1 * gcc: gcc-4.4.4-r2 * headers: linux-headers-2.6.30-r1 * libc: glibc-2.11.2-r3 * PORTDIR_OVERLAY: /var/overlays/local * PORT_LOGDIR: /var/log/portage * PORTAGE_CONFIGROOT:
В нашем деле стабильность это
В нашем деле стабильность это все ;)
Working on Gentoo Linux for Asus P535 and Qtopia :-)
crossdev --binutils 2.20.1-r1
тоже не спасло...
у тебя PORTAGE_CONFIGROOT определяется?
У меня стабильная версия
У меня стабильная версия crossdev, там этого нет :)
Working on Gentoo Linux for Asus P535 and Qtopia :-)
на стабильной та же ошибка с
на стабильной та же ошибка с configure у gcc-stage1 :(
может каки-нибудь USE надо включить у glibc, gcc, binutils???
Кстати после не успешной
Кстати после не успешной работы crossdev очень рекомендутся удалить то что он насобирал
Не нужно, может какая то несовместимость компиляторов ветки 4.5 и 4.4.
Попробуй установить и выбрать в качестве основного ветку 4.4:
И собрать тулчейн.
Working on Gentoo Linux for Asus P535 and Qtopia :-)
oleg_kaa написал(а): Кстати
похоже это помогло ;) gcc собрался )))
UPD:
зато глибс вывалился :(
glibc для distcc не нужен
glibc для distcc не нужен :)
Но я думаю это из-за того что gcc:4.5
Working on Gentoo Linux for Asus P535 and Qtopia :-)
возможно... ну да и хрен с
возможно... ну да и хрен с ним... в чруте все прекрасно работает ;) СПАСИБО тебе ОГРОМНОЕ за помощь!!!
Я избавился от ошибки глибс
Я избавился от ошибки глибс закомментировав в /etc/make.conf:
CC="gcc"
CXX="g++"
Нет ничего невозможного
Откуда оно там взялось?
Откуда оно там взялось?
скорее всего это такой
скорее всего это такой рудимент, который остался от очень старых версий portage... у меня эти строки в make.conf ровно столько, сколько я себя помню в gentoo )) наверное попали из make.conf.example с minimal-2007 )))
в общем после комментирования этих параметров у меня gcc стал собираться... раньше на configure валился ))
я ставил 2004.3 и у меня
я ставил 2004.3 и у меня никогда не было.
Где-то было написано, что
Где-то было написано, что если установить эти две переменные, то ccache работает эффективнее.
Нет ничего невозможного
Поделись опытом, как у тебя
oleg_kaa
Поделитесь опытом, как получилось?
Моя исходная ситуация: x86_64 no-multilib. Версия crossdev: 20110310. Нужен кросс-тулчейн i686. Запускаю crossdev -S -t i686-pc-linux-gnu, собирается cross-binutils, cross-gcc (первый раз), cross-glibc выпадает с ошибкой
В configure.log вот что настораживает:
checking build system type... x86_64-pc-linux-gnu checking host system type... i686-pc-linux-gnu checking for i686-pc-linux-gnu-gcc... x86_64-pc-linux-gnu-gcc
Дело, скорее всего, в этом. Но с этим можно сделать, не понимаю... Может, где-то надо что поправить в конфигах? Только вот в каких...
Версии, естественно, стабильные binutils-2.20.1 gcc-4.4.5 glibc-2.11.3
Цель тулчейна: distcc. Т.е. - чтобы i686 машины могли использовать distcc с x86_64 хостами.
Да, и еще - о фокусе со ссылками. Я так понял - это подходит для случая, если x86_64 хост постоянно собирает только для i686. А как быть, если к distccd обращается несколько машин, с разными архитектурами? Надо наверно, отдельный distcc специально для i686 собирать?
Поставь =crossdev-20101011 у
Поставь =crossdev-20101011 у меня все с ним прекрасно собираеться :)
Working on Gentoo Linux for Asus P535 and Qtopia :-)
С этой версией один в один то
С этой версией один в один то же самое. Увы.
Не понимаю, почему.
Выложи плиз полные логи
Выложи плиз полные логи сборки через wgetpaste
Working on Gentoo Linux for Asus P535 and Qtopia :-)
Цитата: Выложи плиз полные
Логи здесь: http://paste.pocoo.org/show/358814/
Ну классно конечно что ты их
Ну классно конечно что ты их слепил в один файл, но у меня нет ни времени, ни желания искать ошибку среди 11817 строк.
Выложи отдельно, каждый лог сборки пакета
Working on Gentoo Linux for Asus P535 and Qtopia :-)
Пардон, поспешил. Вот все
Пардон, поспешил.
Вот все раздельно.
cross-i686-pc-linux-gnu-info.log
cross-i686-pc-linux-gnu-binutils.log
cross-i686-pc-linux-gnu-linux-headers-quick.log
cross-i686-pc-linux-gnu-linux-headers.log
cross-i686-pc-linux-gnu-gcc-stage1.log
cross-i686-pc-linux-gnu-glibc-headers.log
cross-i686-pc-linux-gnu-glibc.log
Я так понимаю ты второй раз
Я так понимаю ты второй раз пересобираешь glibc для i686
А зачем? И еще кажеться стоит включить multilib для i686/glibc
Working on Gentoo Linux for Asus P535 and Qtopia :-)
Мда. Сборка происходит,
Мда. Сборка происходит, вообще-то, один раз. То, что ты принял за первый раз - установка headers only.
Зачем? multilib нужен только в том случае, если мне необходимо запускать x86 программы под архитектурой x86_64. В этом случае, необходимы 32-битные версии библиотек и поддержка 32-разрядных executables ядром. В моем же случае запускать ничего не надо. Необходимо только получать при сборке модули под нужную архитектуру. Для этого и предназначен тулчейн. В конце концов, на i686 без проблем собирается cross-x86_64, и никакого multilib не требуется, да и не получится.
Процесс следующий:
1. Собираются binutils (HOST: x86_64 TARGET: i686)
2. Ставятся linux-headers (quick) (для i686)
3. Ставятся glibc-headers (для i686) Это и есть то, что ты принял за первую сборку glibc
4. Собирается gcc (nocxx) (HOST: x86_64 TARGET: i686)
5. Ставятся linux-headers (для i686)
6. Собирается glibc (HOST: cross-x86_64-i686 TARGET: i686)
7. Собирается gcc (на этот раз окончательно)
Пункт 6 должен собираться тем cross-gcc, который был предварительно собран в пункте 4. А пытается собрать стандартным x86_64 компилером, да плюс еще CFLAGS подпихивает те, которые у меня для x86_64 в make.conf. Почему, совершенно пока не пойму. Я не настолько глубоко знаю portage, чтобы быстро разобраться в этих нюансах. Есть еще засада: при configure (если руками пытаться конфигурировать cross-glibc) обнаруживаются g++ c++, которых нет на самом деле. configure их обнаруживает по $PATH. Выходит, что перед началом сборки нужно установить правильно HOST, и из PATH исключить пути к /usr/bin и /usr/x86_64-pc-linux-gnu/gcc-bin/4.5.5/, иначе configure будет считать, что у нас еcть g++ c++. А /usr/bin из PATH исключать никак нельзя.
Так что - либо crossdev не допилен до конца, либо я не сделал чего-то, что обязательно нужно сделать. Но делал все так, как описано в http://www.gentoo.org/doc/en/cross-compiling-distcc.xml
Возможно, эти грабли вылезают только в случае, если на x86_64 делать cross-i686, а в остальных случаях все нормально.
В общем - засада какая-то. Сам пока не могу понять, откуда начать все это раскапывать.
В составе crossdev есть cross-emerge и прочее. Буду пробовать проходить все необходимые шаги вручную.
Crossdev вполне себе рабочий.
Crossdev вполне себе рабочий. Добавьте --with-headers к команде crossdev. Дело в том, что при сборке возникает circular dependency, чтоб собрать компилятор необходимы header'ы из libc, а для сборки libc необходим компилятор.
поставил собираться crossdev
поставил собираться
crossdev -t i686 --with-headers
... посмотрим, что получится ;)за инфу спасибо!
Давайте так: crossdev
Давайте так:
я уже забил, т.к. все очень
я уже забил, т.к. все очень хорошо и шустро работает в чруте ;) лишние 300 метров на винте для меня не критично, а заморачиваться из-за спортивного интереса мне сегодня лень :(
но все равно ОГРОМНОЕ СПАСИБО за желание помочь! ;)
P.S. а собираться не хотел gcc... configure вываливался на проверке работоспособности компилятора
.
И каково будущее выбранного подхода при обновлении тулчейна?
На сколько я понимаю, USE для чрута и целевой различаются. Потому придется нетбуку самостоятельно справиться с проблемой пересборки system, и чруту тоже самостоятельно?
Еще одна мысль. Целевой необходимо иметь память под все потоки distcc-серверов. При distcc на удаленной стороне производится только компиляция, а препроцессинг на клиенте.
Kevol написал(а): На сколько
как раз таки нет... взят make.conf с целевой машины (нетбука) подправлен CFLAGS/CXXFLAGS и все... имхо, нужно только glibc, linux-hraders, binutils и gcc иметь одинаковой версии (собственно так crossdev делает)... пересобираться с помощью distcc должно все то, у чего поддержка distcc в ебилде не отрезана ;)
gry написал(а): Добавьте
не помогло :(
Раз ты собираешь на distcc
Раз ты собираешь на distcc под разные архитектуры, то настоятельно советую сделать фокус со ссылками, как описано тут:
http://www.gentoo.org/doc/en/cross-compiling-distcc.xml
Working on Gentoo Linux for Asus P535 and Qtopia :-)
УРА УРА УРА
Товарищу oleg_kaa выносится благодарность перед строем за наглядную демонстрацию преимущества стабильной ветки в деле использования sys-devel/crossdev
Троекратное протяжное "ура!", товарищи!!! Так победим!
а эта строка - это просто подпись
ты весь мир перевел на
ты весь мир перевел на стабильную ветку?