LINUX.ORG.RU

Gentoo Build Server для нескольких ПК разной конфигурации

 , ,


0

1

Всем привет. В общем, так случилось, что мне перепала VDS на 6 ядер и 9 гигов оперативы. Сразу же появилась мысль: «а не сделать ли мне на ней билд-сервер для генты?». Gentoo используется на трех устройствах с разной конфигурацией:

  • ПК дома - CPU SandyBridge
  • ПК на работе - CPU IvyBridge
  • Личный ноут - CPU Broadwell.

На VDS используется KVM, если точнее, то QEMU, как я понял.

cat /procc/cpuinfo и cpuid2cpuflags
показали, что проц на сервере и процы на моих устройствах поддерживают очень уж разный набор флагов, причем на сервере их меньше всех. Самое плохое, что на сервере нет поддержки aes, а для меня это критично.

В общем, я почитал доки по Portage и немного хэндбук и вики и пришел к выводу, что есть два стула способа собирать что-то не под ту систему, которая есть:

  • Crossdev
  • Выставить переменные ROOT и CONFIGROOT

В общем, я не понял двух вещей:

1) Если я иду через Crossdev, он мне создает в /usr папку с CHOST того устройства, под которое я компиляю. Что делать, если CHOST совпадает? Меня смутило то, что в доках написано, что можно конечно указать любой путь, но вот этот конкретный прописан во всех компиляторах и они с ним хорошо работают. В общем, непонятно, как это работает.

2) Второй путь - выставить переменные. Как я понял, я могу выставить Virtual Root, для установки пакетов и Virtual Config Root для поиска конфигов Portage'ем. Соответственно, получается, я могу сделать нужный мне make.conf и в теории все должно работать. Опять же вопрос, portage будет искать все зависимости, все библиотеки, на которые линковаться и т.д. в Virtual Root или в моем реальном /usr/x86_64-pc-linux-gnu? Что будет, если я задам эти переменные условными /home/user/virtualroot и /home/user/virtualroot/etc/portage?

По сути, все, что я хочу - сделать так, чтобы собирались бинарные пакеты, даже без установки их куда-то там, просто собирались с CFLAGS="-march=sandybridge -mtune=sandybridge" под все мои системы, ну и можно еще флагов накидать, а реальная система на сервере обновлялась и вообще жила своей жизнью.При этом хотелось бы еще, чтобы world тоже был разный для сервера и моих систем (на системах я допускаю, чтобы он совпадал)



Последнее исправление: Slaviro (всего исправлений: 1)

майни лучше ченибудь там, что популярно

deity ★★★★
()

crossdev в твоём случае не вариант - это нужно для совсем разных архитектур, а не в пределах одной(amd64)

Самый простой совет - используй чруты/контейнеры(lxc/docker) и собирай всё в них

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

Chroot не могу. Если я использую свой набор флагов в chroot, у меня собирается, скажем, Python и на следующим за этим emerge я получу illegal instruction. Я что-то понял не так?

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

ты не устанавливай собираемые пакеты в систему. --buildpkgonly в помощь. собирай пакеты с минимальным набором флагов, поддерживаемых всеми целевыми системами, а прежде для самого билд-сервера собирай пакеты отдельно, выставив -march=native

eternal_sorrow ★★★★★
()
Последнее исправление: eternal_sorrow (всего исправлений: 2)

По сути, все, что я хочу - сделать так, чтобы собирались бинарные пакеты, даже без установки их куда-то там

Собираемые пакеты не могут не устанавливаться, так как они завязаны друг на друга и на рантайм, в котором собираются и работают, собираются и собирают другие пакеты (help2man, m4, cmake, например).

Если нужно сделать так, чтобы сборочная машина не засорялась программными пакетами, которые там не нужны, то нужно делать изолированное окружение, в котором будет фактически содержаться рабочий образ, в/из которого получаются бинарные пакеты для установки в других местах.

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

Если я использую свой набор флагов в chroot, у меня собирается, скажем, Python и на следующим за этим emerge я получу illegal instruction. Я что-то понял не так?

Очевидно: chroot надо делать на машине с максимальным набором поддерживаемых флагов

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