LINUX.ORG.RU

Как лучше организовать сборку на отдельном сервере

 , ,


1

1

Есть сервер, на котором хочу собирать пакеты для генты. Но там установлен дебиан. Меня интересуют 2 вопроса:
1) Как лучше организовать сборку? Я думаю распаковать stage3 и portage в чруте, и собирать с features='buildpkg', а потом на своём ноуте примонтировать папку с пакетами по sshfs в PKGDIR, и собирать с ключем -k. Может есть более удобная схема?
Есть еще идея с distcc, но у меня интернет не очень шустрый, имхо еще дольше получится (и не факт что там нужная версия gcc есть)

2) Как указать, чтобы сборка была под мой проц (на локальной машине у меня -march=native), а там проц отличается.

★★★★★

chroot самый нормальный вариант

Как указать, чтобы сборка была под мой проц

Указанием соответствующей архитектуры в -march

Kindly_Cat
()

На второй вопрос нашел ответ у мегабакса:
http://optimization.hardlinux.ru/?page_id=34

echo «int main() { return 0; }» |LANG=en gcc -march=native -v -Q -x c - 2>&1 | tr «\n» " " | sed -e «s|.*options enabled:||» -e «s|Compiler.*||» -e 's| |\n|g' | sort -u

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

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

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

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

Ну можно попробовать поиграться с флагом --buildpkgonly (-B), или мержить только нужные для сборки зависимости.

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

В принципе, если ты собираешься компилировать решительно все пакеты вне ноута, то проблемы возникнуть не должно.

Кстати, строчка, спёртая у мегабакса не является ответом на твой второй вопрос. Ты можешь запустить её на своём ноутбуке и тогда узнаешь, с какими опциями тамошний GCC собирал бы систему. Ни в коем случае не полагайся на неё, компилируя на другой физической машине, не важно, в чруте или нет. За -march=native в контексте кросс-компиляции надо пороть бамбуком. Прочти лучше разделы про crossdev и кросс-компиляцию вообще на gentoo.org. Там достаточно подробно и полно всё описано.

Deleted
()
Последнее исправление: fargred (всего исправлений: 2)
Ответ на: комментарий от Deleted

Да, я уже понял, я другую строчку оттуда же взял:

echo "int main() { return 0; }" |LANG=en gcc -march=native -v -E -x c - 2>&1

Она вернула:
...
-march=core2 -mcx16 -msahf -mno-movbe -mno-aes -mno-pclmul -mno-popcnt -mno-abm -mno-lwp -mno-fma -mno-fma4 -mno-xop -mno-bmi -mno-tbm -mno-avx -mno-sse4.2 -mno-sse4.1 --param l1-cache-size=32 --param l1-cache-line-size=64 --param l2-cache-size=1024 -mtune=core2
...
Я так понял это и надо писать всметсо -march=native?

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

Если эта строчка вернулась на ноутбуке, то ты можешь это использовать в CFLAGS твоего чрута, где будешь компилять для ноутбука. Но всё это пихать в CFLSGS смысла нет, потому что большинство опций входят в -march=core2. Советую открыть man к своему gcc и узнать, во что конккретно у тебя раскрывается »“core2„«
Насколько я помню, -msse4.x туда раньше не входили, например. --param l-тра-та-та я использую в CFLAGS всегда.

Deleted
()
Последнее исправление: fargred (всего исправлений: 1)
Ответ на: комментарий от Deleted

Если эта строчка вернулась на ноутбуке, то ты можешь это использовать в CFLAGS твоего чрута

Ну я это и имел ввиду, спасибо

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