Barium:UIRD

Материал из Rosalab Wiki
Версия от 13:23, 18 августа 2022; Betcher (обсуждение | вклад) (Последовательность загрузки с описанием основных параметров)

Перейти к: навигация, поиск

UIRD - Unified Init Ram Disk system

https://github.com/neobht/uird

Это разновидность initrd, его задача собрать из слоёв aufs/overlayfs корневую файловую систему и передать загрузку /sbin/init (systemd) с этой корневой файловой системой. В основе реализации UIRD лежит набор скриптов инициализации dracut (модули base, kernel-modules), сценарий инициализации uird-init и библиотека функций к нему livekitlib (доработанный аналог liblinuxlive проекта Slax).

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

  • Отсутствие привязки к конкретному дистрибутиву
  • Отсутствие привязки к конкретным каталогам для поиска источников
  • Возможность подключения практически любых источников, которые можно смонтировать в linux
  • Поддержка различных сетевых протоколов для загрузки по сети

UIRD - сердце Бария.

Именно UIRD обеспечивает основные отличия бария от других дистрибутивов Росы собранных на аналогичной платформе.

Глоссарий: Источник - все что можно смонтировать в линукс в том числе по сети, в каталоге куда монтируется источник будет осуществляться поиск модулей (слоев) Слой - все что можно смонтировать в линукс, img, iso,также слоем может быть папка, но чаще всего это модуль. Модуль - squashfs архив, отличается от обычных архивов тем, что может быть смонтирован RO как блочное устройство. sysroot, rootfs - в случае UIRD это корневая фс линукс собранная в UIRD из слоев объединенных aufs или overlayfs. Именно с этой ФС продолжится загрузка на этапе после UIRD. Создание rootfs - основная задача UIRD.

Последовательность загрузки с описанием основных параметров

Общее количество параметров UIRD достаточно велико, но большая часть из них относится к дополнительному функционалу. Например конфигурационный файл для загрузки ОС Барий, точнее один из конфигов, выглядит так:

uird.config=ROSA.ini uird.rootfs=zram::SIZE=85% uird.ro=*.xzm,*/patches uird.rw= uird.cp=*.cp uird.load=/base/,/modules/ uird.noload=/saves,/homes uird.from=/ROSA-SYSTEM::MNT_OPTS=ro+noexec,/ROSA-DATA uird.find_params=-maxdepth_3 uird.mode=clean uird.changes=/ROSA-DATA/saves/toxzm.cfg uird.syscp=/livekitlib::/usr/lib/rosa-rw/scripts uird.shutdown uird.preinit uird.union=overlay

И даже здесь не все параметры необходимы. Треть можно убрать и система все равно загрузится.

Основной сценарий работы UIRD /uird-init, в нем последовательно выполняются функции из файла /livekitlib, чтобы в итоге получить rootfs и передать загрузку /sbin/init целевой сиситемы. Если опустить малозначащие моменты процесс выглядит так:

  • предварительные действия dracut
  • запуск uird-init
  • разбор конфига и параметров в cmdline (конфиг либо дефолтный либо устанавливается параметром uird.base.cfg=Rosa-ovl, выбор только из встроенных при сборке конфигов)
  • поиск и подключение источников определенных в uird.from=/ROSA-SYSTEM::MNT_OPTS=ro+noexec,/ROSA-DATA

конкретно эта строка будет обработана так:

 - поиск в корне доступных носителей /ROSA-SYSTEM
 - если найдено, носитель монтируется в /.memory/data/from/0  с параметрами ro,noexec
 - папка /ROSA-SYSTEM биндится в /.memory/layer-base/0 - это и есть первый источник
 - поиск в /.memory/data/from/*/ и в корне доступных носителей - /ROSA-DATA
 - когда найдена, если нужно монтировать создается /.memory/data/from/1, если папка в /.memory/data/from/0 то используется оттуда
 - папка /ROSA-SYSTEM биндится в /.memory/layer-base/1 - это второй источник