Сеть для распределенной компиляции (Генту-коммунизм, есть ли такое?)

Sabayon, Calculate, Funtoo, Exherbo

Модератор: /dev/random

Аватара пользователя
joebraker
Сообщения: 98
ОС: OpenSuse 10.3

Re: Сеть для распределенной компиляции

Сообщение joebraker »

Xaktyc писал(а):
24.06.2009 22:56
Для начала да, получаешь список активных серверов distcc с сервера, который можно сделать банально на php.
Он передает текст с адресами. Он на локальном компе записывается в список адресов компов...

Во-во
Спасибо сказали:
Аватара пользователя
--=Civil696=--
Сообщения: 227
ОС: Gentoo o_O

Re: Сеть для распределенной компиляции

Сообщение --=Civil696=-- »

Maximus_V писал(а):
24.06.2009 21:50
А я готов присоединиться и протестить
+1
Тоже поучаствовал бы :rolleyes:
НЕ ПАНИКУЙ © ^_~
Спасибо сказали:
abs-o-lut
Сообщения: 420

Re: Сеть для распределенной компиляции

Сообщение abs-o-lut »

Для начала.
Предлагаете все участникам сети хранить полный срез distfiles?
Спасибо сказали:
Аватара пользователя
joebraker
Сообщения: 98
ОС: OpenSuse 10.3

Re: Сеть для распределенной компиляции

Сообщение joebraker »

abs-o-lut писал(а):
25.06.2009 01:20
Для начала.
Предлагаете все участникам сети хранить полный срез distfiles?

Причем здесь это?
От волонтера требуется только принять исходник одного файла и выдать его откомпилированным. Он даже будет не в курсе, что за пакет собирается.
Спасибо сказали:
Аватара пользователя
Xaktyc
Сообщения: 604
ОС: Gentoo 2008.0, WinXP

Re: Сеть для распределенной компиляции

Сообщение Xaktyc »

Не будем забывать про заголовки... Тоесть уже минимум не один файл... А может что-то упоминается в другом файле...
Спасибо сказали:
Аватара пользователя
/dev/random
Администратор
Сообщения: 5426
ОС: Gentoo

Re: Сеть для распределенной компиляции

Сообщение /dev/random »

Xaktyc писал(а):
25.06.2009 02:32
Не будем забывать про заголовки... Тоесть уже минимум не один файл... А может что-то упоминается в другом файле...

AFAIK, distcc передаёт удалённому компилятору файл, уже прошедший через препроцессор. А значит, все инклуды будут уже внутри.
Спасибо сказали:
Аватара пользователя
Xaktyc
Сообщения: 604
ОС: Gentoo 2008.0, WinXP

Re: Сеть для распределенной компиляции

Сообщение Xaktyc »

Не знал. Это замечательно.
Спасибо сказали:
Аватара пользователя
joebraker
Сообщения: 98
ОС: OpenSuse 10.3

Re: Сеть для распределенной компиляции

Сообщение joebraker »

/dev/random писал(а):
25.06.2009 03:52
Xaktyc писал(а):
25.06.2009 02:32
Не будем забывать про заголовки... Тоесть уже минимум не один файл... А может что-то упоминается в другом файле...

AFAIK, distcc передаёт удалённому компилятору файл, уже прошедший через препроцессор. А значит, все инклуды будут уже внутри.

Во-во! +1
Спасибо сказали:
Аватара пользователя
Maximus_V
Сообщения: 432
ОС: Gentoo, FreeBSD

Re: Сеть для распределенной компиляции

Сообщение Maximus_V »

Xaktyc писал(а):
24.06.2009 22:56
Для начала да, получаешь список активных серверов distcc с сервера, который можно сделать банально на php.
Он передает текст с адресами. Он на локальном компе записывается в список адресов компов...

Продолжая идею - с сервера передаются не только адреса, но и версия gcc (она не должна отличаться).
Клиент же, получив такой список, проводит самостоятельное тестирование полученных адресов - пингует, пробует собрать что-нибудь простенькое и т.п. По результатам теста - сортирует список адресов, чтобы вначале стояли быстрые сервера.
Для клиентов с динамическими адресами - еще и скрипт, который будет на сервер передавать новый айпишник при его изменении (наподобие dyndns) - могу сам написать, хотя наверное коряво получится.
И как быть клиентам, которые за NAT? Торренты ведь качаются, но будет ли работать distcc?
Спасибо сказали:
Аватара пользователя
Xaktyc
Сообщения: 604
ОС: Gentoo 2008.0, WinXP

Re: Сеть для распределенной компиляции

Сообщение Xaktyc »

Maximus_V писал(а):
25.06.2009 11:31
Клиент же, получив такой список, проводит самостоятельное тестирование полученных адресов - пингует, пробует собрать что-нибудь простенькое и т.п.

Ну да, как у cmake - test.cpp...

Maximus_V писал(а):
25.06.2009 11:31
По результатам теста - сортирует список адресов, чтобы вначале стояли быстрые сервера.

Это интересно, как их - самые быстрые отсеивать? По пингу чтоли? Пинг - не показатель скорости. Сервер с пингом в 200 может быть полезней сервера с 50.
Maximus_V писал(а):
25.06.2009 11:31
Для клиентов с динамическими адресами - еще и скрипт, который будет на сервер передавать новый айпишник при его изменении (наподобие dyndns) - могу сам написать, хотя наверное коряво получится.

IP меняется при реконнекте, а не во время работы. При реконнекте активный клиент уже бесполезен. Так что все равно когда он снова войдет в сеть и так будет получен новый адрес.
Maximus_V писал(а):
25.06.2009 11:31
И как быть клиентам, которые за NAT? Торренты ведь качаются, но будет ли работать distcc?

Торренты могут коннектиться через UPnP итд...
Можно сделать пассивный коннект, если тот кто просит компилить с реалом, или вообще передавать через сервер - но для этого какой сервер нужен...
Спасибо сказали:
Аватара пользователя
joebraker
Сообщения: 98
ОС: OpenSuse 10.3

Re: Сеть для распределенной компиляции

Сообщение joebraker »

Не факт что имеет смысл сортировать сервера по производительности, ведь так на них будет ложиться повышенная нагрузка. Мне кажется более предпочтительным является случайный выбор. Компиляция одного файла - дело недолгое, вряд ли сильно затормозит процесс. А зато если быстрый сервер хорошо справляется distcc ему тут же еще файликов накидает - так получиться самоорганизация.

Про переменный ip я особых проблем не вижу. Один раз заливается на на сервер при запуске и все. У меня реконнекты бывают очень редко, даже без роутера. А с роутером воббще дин адрес можно считать статическим :) Но если у кого-то рвется часто коннект - можно обновлять раз в 5 минут данные и все.

Насколько я знаю, distcc работает over ssh. Поэтому проблем быть не должно. Я ssh мост лично перебрасывал через свой роутер. Просто нужно порты открыть и форвардинг прописать.

Что касается версии gcc. Тут мне кажется проблему нужно решить радикальным образом: как известно, отличия в третьей цифре версии допустимы (3.2.1 и 3.2.2 напр), людей же с отличной версией во второй цифре нужно не допускать к сборке. Эталоном будет являться последняя стабильная версия из портежей. Обновить gcc - дело нехитрое, зато не будет геморроя с этой проблемой, а и порядка будет больше.
Спасибо сказали:
Аватара пользователя
Xaktyc
Сообщения: 604
ОС: Gentoo 2008.0, WinXP

Re: Сеть для распределенной компиляции

Сообщение Xaktyc »

А не решает ли опять же эту проблему distcc?

Кстати, покажите мне человека, который намеренно старается сидеть на старом GCC.
Хотя знаю людей, которые на 4.2 сидят )
Спасибо сказали:
Аватара пользователя
deadhead
Сообщения: 1913
Статус: zzz..z

Re: Сеть для распределенной компиляции

Сообщение deadhead »

Xaktyc писал(а):
26.06.2009 14:05
Кстати, покажите мне человека, который намеренно старается сидеть на старом GCC.

не то что бы намеренно, но вот qemu, допустим, только на 3-шке компилируется...
[x] close
Спасибо сказали:
Аватара пользователя
DaemonTux
Сообщения: 1480
Статус: Юный падаван
ОС: Gentoo

Re: Сеть для распределенной компиляции

Сообщение DaemonTux »

deadhead писал(а):
26.06.2009 14:19
Xaktyc писал(а):
26.06.2009 14:05
Кстати, покажите мне человека, который намеренно старается сидеть на старом GCC.

не то что бы намеренно, но вот qemu, допустим, только на 3-шке компилируется...

Насколько я помня выпустили новую весию qemu с поддержкой gcc4
Vladivostok Linux User Group
Спасибо сказали:
Аватара пользователя
deadhead
Сообщения: 1913
Статус: zzz..z

Re: Сеть для распределенной компиляции

Сообщение deadhead »

DaemonTux писал(а):
26.06.2009 14:24
Насколько я помня выпустили новую весию qemu с поддержкой gcc4

о, действительно... с версии 0.10.0 No longer requires GCC 3.x ... буду обновляться...
[x] close
Спасибо сказали:
Аватара пользователя
joebraker
Сообщения: 98
ОС: OpenSuse 10.3

Re: Сеть для распределенной компиляции

Сообщение joebraker »

Xaktyc писал(а):
26.06.2009 14:05
А не решает ли опять же эту проблему distcc?

Нет, не решает. Это одно из требований - хотя бы первые две цифры версии должны быть одинаковыми.
Спасибо сказали:
Аватара пользователя
Xaktyc
Сообщения: 604
ОС: Gentoo 2008.0, WinXP

Re: Сеть для распределенной компиляции

Сообщение Xaktyc »

deadhead писал(а):
26.06.2009 14:19
не то что бы намеренно, но вот qemu

У меня, вроде два GCC было и какая-то программа трешкой компилилась вроде.
Сейчас правда после обновлений и депклинов - все норм.

PS. Тема то теперь топовая))
Спасибо сказали:
Аватара пользователя
Xaktyc
Сообщения: 604
ОС: Gentoo 2008.0, WinXP

Re: Сеть для распределенной компиляции

Сообщение Xaktyc »

Вот вырезка из контактовской группы генту, после того как я дал линк сюда:
#2
Валерий Тихонов
24 июн 2009 в 13:11
erlang такое позволяет...

#3
Евгений Варавва
25 июн 2009 в 14:18
вы действительно хотите руткитов в каждом втором бинарнике, скомпилированном на стороне?

#4
Валерий Тихонов
25 июн 2009 в 14:23
не согласен.
можно использовать просто чужие процессорные (и не только их) мощности. При этом пакеты будут компилироваться у тебя. Правда наш мин. связи по-моему запретил такое "расшаривание" железа.
У меня друг - геймер, а у него PS3. Он говорил, что по соглашению какой-то институт может по интернету забирать часть его вычислительных мощностей.

#5
Евгений Варавва
26 июн 2009 в 1:14
ну google://boinc
Спасибо сказали:
Аватара пользователя
joebraker
Сообщения: 98
ОС: OpenSuse 10.3

Re: Сеть для распределенной компиляции

Сообщение joebraker »

контакт и генту - интересное сочетание :)

про erlang сейчас почитаю. Напоминает город немецкий :)

Вторую цитату не понял.

Про PS3 и институт улыбнуло. Не очень в это вериться.
Спасибо сказали:
Аватара пользователя
joebraker
Сообщения: 98
ОС: OpenSuse 10.3

Re: Сеть для распределенной компиляции

Сообщение joebraker »

Не.. Ребята вконтакте определенно не догнали о чем речь.
Эрланг - это ваще язык программирования для кластеров, это тут не при чем.
Боинк ближе, но идея другая: просто объединение вычислительных мощностей для решения выч задач.
А тут речь идет о сети для компиляции, причем именно для генту.
Спасибо сказали:
Аватара пользователя
Xaktyc
Сообщения: 604
ОС: Gentoo 2008.0, WinXP

Re: Сеть для распределенной компиляции

Сообщение Xaktyc »

joebraker писал(а):
26.06.2009 23:04
Про PS3 и институт улыбнуло. Не очень в это вериться.

Это институт здравоохранения:)
joebraker писал(а):
26.06.2009 23:04
контакт и генту - интересное сочетание

Ну я вродь как на генту, но и был вконтакте и пока есть.
joebraker писал(а):
26.06.2009 23:04
Вторую цитату не понял.

Намек на то, что нехорошие дяди будут инклудить в код свою бяку.
joebraker писал(а):
26.06.2009 23:10
Эрланг - это ваще язык программирования для кластеров, это тут не при чем.

Ну у распределенного вычисления схожие принципы, только в некоторых случаях задачи разбиваются по другому.
joebraker писал(а):
26.06.2009 23:10
А тут речь идет о сети для компиляции, причем именно для генту.

Ну почему именно для генту? Чем другая линукс-система с компилятором GCC хуже?
Спасибо сказали:
Аватара пользователя
joebraker
Сообщения: 98
ОС: OpenSuse 10.3

Re: Сеть для распределенной компиляции

Сообщение joebraker »

Я тоже есть есть в контакте, но я там в основном с друзьями болтаю, да на девок любуюсь :)
А проблемы portage там обсуждать для меня несколько необычно.

Про дядей не знаю. В принципе такая возможность есть, конечно. Но, думаю, она скорее теоретическая. Людям же будет выдаваться всего один файл - выдранный кусок из всей программы. Да и то, кода самого видеть никто не будеть, чтобы его изменить, нужно сильно извратиться. Ну те, кто боятся пусть компилят тогда у себя на компе. А палить нехороших людей можно в принципе. Короче, это уже проблема второго порядка.

Другая линукс-система ничем не хуже. Даже винда ни чем не хуже (прости господи). Но люди у которых не source-based дистры не будут заинтересованы в такой сети. Это скорее только для гентушников актуально.
Спасибо сказали:
Аватара пользователя
Xaktyc
Сообщения: 604
ОС: Gentoo 2008.0, WinXP

Re: Сеть для распределенной компиляции

Сообщение Xaktyc »

joebraker писал(а):
27.06.2009 00:48
Людям же будет выдаваться всего один файл - выдранный кусок из всей программы.

Если не ошибаюсь, это решимо асм вставкой?
joebraker писал(а):
27.06.2009 00:48
Но люди у которых не source-based дистры не будут заинтересованы в такой сети.

Ну не факт... Мелкие программы быстрее компилить тоже пригождается. Да и просто немного добрых людей, думаю найдется.
joebraker писал(а):
27.06.2009 00:48
А проблемы portage там обсуждать для меня несколько необычно.

Система обсуждений ВКонтакте мне тоже ОЧЕНЬ не нравится. Гораздо предпочитаю форумы типа этого.
Спасибо сказали:
Аватара пользователя
joebraker
Сообщения: 98
ОС: OpenSuse 10.3

Re: Сеть для распределенной компиляции

Сообщение joebraker »

Xaktyc писал(а):
27.06.2009 00:59
joebraker писал(а):
27.06.2009 00:48
Людям же будет выдаваться всего один файл - выдранный кусок из всей программы.

Если не ошибаюсь, это решимо асм вставкой?

Ну да, вставки можно в принципе делать. Но опять же, если есть код в руках, а его не так просто достать. Кроме того, если уж такая боязнь, можно компилироватьу двух людей, а потом сравнивать - одинаковые ли файлы.
Спасибо сказали:
Аватара пользователя
Xaktyc
Сообщения: 604
ОС: Gentoo 2008.0, WinXP

Re: Сеть для распределенной компиляции

Сообщение Xaktyc »

joebraker писал(а):
27.06.2009 10:41
Но опять же, если есть код в руках, а его не так просто достать.

Ну очевидно, что он будет где-нибудь в temp'е.
joebraker писал(а):
27.06.2009 10:41
у двух людей, а потом сравнивать - одинаковые ли файлы.

А distcc поддерживает разве?
Спасибо сказали:
Аватара пользователя
/dev/random
Администратор
Сообщения: 5426
ОС: Gentoo

Re: Сеть для распределенной компиляции

Сообщение /dev/random »

joebraker писал(а):
27.06.2009 10:41
Ну да, вставки можно в принципе делать. Но опять же, если есть код в руках, а его не так просто достать.

На самом деле всё очень просто. distcc получает целиком, со всеми инклудами, один сишный модуль, а возвращает объектный файл. Патчим свой distcc-сервер так, чтобы он проверял, имеется ли там, скажем, функция, идентичная входящей в исходники распространённой сейчас версии ssh, делающая запрос к функции проверки пароля, и вставлял туда написанное вами заранее дополнительное условие, всегда считающее специальный придуманный вами пароль правильным. А ещё круче - не ssh, а pam.
Если знать, что и где патчить в самом ssh/pam/чтототам, то написать соответствующий патч для distcc - дело 15 минут.


joebraker писал(а):
27.06.2009 10:41
Кроме того, если уж такая боязнь, можно компилироватьу двух людей, а потом сравнивать - одинаковые ли файлы.

Я об этом уже думал. Не пойдёт. Злоумышленник может объявить себя на "трекере" глобального distcc несколько раз. И даже если разрешать только одно объявление с одного IP (что ударит по клиентам провайдеров, не выдающих публичные IP), неужели так сложно получить сразу кучу айпишников? Tor, ipv6, уже заражённые этим способом машины, список можно продолжить. И таким образом можно получить столько "своих" объявлений на "трекере", что полезность сравнения файлов на одинаковость станет нулевой - они практически гарантированно оба будут сгенерированы злоумышленником.
Спасибо сказали:
Аватара пользователя
joebraker
Сообщения: 98
ОС: OpenSuse 10.3

Re: Сеть для распределенной компиляции

Сообщение joebraker »

Ну тогда, как выход можно систему компилить у себя, а менее важные пакеты с помощью сети.
Либо проверять некоторые файлы не просто из двух источников, а вместе со свим компом.
Хотя, в целом, я согласен - проблема серьезная.

joebraker писал(а):
27.06.2009 10:41
у двух людей, а потом сравнивать - одинаковые ли файлы.

А distcc поддерживает разве?

Навряд ли. Это видимо придется руками допиливать.
Спасибо сказали:
Аватара пользователя
Xaktyc
Сообщения: 604
ОС: Gentoo 2008.0, WinXP

Re: Сеть для распределенной компиляции

Сообщение Xaktyc »

joebraker писал(а):
29.06.2009 00:16
Либо проверять некоторые файлы не просто из двух источников, а вместе со свим компом.

В компиляции не может быть важных и маловажных файлов. Любой кусок исполняемого файла может быть уязвим. Поэтому, конечно, тут можно только в доверенной сети компилить, а проблема уязвимости остается очень важной.
Спасибо сказали:
Аватара пользователя
joebraker
Сообщения: 98
ОС: OpenSuse 10.3

Re: Сеть для распределенной компиляции

Сообщение joebraker »

Xaktyc писал(а):
29.06.2009 16:29
joebraker писал(а):
29.06.2009 00:16
Либо проверять некоторые файлы не просто из двух источников, а вместе со свим компом.

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

Есть программы обладающие правами суперпользователя, а есть просто пользовательские. Хотя, согласен, желательно, чтобы все были прямыми.
А что касается защиты, то возникла такая мысль: нужно пропатчить distcc сл. образом. Сама программа проверяет саму себя на наличие лажи (mp5 сумма например). То же она делает и исходниками: сверяет их с суммой, отосланной клиентом. Затем считает сумму для бинарника и высылает клиенту, и он уже сравнивает то что ему пришло с искомой суммой. Если не совпадает - тогда этот файл отвергается.
Это в качестве затравки.
А вообще, проблема действительно серьезная, и мне кажется вот что:
можно начать писать какие-нибудь простенькие скрипты, если будет понятно, как решить проблему безопасности теоретически, ибо решить ее реально может быть сложно.
Если будет понятно, что проблема решаема, а не фатальна. Тогда можно попытаться сделать простенькую сетку с небольшим числом пользователей и посмотреть будет ли это давать ощутимый выигрыш. В сети из 10-20 участников, вряд ли кто-то будет патчить distcc и тп. А дальше уже можно действовать по ситуации.
Спасибо сказали:
Аватара пользователя
/dev/random
Администратор
Сообщения: 5426
ОС: Gentoo

Re: Сеть для распределенной компиляции

Сообщение /dev/random »

joebraker писал(а):
29.06.2009 23:38
Затем считает сумму для бинарника и высылает клиенту, и он уже сравнивает то что ему пришло с искомой суммой.

Извините, это уже идиотизм. При компиляции никак не может быть заранее известна КС - разве что эта компиляция уже проводилась на компе клиента. А если она проводилась, то зачем ему проводить её ещё раз, да ещё удалённо?
Спасибо сказали: