пакет, который надо собрать, буду далее упоминать/записывать как «application.ebuild»
По идее есть:
1) некий исходный toolchain, который собирает пакеты для текущей архитектуры $CBUILD с указанием что надо уметь генерировать код для целевой архитектуры ($CHOST).
Этот тулчейн можно взять готовый с какого-нибудь гентушного сервера для сборки бинарных пакетов:
PORTAGE_BINHOST {1}={http://}$PKGDIR {0} (например "http://tinderbox.dev.gentoo.org/default/linux/amd64/")
и компилировать его не надо.
Надо настроить этот тулчейн, чтобы он собирал пакеты с возможностью генерирования кода под другую архитектуру
в результате нужен первый проход компиляции, когда собираются все пакеты для архитектуры $CBUILD
насколько я понимаю, должны быть скомпилированы *ВСЕ* те пакеты,
которые указаны в DEPEND в пакете application.ebuild
однако, если использовать crossdev
(Builds and installs slotted toolchains for arbitrary GCC-supported platforms)
то она собирает не все пакеты, а только очень малое их подмножество.
И я как-то пропустил, где указано как собирать остальные пакеты из DEPEND
Эти новые пакеты для второй фазы сборки
во-первых, собираются указанную директорию $ROOT {1}
а во-вторых в $PKGDIR {1}
(указанную в файле /etc/portage/make.conf или /etc/portage/make.conf/gentoo)
если указано, что надо сохранять .tbz2-файлы
пакеты можно собирать по одной штуке (чтобы сэкономить место).
2) Имея теперь директорию $PKGDIR {1} с кучей .tbz2 для пакетов в архитектуре $CBUILD
(некий toolchain с архитектурой $CBUILD, в который входят:
компилятор, питон, portage и прочие из DEPEND)
Мы можем устанавливать их бинарно по списку из конкретного application.ebuild без компиляции
в произвольных комбинациях для разных application1 и application2
Для бинарной установки этих пакетов надо прописать переменную PORTAGE_BINHOST {2}={http://} $PKGDIR {1} - в какой файл? ведь PORTAGE_BINHOST {1} уже указывает на thinderbox)
Так же где-то должен быть отдельный make.conf цепочки, чтобы указать там директорию $ROOT {2} и $PKGDIR {2} для результатов второго этапа.
3) На третьем этапе надо бинарно установить те пакеты, которые будут запакованы в stage3.iso, для этого
установить третью $PORTAGE_BINHOST {3}={http://}$PKGDIR {2} (в каком файле?)
и бинарно промержить
@system
все пакеты из $RDEPEND
и бинарный пакет application.tbz2 (из $PKGDIR {2})
Я хочу добиться того, чтобы в каждый момент времени использовалось минимум временного пространства (пускай и за счет увеличения числа копирований). Для этого я хочу, чтобы все пакеты устанавливались бинарно, кроме текущего собираемого. Для того, чтобы производить сборку в RAM-диске (и после сборки каждого пакета сборку следующего начинать начисто).
Основной загадкой для меня является расположение конфигов на каждом этапе.
Насколько я понимаю, нужно выполнить два chroot
(для того, чтобы можно было указать три разных PORTAGE_BINHOST)
1) после окончания сборки всех пакетов из DEPEND в архитектуре $CHOST, для того, чтобы установить их бинарно
сборку для CTARGET выполнять так же уже внутри chroot ?
2) перед установкой пакетов в stage3, чтобы устанавливать их бинарно
Я правильно думаю?