LINUX.ORG.RU

Удаленная компиляция и/или под другую архитектуру/платформу


0

1

Есть сверхмощный сервер, на котором сборка программы из исходников занимает немного больше времени, нежели установка из пакетов.
Всё дело в том, что порой приходится что-то компилировать на рабочих машинах, и там это занимает от 10 минут до часа. Но как я представлю, что мне придется делать с gentoo на cubietruck меня начинает дергать.

В связи с этим есть 2 вопроса:

1) Возможно ли заниматься компиляцией/сборкой, используя вычислительные мощности другого компьютера?
2) Независимо от ответа на первый вопрос, возможно ли компилировать под определенную архитектуру/платформу, которая отличается от архитектуры/платформы хоста? К примеру: хост - freebsd, amd opteron, а целевая машина - linux, intel core 2 duo.

Собственно, всё.

★★★★★

Ответ на: комментарий от entefeed

distcc

ничего себе, не знал. Вроде то, что нужно, спасибо!
Правда, придется потратить еще неизвестно сколько на изучение как всё это дело применять, но, видимо, иначе никак.

Или ssh

??

lel

а это что?

mingw

винда нигде пока не фигурирует

reprimand ★★★★★
() автор топика
Ответ на: комментарий от reprimand

Или ssh

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

mingw

Венду 100% умеет.

MinGW-w64 provides a development and runtime environment for 32- and 64-bit (x86 and x64) Windows applications using the Windows API and the GNU Compiler Collection (gcc)

entefeed ☆☆☆
()
Ответ на: комментарий от entefeed

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

по удобству, я думаю, катит как раз наоборот

Простая ситуация - качаю я исходники чего угодно, распаковывают путем тупого перетаскивания в каталог, rightclick по каталогу > открыть в терминале, make -j3; make install

А теперь что мне придется делать на удаленной машине через ssh:
1) Предварительно извлечь ссылку на скачивание архива и скормить её fetch или wget
2) Зная ключи для соответствующей программы извлечь архив
3) Попытаться скомпилировать (отдельно хочу сказать, что это не имеет смысла, т.к. для практически любой программы нужны либы, которые даже если и есть в freebsd - они наверняка несовместимы с linux, и итоговая программа будет собой представлять невесть что)
4) Скопировать весь каталог сборки на клиентскую машину
5) cd в каталог
6) make install

Хрень короче.

Венду 100% умеет.

я знаю, я к тому говорил, что mingw мне не нужен...

приготовься в геморрою

не впервые :D

reprimand ★★★★★
() автор топика

Возможно ли заниматься компиляцией/сборкой, используя вычислительные мощности другого компьютера?

Возможно.

возможно ли компилировать под определенную архитектуру/платформу, которая отличается от архитектуры/платформы хоста?

Архитектуру — да, если она в списке поддерживаемых. Платформу — навряд ли.

По опыту могу сказать, что distcc тебе не нужен, разве что ядро компилировать. distcc предназначен не для того, чтобы сваливать emerge @world на распределнёёую вычислительную сеть, а чтобы быстро собрать один хорошо отлаженный для такой распределённой компиляции пакет. На среднем Gentoo сервере их обычно сотни, редко больше тысячи. Даже если разберёшься со всеми вылетами sandbox, около трети пакетов всё равно будут падать.

То, что ты хочешь, называется PORTAGE_BINHOST. В идеале твои рабочие станции должны быть одной архитектуры с сервером или как минимум между собой, чтобы можно собрать хотя бы generic без особой настройки. Потому что если архитектура везде одна, то пакеты, скомпилированные непосредственно на сервере, подойдут к любой машине. На каждую архитектуру (точнее, CHOST) отличающуюся архитектуры сервера, понадобится chroot (дешевле, чем виртуальная машина), в который надо будет установить прообраз целевой машины, поддерживать там необходимую конфигурацию, обновлять эту систему и вдобавок обвязать шелл-скриптами, чтобы при старте сервера все фс типа /dev/ уже были подмонтированы и chroot был готов к работе. А ко всему этому надо будет подцепить ещё и какую-то SCM или самописную систему управления конфигами — не будешь же ты их копипастить и править по десять раз?

Поэтому если у тебя там целый зоопарк из разных архитектур и ОСей — забей. Если подпишешься на это, потеряешь здоровье. Дома без фундамента не строят¹.

¹ В Арктике строят, но там они очень быстро ползут.

deterenkelt
()
Ответ на: комментарий от deterenkelt

А, ещё ведь желательно, чтобы у рабочих станций была возможность запускать создание бинарного пакета на сервере, а это значит, что на сервере должен быть пользователь, ssh ключи которого розданы на соответствующий диапазон рабочих станций одной архитектуры, и авторизованы у этого пользователя на самом сервере, притом ему разрешён вход в систему в списке AllowUsers в sshd.conf. Этот пользователь должен иметь право заходить в чрут и выполнять там компиляцию, то есть, для него ещё нужно настроить правила в файле sudoers. Кроме этого, было бы неплохо как-то отделять зёрна от плёвел и не засорять сам chroot, в котором проводится компиляция, ненужными пакетами, то есть, не устанавливать в систему пакеты, которые не являются build-time dependencies, но emerge на это не расчитан, он может либо собрать бинарный пакет и поставить, либо просто собрать и положить в /usr/portage/packages/. Я это оставил на усмотрение пользователя и сделал напоминание о том, что требуется один из двух ключей.

deterenkelt
()

Хотел было посоветовать развернуть локальный OBS, но он не умеет генту.

X10Dead ★★★★★
()

Открой для себя кросскомпиляцию и user-mode qemu.

anonymous
()
Ответ на: комментарий от deterenkelt

Спасибо большое за подробный ответ!

Вы очень сэкономили мое время!

PORTAGE_BINHOST. В идеале твои рабочие станции должны быть одной архитектуры с сервером или как минимум между собой, чтобы можно собрать хотя бы generic без особой настройки

Сборка gentoo для cubietruck - лишь одна из целей. Изначально мысль в том, чтобы собирать программы из исходных кодов (неважно каким образом - будь то система портов или тупой make в свежескачанного посредством git чьего-то проекта).

Поэтому если у тебя там целый зоопарк из разных архитектур и ОСей — забей.

Рабочие машины на linux. Сервер один, и он на freebsd. По многим причинам linux на сервере не держу.

Возможно, есть смысл поиграться с linuxator, но, чувствую, что всё равно из этого ничего хорошего не выйдет.

reprimand ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.