LINUX.ORG.RU

Funtoo from Scratch

 , ,


2

1

Руководство по сборке Funtoo в окружении, не основанном на Funtoo Linux. Цель — показать процесс создания stage3 Funtoo в «произвольном» linux-окружении на примере GNU сборки.

Данное руководство базируется на оригинальных материалах:

1. Evolved Bootstrap - создание stage1 в произвольном окружении

Evolved Bootstrap aka Funtoo From Scratch - инструмент, позволяющий создать stage1-тарбол Funtoo из окружения, никак не связанного с Funtoo или Gentoo.

Funtoo From Scratch можно запустить в любой linux-подобной среде, которая имеет компилятор C и установленный Python3 с пакетами PyYAML и Jinja2. Для использования Funtoo From Scratch в системе отличной по архитектуре от целевой системы необходимы утилита fchroot и QEMU.

Но, идеальным окружением для Funtoo From Scratch является Linux с установленным LXD, позволяющая использовать готовую систему сборки в виде изолированного Funtoo-контейнера. Вам фактически не нужны PyYAML, Jinja2, QEMU и Fchroot на вашей локальной системе, так как они будут автоматически установлены и использованы внутри контейнера.

Предварительные условия:

  • linux-система с LXD

Получение исходного кода Evolved Bootstrap:

user $ git clone https://code.funtoo.org/bitbucket/scm/core/ffs.git

Создание GNU-cборки stage1:

user $ cd ffs
user $ ci/lxd-baremetal/bin/ffs gnu x86-64bit

Упаковка и получение тарбола:

user $ lxc exec ffs-<user>-x86-64bit-gnu-test -- /bin/bash --login
container # cd /root/ffs-repo/tmp/stage1root
container # tar cvf /var/tmp/stage1.tar --xattrs --acls .
container # exit
user $ lxc file pull ffs-<user>-x86-64bit-gnu-test/var/tmp/stage1.tar .

Теперь у вас есть stage1.tar, необходимый для дальнейшего создания собственного релиза Funtoo на целевой системе.

Ссылки:

2. Metro - создание stage3 на целевой системе

Metro - инструмент, используемый в Funtoo Linux для сборки новых релизов.

Предварительные условия:

  • Python3 с установленными пакетами fchroot, lxml, requests

Установка:

root # cd /root
root # git clone https://code.funtoo.org/bitbucket/scm/core/metro.git

Создание файла конфигурации:

root # cp /root/metro/metro.conf /root/.metro

Файл конфигурации задаёт месторасположение Metro, и если оно отличается от /root/metro, то необходимо внести соответствующие изменения. Также в ходе работы Metro создаёт «зеркало» - организованное хранилище, по умолчанию оно будет располагаться в /home/mirror/funtoo. Этот путь также определяется в /root/.metro и должен быть изменен, если вы используете расположение не по умолчанию.

Запуск скрипта установки:

root # /root/metro/scripts/setup

Скрипт установки предварительно предложит выбрать параметры сборки - релиз, целевую архитектуру и целевую sub-arch.

Выбор релиза, рекомендуемый вариант - next:

.www.funtoo.org / funtoo
   1. 1.4-release-std
   2. next

Выбор архитектуры целевой системы:

.www.funtoo.org / funtoo / next
   1. arm-64bit
   2. riscv-64bit
   3. x86-64bit

Выбор целевой sub-arch:

.www.funtoo.org / funtoo / next / x86-64bit
   1. amd64-bulldozer
   2. amd64-excavator
   3. amd64-k10
   4. amd64-piledriver
   5. amd64-steamroller
   6. amd64-zen
   7. amd64-zen2
   8. amd64-zen3
   9. core2_64
  10. generic_64
  11. intel64-broadwell
  12. intel64-haswell
  13. intel64-ivybridge
  14. intel64-nehalem
  15. intel64-sandybridge
  16. intel64-silvermont
  17. intel64-skylake
  18. intel64-westmere

Скрипт установки выполняет несколько последовательных шагов для настройки вашей сборки. При первом запуске выполняется загрузка шаблонного stage3, на основе которого будет осуществляться сборка вашего релиза, поэтому его выполнение может занять некоторое время.

Ниже пример для выбранного релиза next, архитектуры x86-64bit и sub-arch generic_64.

Предварительно, перед началом сборки необходимо поместить полученный ранее stage1 в каталог с релизами. Проверить наличие или создать каталог с текущей датой:

root # mkdir /home/mirror/funtoo/next/x86-64bit/generic_64/2022-10-13 

Скопировать тарбол с именем по шаблону stage1-<subarch>-<release>-<date>.tar:

root # cp /path/to/stage1.tar /home/mirror/funtoo/next/x86-64bit/generic_64/2022-10-13/stage1-generic_64-next-2022-10-13.tar

Сборка нового релиза:

root # /root/metro/scripts/ezbuild.sh next x86-64bit generic_64 full

Процесс сборки отражается в файлах журналов, контролировать его можно:

root # tail -f /home/mirror/funtoo/next/x86-64bit/generic_64/2022-10-13/log/stage{1|2|3}.txt

Когда сборка завершена, её результаты можно найти по пути со следующей структурой /home/mirror/funtoo/<release>/<arch>/<subarch>/<date>/. В нашем примере это будет:

root # ls /home/mirror/funtoo/next/x86-64bit/generic_64/2022-10-13/
root # ls /home/mirror/funtoo/next/x86-64bit/generic_64/2022-10-13/stage*
.../stage1-generic_64-next-2022-10-13.tar
.../stage2-generic_64-next-2022-10-13.tar
.../stage3-generic_64-next-2022-10-13.tar

Ссылки:

3. Что дальше?

Переходить к установке Funtoo Linux на целевую систему, следуя инструкции и используя полученный выше stage3 на этапе Install Guide: Download and Extract Stage3.

Ссылки:

★★★★★

Проверено: maxcom ()

Вопрос, для кого это?

В первую очередь для разработчиков, кому не хватает примера, как можно автоматизировать кросс-платформенную сборку ОС с нуля.

Вопрос, а для чего это нужно?

Изначально цель проекта Evolved Bootstrap aka Funtoo From Scratch - возможность собрать Funtoo Linux для архитектуры «X», используя linux-окружение на архитектуре «Y», путём создания stage1 - тулчейна для последующей кросс-сборки начального окружения Funtoo для любой архитектуры.

Вместе с инструментом сборки релизов Metro это открывает больше возможностей для разработки Funtoo Linux, включая запуск на новых платформах.

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

где ты раньше был

Evolved Bootstrap, как проект, появился только в феврале этого года. По Metro что-то в Funtoo-вики начало появляться тоже примерно тогда.

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

насколько вообще эта штука стабильная?

Какая? Metro - это основной инструмент сборки релизов в Funtoo уже сколько лет.

Evolved Bootstrap - не знаю, по заявлению несколько месяцев была бета, а сейчас проект дошёл до стадии, что stage1 полученный с его помощью принимается Metro без проблем.

Когда игрался, столкнулся один раз с проблемой, когда в промежутке между билдом stage1 и stage2 обновилось дерево meta-repo, версию питона бампнули, в итоге после stage2 сборка останавливалась из-за «emerge: there are no ebuilds to satisfy». Но это очень редкий случай, мне повезло.

Но, на самом деле, постоянно делать ezbuild.sh ... full особого смысла нет.

Интереснее вариант обновления ezbuild.sh ... freshen+<flavor>, для обновления ранее собранного stage3, где flavor - это один из вариантов цели сборки (GNOME Desktop, образ для LXD и т.п.). А интересно тем, что можно создать свою пользовательскую цель с нужным софтом и настройками.

И иметь под рукой всегда «свежий» расширенный stage3.

vvn_black ★★★★★ ()

Очень интересный материал, спасибо!

hobbit ★★★★★ ()
Ответ на: комментарий от LINUX-ORG-RU

думаю что юзкейс как раз для встраиваемых каких-то систем. условно говоря pico atx или mobile atx

Их как раз делают на устаревших архитектурах ради удешевления. Та же самая ниша что и у raspbery pi только x86.

Кому это надо? Ну там киоски какие-то клепать, или терминалы, кассовые аппараты или HUD дисплеи.. В некоторых самолетах кстати на таких железках делают мультимедию которую встраивают в подголовник. Вот эти вот штуки

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

Я ржу с названий, а не характеристик =) С юморком подошли, бульдозер, экскаватор,паровой каток,мускулистый борец. Типа да не быстрые, но зато могут пахать за троих :D

LINUX-ORG-RU ★★★★★ ()
Закрыто добавление комментариев для недавно зарегистрированных пользователей (со score < 50)