Jump to content

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

Новая страница: «=== '''UIRD - Unified Init Ram Disk system''' === Код, описание, доки: https://github.com/neobht/uird Форум: https://forum.magos-linux.ru/c/uird/5 Это разновидность initrd, его задача собрать из слоёв '''aufs/overlayfs''' корневую файловую систему и передать загрузку /sbin/init (systemd) с этой корневой файловой системой. В ос...»
 
 
(не показано 12 промежуточных версий этого же участника)
Строка 1: Строка 1:
=== '''UIRD - Unified Init Ram Disk system''' ===
=== UIRD - Unified Init Ram Disk system ===
Код, описание, доки: https://github.com/neobht/uird
Код, описание, доки: https://github.com/neobht/uird


Форум: https://forum.magos-linux.ru/c/uird/5
Форум: https://forum.magos-linux.ru/c/uird/5


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


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


<nowiki>*</nowiki> Отсутствие привязки к конкретному дистрибутиву
* Отсутствие привязки к конкретному дистрибутиву


<nowiki>*</nowiki> Отсутствие привязки к конкретным каталогам для поиска источников
* Отсутствие привязки к конкретным каталогам для поиска источников


<nowiki>*</nowiki> Возможность подключения практически любых источников, которые можно смонтировать в linux  
* Возможность подключения практически любых источников, которые можно смонтировать в linux  


<nowiki>*</nowiki> Поддержка различных сетевых протоколов для загрузки по сети
* Поддержка различных сетевых протоколов для загрузки по сети


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


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


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


long "  uird.union=overlay - использовать overlayfs ( по умолчанию aufs)"
* '''Слой''' - все что можно смонтировать в линукс, img, iso,также слоем может быть папка, но чаще всего это модуль.


+
* '''Модуль''' - squashfs архив, отличается от обычных архивов тем, что может быть смонтирован RO как блочное устройство.


= green ; echo -n 'Просто полезные параметры ' ; = default ; long
* '''Бандл''' - bundle - промежуточная точка монтирования модуля. Модуль не может быть сразу смонтирован в aufs или overlayfs, эти файловые системы собираются из каталогов. Модули монтируются в папки в /.memory/bundles/имя_модуля, а слоеная фс собирается из этих бандлов.


+
* '''sysroot, rootfs''' - в случае UIRD это корневая фс линукс собранная в UIRD из слоев объединенных aufs или overlayfs. Именно с этой ФС продолжится загрузка на этапе после UIRD.Создание rootfs - основная задача UIRD.


long "  uird.home=/что/подключать - монтирование папки или образа в /home целевой системы"
* '''Чистый режим''' - режим загрузки, при котором изменения сделанные в системе не сохраняются после перезагрузки (как livecd)


long "  uird.mounts=что::MNT=куда  - монтирование чего угодно куда угодно, может заменить uird.home=, только больше писать. Смонтированное здесь участвует в поиске источников."
==== Последовательность загрузки с описанием основных параметров: ====
Общее количество параметров UIRD достаточно велико, но большая часть из них относится к дополнительному функционалу. Например конфигурационный файл для загрузки ОС Барий, точнее один из конфигов, выглядит так:


long "  uird.swap=auto - найти и подключить своп раздел, кроме auto есть другие варианты, например можно подключить pagefile.sys от windows"
    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


long "  uird.copy2ram - скопировать модули в RAM и подключить оттуда, может быть полезным с очень медленным или нестабильным источником модулей. Например сетевым."
И даже здесь не все параметры необходимы. Треть можно убрать и система все равно загрузится


long "  uird.freemedia - используется совместно с uird.copy2ram, размонтирует все локальные диски после копирования модулей в ОЗУ. То есть можно загрузить с флешки и вытащить флешку."


long "  qs, qse - консоль в начале и в конце uird-init (полезно для диагностики, но можно использовать для операций с файлами, в UIRD есть mc, а все диски автоматически монтируются в /mnt/*)"
Основной сценарий работы UIRD - '''/uird-init''', в нем последовательно выполняются функции из файла '''/livekitlib''', чтобы в итоге получить rootfs и передать загрузку целевой системе.


+  Важные моменты
===== Если оставить только основные моменты процесс выглядит так: =====
* предварительные действия 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.
** -для всего найденного создаются бандлы.


= green ; echo -n 'Указание источника для его поиска, ' ; = default ; long ' одинаково работает для uird.from, uird.mounts, uird.home, uird.changes'
* поиск и инициализация источника, который будет верхним слоем слоеной фс. То есть где будут изменения сделанные в системе. Управляется параметрами:"
** - uird.mode - режим работы с сохранениями
** - uird.changes - Это может быть папка в одном из источников, раздел, папка на разделе, файл образ форматированный ext/2/3/4, btrfs с расширением .img, в том числе по сети.


+
*Для включения сохранений таким способом параметры должны быть приведены к такому виду:"


long "   uird.from=/FOLDER_NAME - поиск папки /FOLDER_NAME в корне всех разделов, всех доступных дисков и уже подключенных источников."
    uird.mode=changes
    uird.changes=/куда/писать


long "   uird.from=/FOLDER_NAME/file.img - поиск образа file.img в папке /FOLDER_NAME в корне всех разделов, если файл не найден, но найдена папка /FOLDER_NAME, UIRD предложит создать образ, нужно выбрать FS и размер."


long "   uird.from=/dev/sda1/FOLDER_NAME - папка FOLDER_NAME в корне диска /dev/sda1"
В нашем конфиге:


long "   uird.from=LABEL@/FOLDER_NAME - папка FOLDER_NAME в корне раздела с меткой LABEL, вместо метки можно вписать uuid или даже часть uuid, лишь бы часть была достаточно уникальная"
    uird.mode=clean
    uird.changes=/ROSA-DATA/saves/toxzm.cfg


long "   uird.from=nfs://server/FOLDER_NAME - папка в корне nfs ресурса, аналогично и с другими доступными сетевыми протоколами"
'''clean''' здесь означает '''Чистый режим''', то есть верхним слоем aufs будет папка в tmpfs и изменения при перезагрузке сохраняться не будут, значение же параметра uird.changes будет использовано '''только когда мы изменим значение uird.mode на toxzm через cmdline ядра'''


+
* сборка слоеной фс - /sysroot, из бандлов подходящих под фильтр uird.ro=*.xzm,*/patches (в нашем случае это модули и каталоги c именем patches) и каталога для записи изменений в верхнем слое.


= green ; echo -n 'Списки параметров и подпараметры ' ; = default ; long ' '
* копирование в /sysroot бандлов подходящих под фильтр uird.cp=*.cp ( по умолчанию в Барии таких нет)


+
* поиск в источниках и обработка системного конфигурационного файла описанного параметром '''uird.config=ROSA.ini'''


long "Списки разделаются запятыми, подпараметры отделяются двойным двоеточием. Например:"
* завершение uird-init корневой ФС становится /sysroot, загрузка передается /sbin/init целевой системы.


+
===== Описание дополнительных параметров: =====


long "    uird.from=/ROSA-SYSTEM::MNT_OPTS=ro+noexec,/ROSA-DATA"
Из конфигурационного файла Rosa-ovl:  


long " "
* uird.rootfs=zram::SIZE=85% - настройки для создания каталога /.memory, это важно потому, что здесь же располагается /.memory/changes, где будут накапливаться изменения в чистом режиме. Конкретно эта запись означает: Использовать для /.memory блочное устройство со сжатием в ОЗУ - zram, размер 85% от размера ОЗУ.


long "uird.from получил список из двух параметров, у первого есть подпараметр MNT_OPTS=ro+noexec"
* uird.find_params=-maxdepth_3 - дополнительные параметры для find при поиске модулей. Здесь глубина поиска ограничена тремя вложенными каталогами.


+
* uird.syscp=/livekitlib::/usr/lib/rosa-rw/scripts - копирование файлов из uird в систему, здесь забираем библиотеку функций для uird-init, может использоваться в скриптах.


= green ; echo -n 'Подпараметры для источников ' ; = default ; long
* uird.shutdown - включение создания /run/initramfs - необходимо для uird.mode=toxzm, в остальных случаях позволяет корректно размонтировать то что не сможет systemd при выключении системы


long "   "
* uird.preinit - включение обработки системного ini. Если uird.config= задан, а uird.preinit нет, конфиг будет найден, но не обработан (в MagOS так, обрабатывается скриптами MagOS)


long "   MNT=/mnt/myfolder - дополнительная точка монтирования"
* uird.union=overlay - использовать overlayfs ( по умолчанию aufs)


long "   MNT_OPTS= параметры монтирования, разделенные плюсом"
===== Просто полезные параметры: =====


long "   FORCE=yes - не прерывать загрузку, если источник не найден"
* uird.home=/что/подключать - монтирование папки или образа в /home целевой системы


long "   FSCK=yes - проверить FS источника на ошибки перед использованием"
* uird.mounts=что::MNT=куда  - монтирование чего угодно куда угодно, может заменить uird.home=, только больше писать. Смонтированное здесь участвует в поиске источников.


long "   INIT=yes - инициализация источника. Используется совместно с MNT=, после монтирования источника в дополнительную точку монтирования, осуществляется поиск аналогичных каталогов в бандлах и их содержимое копируется в эту точку монтирования. К примеру, если у вас uird.mounts=/myhomes::MNT=/home::INIT=yes, то после монтирования содержимое папок /home со всех бандлов будет скопировано в /home целевой системы, в противном случае папка будет пуста."
* uird.swap=auto - найти и подключить своп раздел, кроме auto есть другие варианты, например можно подключить pagefile.sys от windows


long "   TIMEOUT=3 количество попыток подключения источника"
* uird.copy2ram - скопировать модули в RAM и подключить оттуда, может быть полезным с очень медленным или нестабильным источником модулей. Например сетевым.


+
* uird.freemedia - используется совместно с uird.copy2ram, размонтирует все локальные диски после копирования модулей в ОЗУ. То есть можно загрузить с флешки и вытащить флешку.


= green ; echo -n 'Параметры в конфигурационных файлах uird и в cmdline ядра ' ; = default ; long
* qs, qse - консоль в начале и в конце uird-init (полезно для диагностики, но можно использовать для операций с файлами, в UIRD есть mc, а все диски автоматически монтируются в /mnt/*)


+
===== Важные моменты: =====


long "Параметры, которые будут использованы UIRD, формируются на основе параметров записанных в конфигурационный файл UIRD и параметров переданных ядру. Какое значение будет в итоге иметь конкретный параметр зависит от того как вы записали его в cmdline ядра."
====== Указание источника для его поиска: ======


+
одинаково работает для '''uird.from, uird.mounts, uird.home, uird.changes'''


long "   uird.from=/ROSA-DATA - заменит значение из конфига"
* uird.from=/FOLDER_NAME - поиск папки /FOLDER_NAME в корне всех разделов, всех доступных дисков и уже подключенных источников."


long "   uird.from+=/ROSA-DATA - добавит /ROSA-DATA к списку источников, которые уже есть в конфиге"
* uird.from=/FOLDER_NAME/file.img - поиск образа file.img в папке /FOLDER_NAME в корне всех разделов, если файл не найден, но найдена папка /FOLDER_NAME, UIRD предложит создать образ, нужно выбрать FS и размер.


+
* uird.from=/dev/sda1/FOLDER_NAME - папка FOLDER_NAME в корне диска /dev/sda1


+  Сборка uird  
* uird.from=LABEL@/FOLDER_NAME - папка FOLDER_NAME в корне раздела с меткой LABEL, вместо метки можно вписать uuid или даже часть uuid, лишь бы часть была достаточно уникальная


+
* uird.from=nfs://server/FOLDER_NAME - папка в корне nfs ресурса, аналогично и с другими доступными сетевыми протоколами


long "Для сборки UIRD в Росе или под Барием можно использовать пакет из репозитория: "
====== Списки параметров и подпараметры: ======


+
Списки разделаются запятыми, подпараметры отделяются двойным двоеточием. Например:


long "    dnf install mkuird "
    uird.from=/ROSA-SYSTEM::MNT_OPTS=ro+noexec,/ROSA-DATA


long "    mkuird Имя_конфига"
uird.from получил список из двух параметров, у первого есть подпараметр MNT_OPTS=ro+noexec


+
====== Подпараметры для источников: ======


long "Имя_конфига здесь имя конфигурационного файла uird из:"
* MNT=/mnt/myfolder - дополнительная точка монтирования


+
* MNT_OPTS= параметры монтирования, разделенные плюсом


long "    /usr/share/uird/configs/uird_configs"
* FORCE=yes - не прерывать загрузку, если источник не найден


+
* FSCK=yes - проверить FS источника на ошибки перед использованием


long "Конфигов для бария там нет нужно будет доставать из готового UIRD или из сборочных скриптов бария на abf.io."
* INIT=yes - инициализация источника. Используется совместно с MNT=, после монтирования источника в дополнительную точку монтирования, осуществляется поиск аналогичных каталогов в бандлах и их содержимое копируется в эту точку монтирования. К примеру, если у вас uird.mounts=/myhomes::MNT=/home::INIT=yes, то после монтирования содержимое папок /home со всех бандлов будет скопировано в /home целевой системы, это произойдет если папка была пуста. То есть параметр работает только один раз.


+
* TIMEOUT=3 - количество попыток подключения источника, полезно для сетевых и "медленных" носителей


+  Сборка uird из исходников
===== Параметры в конфигурационных файлах uird и в cmdline ядра: =====


+


long "    git clone --recursive <nowiki>https://github.com/neobht/uird.git</nowiki>"


long "    cd  uird"
Параметры, которые будут использованы UIRD, формируются на основе параметров записанных в конфигурационный файл UIRD и параметров переданных ядру. Какое значение будет в итоге иметь конкретный параметр зависит от того как вы записали его в cmdline ядра.


long "    ./make_busybox.sh"
    uird.from=/ROSA-DATA - заменит значение из конфига"
    uird.from+=/ROSA-DATA - добавит /ROSA-DATA к списку источников, которые уже есть в конфиге"


long "    ./make_dracut.sh"
==== Сборка uird ====


+
===== Для сборки UIRD в Росе можно использовать пакет из репозитория: =====


long "Зависимости необходимые для сборки UIRD приблизительно соответствуют зависимостям пакета dracut, можно установить его чтобы не устанавливать пакеты по одному."
    dnf install mkuird
    mkuird Имя_конфига


long "Отсутствие бинарных файлов предоставляющих дополнительный функционал не помешает сборке uird, смотрите лог сборки. Это например aria2, qemu-img и проч."
Имя_конфига здесь имя конфигурационного файла uird из:
    /usr/share/uird/configs/uird_configs


+
===== Сборка UIRD в Барии: =====


long "    ./mkuird Имя_конфига"
    barium getmod mkuird-dev
    reboot
    mkuird Имя_конфига


+
mkuird в модуле mkuird-dev содержит все необходимые зависимости, а главное конфигурационные файлы для Бария.


long "Если в результате UIRD не будет собран, смотрите лог дракута ./dracut-uird.log"
 
===== Сборка uird из исходников: =====


+
    git clone --recursive <nowiki>https://github.com/neobht/uird.git</nowiki>"
    cd  uird"
    ./make_busybox.sh"
    ./make_dracut.sh"


= green ; echo -n 'Полезные ключи mkuird: ' ; = default ; long
Зависимости необходимые для сборки UIRD приблизительно соответствуют зависимостям пакета dracut, можно установить его чтобы не устанавливать пакеты по одному."


+
Отсутствие бинарных файлов предоставляющих дополнительный функционал не помешает сборке UIRD, смотрите лог сборки. Это например aria2, qemu-img и проч.


long "Исключения:"
    ./mkuird Имя_конфига"


+
Если в результате UIRD не будет собран, смотрите лог дракута ./dracut-uird.log


long "    -e список,исключений,через,запятую"
===== Полезные ключи mkuird: =====


+
====== Исключения: -e <список,исключений,через,запятую> ======
Тут могут быть модули ядра, модули дракута, исполняемые команды ; или группы модулей, исполняемых файлов и модулей дракута. Смотрите mkuird.cfg. Например:"


long "Тут могут быть модули ядра, модули дракута, исполняемые команды ; или группы модулей, исполняемых файлов и модулей дракута. Смотрите mkuird.cfg. Например:"


long "   "
    ./mkuird MagOS -e plymouth,qemu-img,KM_virt"


long "    ./mkuird MagOS -e plymouth,qemu-img,KM_virt"
====== Ядро:  -k <версия_ядра> ======
указываем так так, как называется папка с модулями ядра в /lib/modules, UIRD будет собран под указанное ядро, вместо текущего


    ./mkuird Rosa-ovl -k 6.6.47-generic-1rosa2021.1-x86_64


long "Ядро: " + long "-k версия_ядра (так как называется папка с модулями ядра в /lib/modules)" long " " long "UIRD будет собран под указанное ядро, вместо текущего." + long ""
[[Категория:ОС_Роса_Барий]]

Текущая версия от 15:22, 27 марта 2025

UIRD - Unified Init Ram Disk system

Код, описание, доки: https://github.com/neobht/uird

Форум: https://forum.magos-linux.ru/c/uird/5

Это разновидность 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 и передать загрузку целевой системе.

Если оставить только основные моменты процесс выглядит так:
  • предварительные действия 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 целевой системы.
Описание дополнительных параметров:

Из конфигурационного файла Rosa-ovl:

  • uird.rootfs=zram::SIZE=85% - настройки для создания каталога /.memory, это важно потому, что здесь же располагается /.memory/changes, где будут накапливаться изменения в чистом режиме. Конкретно эта запись означает: Использовать для /.memory блочное устройство со сжатием в ОЗУ - zram, размер 85% от размера ОЗУ.
  • uird.find_params=-maxdepth_3 - дополнительные параметры для find при поиске модулей. Здесь глубина поиска ограничена тремя вложенными каталогами.
  • uird.syscp=/livekitlib::/usr/lib/rosa-rw/scripts - копирование файлов из uird в систему, здесь забираем библиотеку функций для uird-init, может использоваться в скриптах.
  • uird.shutdown - включение создания /run/initramfs - необходимо для uird.mode=toxzm, в остальных случаях позволяет корректно размонтировать то что не сможет systemd при выключении системы
  • uird.preinit - включение обработки системного ini. Если uird.config= задан, а uird.preinit нет, конфиг будет найден, но не обработан (в MagOS так, обрабатывается скриптами MagOS)
  • uird.union=overlay - использовать overlayfs ( по умолчанию aufs)
Просто полезные параметры:
  • uird.home=/что/подключать - монтирование папки или образа в /home целевой системы
  • uird.mounts=что::MNT=куда  - монтирование чего угодно куда угодно, может заменить uird.home=, только больше писать. Смонтированное здесь участвует в поиске источников.
  • uird.swap=auto - найти и подключить своп раздел, кроме auto есть другие варианты, например можно подключить pagefile.sys от windows
  • uird.copy2ram - скопировать модули в RAM и подключить оттуда, может быть полезным с очень медленным или нестабильным источником модулей. Например сетевым.
  • uird.freemedia - используется совместно с uird.copy2ram, размонтирует все локальные диски после копирования модулей в ОЗУ. То есть можно загрузить с флешки и вытащить флешку.
  • qs, qse - консоль в начале и в конце uird-init (полезно для диагностики, но можно использовать для операций с файлами, в UIRD есть mc, а все диски автоматически монтируются в /mnt/*)
Важные моменты:
Указание источника для его поиска:

одинаково работает для uird.from, uird.mounts, uird.home, uird.changes

  • uird.from=/FOLDER_NAME - поиск папки /FOLDER_NAME в корне всех разделов, всех доступных дисков и уже подключенных источников."
  • uird.from=/FOLDER_NAME/file.img - поиск образа file.img в папке /FOLDER_NAME в корне всех разделов, если файл не найден, но найдена папка /FOLDER_NAME, UIRD предложит создать образ, нужно выбрать FS и размер.
  • uird.from=/dev/sda1/FOLDER_NAME - папка FOLDER_NAME в корне диска /dev/sda1
  • uird.from=LABEL@/FOLDER_NAME - папка FOLDER_NAME в корне раздела с меткой LABEL, вместо метки можно вписать uuid или даже часть uuid, лишь бы часть была достаточно уникальная
  • uird.from=nfs://server/FOLDER_NAME - папка в корне nfs ресурса, аналогично и с другими доступными сетевыми протоколами
Списки параметров и подпараметры:

Списки разделаются запятыми, подпараметры отделяются двойным двоеточием. Например:

   uird.from=/ROSA-SYSTEM::MNT_OPTS=ro+noexec,/ROSA-DATA

uird.from получил список из двух параметров, у первого есть подпараметр MNT_OPTS=ro+noexec

Подпараметры для источников:
  • MNT=/mnt/myfolder - дополнительная точка монтирования
  • MNT_OPTS= параметры монтирования, разделенные плюсом
  • FORCE=yes - не прерывать загрузку, если источник не найден
  • FSCK=yes - проверить FS источника на ошибки перед использованием
  • INIT=yes - инициализация источника. Используется совместно с MNT=, после монтирования источника в дополнительную точку монтирования, осуществляется поиск аналогичных каталогов в бандлах и их содержимое копируется в эту точку монтирования. К примеру, если у вас uird.mounts=/myhomes::MNT=/home::INIT=yes, то после монтирования содержимое папок /home со всех бандлов будет скопировано в /home целевой системы, это произойдет если папка была пуста. То есть параметр работает только один раз.
  • TIMEOUT=3 - количество попыток подключения источника, полезно для сетевых и "медленных" носителей
Параметры в конфигурационных файлах uird и в cmdline ядра:

Параметры, которые будут использованы UIRD, формируются на основе параметров записанных в конфигурационный файл UIRD и параметров переданных ядру. Какое значение будет в итоге иметь конкретный параметр зависит от того как вы записали его в cmdline ядра.

   uird.from=/ROSA-DATA - заменит значение из конфига"
   uird.from+=/ROSA-DATA - добавит /ROSA-DATA к списку источников, которые уже есть в конфиге"

Сборка uird

Для сборки UIRD в Росе можно использовать пакет из репозитория:
   dnf install mkuird
   mkuird Имя_конфига

Имя_конфига здесь имя конфигурационного файла uird из:

   /usr/share/uird/configs/uird_configs
Сборка UIRD в Барии:
   barium getmod mkuird-dev
   reboot
   mkuird Имя_конфига

mkuird в модуле mkuird-dev содержит все необходимые зависимости, а главное конфигурационные файлы для Бария.

 

Сборка uird из исходников:
   git clone --recursive https://github.com/neobht/uird.git"
   cd  uird"
   ./make_busybox.sh"
   ./make_dracut.sh"

Зависимости необходимые для сборки UIRD приблизительно соответствуют зависимостям пакета dracut, можно установить его чтобы не устанавливать пакеты по одному."

Отсутствие бинарных файлов предоставляющих дополнительный функционал не помешает сборке UIRD, смотрите лог сборки. Это например aria2, qemu-img и проч.

   ./mkuird Имя_конфига"

Если в результате UIRD не будет собран, смотрите лог дракута ./dracut-uird.log

Полезные ключи mkuird:
Исключения: -e <список,исключений,через,запятую>

Тут могут быть модули ядра, модули дракута, исполняемые команды ; или группы модулей, исполняемых файлов и модулей дракута. Смотрите mkuird.cfg. Например:"


   ./mkuird MagOS -e plymouth,qemu-img,KM_virt"
Ядро: -k <версия_ядра>

указываем так так, как называется папка с модулями ядра в /lib/modules, UIRD будет собран под указанное ядро, вместо текущего

   ./mkuird Rosa-ovl -k 6.6.47-generic-1rosa2021.1-x86_64