Barium:UIRD — различия между версиями
Betcher (обсуждение | вклад) (→Последовательность загрузки с описанием основных параметров) |
Betcher (обсуждение | вклад) |
||
Строка 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 целевой системы.