Barium:UIRD — различия между версиями

Материал из Rosalab Wiki
Перейти к: навигация, поиск
(Последовательность загрузки с описанием основных параметров)
Строка 19: Строка 19:
 
''Слой'' - все что можно смонтировать в линукс, img, iso,также слоем может быть папка, но чаще всего это модуль.
 
''Слой'' - все что можно смонтировать в линукс, img, iso,также слоем может быть папка, но чаще всего это модуль.
 
''Модуль'' - squashfs архив, отличается от обычных архивов тем, что может быть смонтирован RO как блочное устройство.
 
''Модуль'' - squashfs архив, отличается от обычных архивов тем, что может быть смонтирован RO как блочное устройство.
 +
''Бандл'' - bundle - промежуточная точка монтирования модуля. Модуль не может быть сразу смонтирован в aufs или overlayfs, эти файловые системы собираются из каталогов.
 +
Модули монтируются в папки в /.memory/bundles/имя_модуля, а слоеная фс собирается из этих бандлов.
 
''sysroot, rootfs'' - в случае UIRD это корневая фс линукс собранная в UIRD из слоев объединенных aufs или overlayfs. Именно с этой ФС продолжится загрузка на этапе после UIRD.
 
''sysroot, rootfs'' - в случае UIRD это корневая фс линукс собранная в UIRD из слоев объединенных aufs или overlayfs. Именно с этой ФС продолжится загрузка на этапе после UIRD.
 
<u>Создание rootfs - основная задача UIRD.</u>
 
<u>Создание rootfs - основная задача UIRD.</u>
 +
''Чистый режим'' - режим загрузки при котором изменения сделанные в системе не сохраняются после перезагрузки (как livecd)
 +
  
 
=== Последовательность загрузки с описанием основных параметров ===
 
=== Последовательность загрузки с описанием основных параметров ===
Строка 26: Строка 30:
 
Общее количество параметров UIRD достаточно велико, но большая часть из них относится к дополнительному функционалу. Например конфигурационный файл для загрузки ОС Барий, точнее один из конфигов, выглядит так:
 
Общее количество параметров UIRD достаточно велико, но большая часть из них относится к дополнительному функционалу. Например конфигурационный файл для загрузки ОС Барий, точнее один из конфигов, выглядит так:
  
uird.config=ROSA.ini
+
  uird.config=ROSA.ini
uird.rootfs=zram::SIZE=85%
+
  uird.rootfs=zram::SIZE=85%
uird.ro=*.xzm,*/patches
+
  uird.ro=*.xzm,*/patches
uird.rw=''
+
  uird.rw=''
uird.cp=*.cp
+
  uird.cp=*.cp
uird.load=/base/,/modules/
+
  uird.load=/base/,/modules/
uird.noload=/saves,/homes
+
  uird.noload=/saves,/homes
uird.from=/ROSA-SYSTEM::MNT_OPTS=ro+noexec,/ROSA-DATA
+
  uird.from=/ROSA-SYSTEM::MNT_OPTS=ro+noexec,/ROSA-DATA
uird.find_params=-maxdepth_3
+
  uird.find_params=-maxdepth_3
uird.mode=clean
+
  uird.mode=clean
uird.changes=/ROSA-DATA/saves/toxzm.cfg
+
  uird.changes=/ROSA-DATA/saves/toxzm.cfg
uird.syscp=/livekitlib::/usr/lib/rosa-rw/scripts
+
  uird.syscp=/livekitlib::/usr/lib/rosa-rw/scripts
uird.shutdown
+
  uird.shutdown
uird.preinit
+
  uird.preinit
uird.union=overlay
+
  uird.union=overlay
  
 
И даже здесь не все параметры необходимы. Треть можно убрать и система все равно загрузится.
 
И даже здесь не все параметры необходимы. Треть можно убрать и система все равно загрузится.
Строка 61: Строка 65:
 
   - когда найдена, если нужно монтировать создается /.memory/data/from/1, если папка в /.memory/data/from/0 то используется оттуда
 
   - когда найдена, если нужно монтировать создается /.memory/data/from/1, если папка в /.memory/data/from/0 то используется оттуда
 
   - папка /ROSA-SYSTEM биндится в /.memory/layer-base/1 - это второй источник
 
   - папка /ROSA-SYSTEM биндится в /.memory/layer-base/1 - это второй источник
* поиск модулей и создание бандлов
+
* поиск модулей и создание бандлов, за это отвечают параметры:
 +
 
 +
  uird.load=/base/,/modules/
 +
  uird.noload=/saves,/homes
 +
и
 +
  uird.ro=*.xzm,*/patches
 +
  uird.rw=''
 +
  uird.cp=*.cp
 +
 
 +
параметрам передаются фильтры по которым отсеиваются не подходящие файлы и каталоги. Конкретно эти фильтры можно описать так:
 +
  Найти файлы и папки в полном имени которых встречается "/base/" или "/modules"
 +
  При этом в именах не встречается '/saves' или '/homes' (чтобы случайно не подключить модули лежащие например в домашней папке)
 +
  Также имя должно удовлетворять любому из фильтров описанных в uird.ro=*.xzm,*/patches, uird.rw='', uird.cp=*.cp.
 +
 
 +
для всего найденного создаются бандлы.
 +
 
 +
* поиск и инициализация источника который будет верхним слоем слоеной фс. То есть где будут изменения сделанные в системе. Управляется параметрами:
 +
uird.mode uird.changes. Это может быть папка в одном из источников, раздел, папка на разделе, файл образ форматированный ext/2/3/4, btrfs с расширением .img
 +
Для включения сохранений таким способом параметры должны быть приведены к такому виду:
 +
 
 +
  uird.mode=changes
 +
  uird.changes=/куда/писать
 +
 
 +
В нашем конфиге:
 +
 
 +
  uird.mode=clean
 +
  uird.changes=/ROSA-DATA/saves/toxzm.cfg
 +
 
 +
clean здесь означает "Чистый режим", то есть верхним слоем aufs будет папка в tmpfs и изменения при перезагрузке сохраняться не будут, значение же параметра uird.changes будет использовано
 +
только когда мы изменим значение uird.mode на toxzm в через cmdline ядра.
 +
 
 +
* сборка слоеной фс - /sysroot из бандлов подходящих под фильтр uird.ro=*.xzm,*/patches (в нашем случае это модули и каталоги c именем patches) и каталога для записи изменений в верхнем слое.
 +
 
 +
* копирование в /sysroot бандлов подходящих под фильтр uird.cp=*.cp ( по умолчанию в Барии таких нет)
 +
 
 +
* поиск в источниках и обработка системного конфигурационного файла описанного параметром  uird.config=ROSA.ini
 +
 
 +
* завершение uird-init корневой ФС становится /sysroot, загрузка передается /sbin/init целевой системы.

Версия 14:02, 18 августа 2022

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 как блочное устройство. Бандл - bundle - промежуточная точка монтирования модуля. Модуль не может быть сразу смонтирован в aufs или overlayfs, эти файловые системы собираются из каталогов. Модули монтируются в папки в /.memory/bundles/имя_модуля, а слоеная фс собирается из этих бандлов. sysroot, rootfs - в случае UIRD это корневая фс линукс собранная в UIRD из слоев объединенных aufs или overlayfs. Именно с этой ФС продолжится загрузка на этапе после UIRD. Создание rootfs - основная задача UIRD. Чистый режим - режим загрузки при котором изменения сделанные в системе не сохраняются после перезагрузки (как livecd)


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

Общее количество параметров 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 - это второй источник
  • поиск модулей и создание бандлов, за это отвечают параметры:
 uird.load=/base/,/modules/
 uird.noload=/saves,/homes

и

 uird.ro=*.xzm,*/patches
 uird.rw=
 uird.cp=*.cp
 

параметрам передаются фильтры по которым отсеиваются не подходящие файлы и каталоги. Конкретно эти фильтры можно описать так:

 Найти файлы и папки в полном имени которых встречается "/base/" или "/modules"
 При этом в именах не встречается '/saves' или '/homes' (чтобы случайно не подключить модули лежащие например в домашней папке)
 Также имя должно удовлетворять любому из фильтров описанных в uird.ro=*.xzm,*/patches, uird.rw=, uird.cp=*.cp.

для всего найденного создаются бандлы.

  • поиск и инициализация источника который будет верхним слоем слоеной фс. То есть где будут изменения сделанные в системе. Управляется параметрами:

uird.mode uird.changes. Это может быть папка в одном из источников, раздел, папка на разделе, файл образ форматированный ext/2/3/4, btrfs с расширением .img Для включения сохранений таким способом параметры должны быть приведены к такому виду:

 uird.mode=changes
 uird.changes=/куда/писать

В нашем конфиге:

 uird.mode=clean
 uird.changes=/ROSA-DATA/saves/toxzm.cfg

clean здесь означает "Чистый режим", то есть верхним слоем aufs будет папка в tmpfs и изменения при перезагрузке сохраняться не будут, значение же параметра uird.changes будет использовано только когда мы изменим значение uird.mode на toxzm в через cmdline ядра.

  • сборка слоеной фс - /sysroot из бандлов подходящих под фильтр uird.ro=*.xzm,*/patches (в нашем случае это модули и каталоги c именем patches) и каталога для записи изменений в верхнем слое.
  • копирование в /sysroot бандлов подходящих под фильтр uird.cp=*.cp ( по умолчанию в Барии таких нет)
  • поиск в источниках и обработка системного конфигурационного файла описанного параметром uird.config=ROSA.ini
  • завершение uird-init корневой ФС становится /sysroot, загрузка передается /sbin/init целевой системы.