LINUX.ORG.RU

[gentoo] Подскажите, как лучше произвести удаленную (или распределнную) компиляцию на маломощной машише с использованием удаленной мощной?

 


0

3

Собственно, имеет нетбук с SSD 4Gb и 1Gb Ram (а также 10Мб/сек 8Гб SD-карта). Причём процеоор только 32-битный. Т.е. полное удручение :( Очень хочется впихнуть туда генту, т.к. бинарные дистрибы меня не обрадовали своей скоростью работы на нём и всякими говноинновациями от «Каноникал и Ко».

Я пока вижу четыре варианта:
1) Узнать (к своему стыду, я не нашел, как это правильно сделать), какие флаги рекомендует режим native (автоматическое включение всех возможных инструкций, рекомендуется настольной книгой).
После этого установить их в make.conf, собрать систему в виртуалки и перенести её на нетбук. Но этот вариант меня не очень радует, т.к. всё-равно не решает проблему последующей компиляции.
2) Поставить базовую (stage3) систему, после чего настроить distcc и радоваться. Но тут есть вопросы:
а) Можно ли вообще отключить компиляцию на самом нетбуке, чтобы вся сборка проходила на удаленной машине?
б) Но линковка то происходит всё-равно на хосте-инициаторе, а значит мне потребуется куча места на жестком диске (кстати, в каком каталоге это всё происходит? Может вынести его на SD-flash?)
в) Кроме gcc на обеих сторонах версии чего-то ещё должны совпадать?
3) Ну и последний, самый шикарный вариант, но я не знаю, насколько он реализуем: emerge может создавать бинарные пакеты. Т.е., в принципе, можно было бы отправлять запрос на пакет на удаленную машину (можно виртуалку, чтобы поддерживать одинаковые конфигурации систем), после компиляции забирать его и ставить. Есть ли какой-нибудь враппер/скрипт/тулза, которая подпадает под описанный функционал?
г) Черезжопный, но оооочень простой вариант. Через sshfs подмонтируем на удаленной машине нетбук, после этого делает chroot в /mnt/netbook, ну и далее уже делаем emerge firefox и прочее. Но я боюсь, что это весьма чревато. Вопрос, чем? Я пока вижу проблемы только в детектинге архитектуры, но это решается через /etc/make.conf, где не native должо быть, а нужная (повторюсь, что не нашел, как узнать, какие опции порекомендует native на данной машине).

Ну и предлагайте свои варианты, конечно :).

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

Это я и без тебя читал (см. топик). :) Пиши подробнее.

ktulhu666 ☆☆☆
() автор топика

Прежде всего: distcc не такая удобная вещь, все равно грузит проц основной машины, что не есть хорошо.

Я пошел по варианту з. На удаленной (рабочей) машине есть папочка ~/note там полностью копия моей ноутбучной системы и быстро пересобирается мир. А затем при установке/обновлении ноутбук тянет бинарные пакеты. Для этого на сильной машине:

FEATURES="buildpkg...
т.е. заставлять создавать бинарные пакеты
PKGDIR="/packages"
и складировать их в этот каталог.

На ноутбуке

FEATURES="getbinpkg...
стараться брать бинарные пакеты
PORTAGE_BINHOST="ssh://rcv@work:7779/home/rcv/note/packages" 
брать отсюда

Ну и соответственно на мощной машине раз в сутки обновляем мир.

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

Какой командой обновляете мир? По крону? А если будут проблемы зависимостей или что-то не скомпилится?

ktulhu666 ☆☆☆
() автор топика

Через sshfs подмонтируем на удаленной машине нетбук, после этого делает chroot в /mnt/netbook, ну и далее уже делаем emerge firefox и прочее.

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

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

А если будут проблемы зависимостей или что-то не скомпилится?

Редко но бывает. И здесь только ручками.

RCV ★★★★
()

Я в похожей ситуации делаю так: скопировал rsync'ом все с нетбука на «большого брата», и с тех пор на нем в chroot'е все компилирую и формирую бинарные пакеты, которые и ставятся на нетбук. С какими-то пакетами не все гладко, но их единицы. Периодически rsync'аю их заново для надежности.

Вариант г) с гигабитной сеткой тоже у меня чудесно работает, только не по sshfs, а по NFS (no_root_squash,nohide,crossmnt). Ну, тоже с единичными пакетами бывают сложности. И надо не забыть после монтирования корня смонтировать в него также /dev, /proc, /dev/pts.

Что активирует --native узнается как-то так:

gcc -march=native -E -v - </dev/null 2>&1 | grep cc1
botkin
()
Ответ на: комментарий от botkin

Оооо, огромное спасибо.
Хм, т.е. Вы сразу двумя способами пользуетесь? Rsync для 3G-подключения, что ли? Вроде, для нормальной компиляции через chroot + NFS должно и 10Мбит хватать, только надо темповую директорию, куда компилятор всё кладёт в процессе сборки (ксати, не знаете, где она? В /tmp?) через --bind пробросить с real_root в chroot, чтобы по сети не гонялось.
г) А Вас не затруднит выложить конфиг NFS-сервера, комманду NFS-монтирования? И как Вы используете chroot? Туда надо /proc, /tmp, /sys и /dev пробрасывать через --bind с из real_root или это не нужно?

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

На десктопе пень 4-ый, на нетбуке атом, на обоих нативная сборка, код атома не может выполняться на 4-ом пне, потому что последний не умеет все инструкции атома.

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

А код атома на Q6600 (виртуалка) будет работать?

Я не знаю. Надо просто попробовать. Могут работать не все программы, могут работать все, а могут все не работать.

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

Даже если /var/tmp/portage разместить локально, то многое берется из /usr/include и т. п., так что, чем быстрее сеть, тем лучше. Вариант с rsync'ом как раз использую для относительно медленной сети — компилю на работе пакеты для домашнего HTPC на Atom'е.

Корень по NFS расшарен вот так:

/ 10.10.0.1(rw,no_root_squash,async,nohide,crossmnt,no_subtree_check,crossmnt)

И монтируется/размонтируется вот таким скриптом:

sudo mount -t nfs htpc:/ /mnt/htpc                                                                                                                                                                                                           
sudo mount -t proc none /mnt/htpc/proc                                                                                                                                                                                                       
sudo mount -o bind /dev /mnt/htpc/dev
sudo mount -o bind /usr/portage/distfiles /mnt/htpc/usr/portage/distfiles
sudo mount -t tmpfs none /mnt/htpc/var/tmp/portage
sudo mount -t devpts none /mnt/htpc/dev/pts
linux32 sudo chroot /mnt/htpc

# Тут в chroote происходит самое интересное, а после выхода из chroot остается все размонтировать:

sudo umount /mnt/htpc/dev/pts
sudo umount /mnt/htpc/var/tmp/portage
sudo umount /mnt/htpc/usr/portage/distfiles
sudo umount /mnt/htpc/dev /mnt/htpc/proc
sudo umount /mnt/htpc

Это все, конечно, решение быстрое и грязное, наверняка, если подумать, тут много к чему придраться можно, но работает и так, поэтому не заморачиваюсь :)

Кстати, делал и так: rsync все на работу (за исключением всяких /home, который нафиг не нужен, /usr/portage, который можно bind'ом с локальной машины замонтировать и т. п., уже и не помню, какие директории при этом были лишними), в chroot'е все собрать, потом просто обратный rsync домой.

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

Каталоги с подпапками лучше монтировать рекурсивно, как в хандбуке:
mount --rbind /dev /mnt/chroot/dev
А отмонтировать каталог одним махом можно через lazy unmount
umount -l /mnt/chroot/dev

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