Унифицированная система инициализации для модульных Linux систем.
UIRD - это разновидность initrd, его задача собрать из слоёв aufs/overlayfs корневую файловую систему и передать загрузку /sbin/init (systemd)
с этой корневой файловой системой.
В основе реализации UIRD лежит набор скриптов инициализации dracut (модули base, kernel-modules),
сценарий инициализации uird-init и библиотека функций к нему livekitlib (доработанный аналог liblinuxlive, livekitlib проекта Slax).
* Отсутствие привязки к конкретному дистрибутиву
* Отсутствие привязки к конкретным каталогам для поиска источников
* Возможность подключения практически любых источников, которые можно смонтировать в linux
* Поддержка различных сетевых протоколов для загрузки по сети
* Адаптация UIRD под вашу ОС сводится к написанию одного конфигурационного файла
* uird.параметр=значение - установить новое значение, которое заменит значение по умолчанию;
* uird.параметр+=значение - добавить значение к списку значений по умолчанию
В настоящий момент параметров более двух десятков, большинство из них лишь расширяют базовый функционал дополнительными возможностями.
* uird.ro[+]= - фильтр для модулей/директорий, которые монтируются в режиме RO
* uird.rw[+]= - фильтр для модулей/директорий, которые монтируются в режиме RW
* uird.cp[+]= - фильтр для модулей/директорий, содержимое которых копируется в корень
* uird.copy2ram[+]= - фильтр для модулей/директорий, которые копируются в RAM
* uird.load[+]= - фильтр для модулей/директорий, которые необходимо подключить на этапе загрузки
* uird.noload[+]= - фильтр для модулей/директорий, которые необходимо пропустить во время загрузки
* uird.from[+]= - источники, где лежат модули/директории для системы
* uird.home= - источник, где хранятся домашние директории пользователей
* uird.changes= - источник, где хранить персистентные изменения
* uird.mode=MODE - режим работы сохранениями (clean, clear, changes, machines)
* uird.cache[+]= - источники, в которые стоит синхронизировать модули/директории
* uird.copy2cache[+]= - фильтр для модулей/директорий, которые копируются в КЭШ
* uird.homes[+]= - источники, где хранятся домашние директории пользователей (объединяются AUFS / OVERLAYFS)
* uird.mounts= - источники , которые будут смонтированы в указанные точки монтирования
* uird.find_params[+]= - параметры для утилиты find при поиске модулей (например: -maxdepth,2)
* uird.help - печатает подсказку по параметрам UIRD
* uird.break=STAGE - остановка загрузки на стадии STAGE и включение режима отладки (debug)
* uird.scan= - поиск установленных OC и компонентов для определения параметров uird
* uird.swap= - список SWAP разделов и/или файлов для подключения, разделитель в списке ";" или ","
* uird.syscp[+]= - список файлов (каталогов) для копирования из UIRD в систему /путь/файл::/путь/каталог
* uird.basecfg= - расположение базового конфигурационного файла basecfg.ini
* uird.config= - расположение конфигурационного файла системы MagOS.ini
* uird.sgnfiles[+]= - перечисление файлов-маркеров для поиска источников указанных в uird.from= в соответсвии с их порядком перечисления
* uird.ip= - IP:GW:MASK, если не указан, то используется DHCP
* uird.netfsopt[+]= - дополнительные опции монтирования сетевых ФС: sshfs,nfs,curlftpfs,cifs
* uird.aria2ram= - список источников, которые нужно скопировать из сети в RAM до начала поиска uird.from
* uird.freemedia - освободить (размонтировать) источники, используется совместно с uird.copy2ram
* uird.force - продолжать загрузку, не задавая вопросов, если источник не найден
* uird.run[+]= - запуск внешних исполняемых файлов
* uird.rootfs - размер и тип roots (tmpfs/zram)
* uird.union=overlay - использовать overlayfs вместо aufs
* uird.shutdown - создать каталог /run/initramfs, который использует systemd при выключении системы, передавая туда управление
* uird.preinit - включить обработку ini файла, заданного в uird.config
* uird.hide - включить режим сокрытия точки монтирования MEMORY (полезно для режима kiosk)
* quickshell, qs - консоль на начальном этапе работы uird-init
* qse - консоль в конце работы uird-init
* debug - подробный вывод и приостановка uird-init на нескольких этапах работы
* uird.from="/MagOS;$( eval [ $(date +%u) -gt 5 ] && echo /MagOS-Data)" - подключать MagOS-Data только по выходным
* uird.changes="$(mkdir -p /MagOS-Data/changes && echo /MagOS-Data/changes)"
* $(udhcpc) - поднять сеть (eth0 dhcp)
Для более подробного описания параметров смотрите встроенную подсказку
/path/dir - директория на любом доступном носителе
/dev/[..]/path/dir - директория на заданном носителе
LABEL@/path/dir - директория на носителе с меткой LABEL
UUID@/path/dir - директория на носителе с uuid UUID
file-dvd.iso, file.img - образ диска (ISO, образ блочного устройства, VDI, VHDD и др.)
http://server/path/... - источник, доступный по HTTP (используется httpfs)
ssh://server/path/... - источник, доступный по SSH (используется sshfs)
ftp://server/path/... - источник, доступный по FTP (используется curlftpfs)
nfs://server/path/... - источник, доступный по NFS
cifs://server/path/... - источник, доступный по CIFS
Упрощенная схема, не учитывающая параметры uird.cache, uird.mounts, uird.homes
и проч.
Более подробную информацию ищите во встроенной справке по конкретным параметрам.
-
Осуществляется поиск конфигурационного файла по пути, указанному в параметре
uird.basecfg=
(дефолтное значение задаётся при сборке uird) -
Устанавливаются параметры из конфигурационного файла, которые ещё не установлены в параметрах ядра
-
Происходит монтирование источников base-уровня в порядке, указанном в параметре
uird.from=
-
Происходит монтирование источников home-уровня, согласно параметру
uird.home=
-
Происходит подключение в самый верхний уровень AUFS источника персистентных изменений, указанного в параметрами
uird.changes=, uird.mode=
-
Осуществляется синхронизация base уровня в ОЗУ с учётом параметра
uird.copy2ram=
-
Осуществляется поиск модулей/директорий в ОЗУ и base-уровне и подключение их на [верхний-1] уровень AUFS или копирование в корень (с учётом фильтров, указанных в параметрах
uird.load=, uird.noload=,uird.ro=,uird.rw=,uird.cp=
) со следующим приоритетом:uird.load --> uird.noload uird.cp --> uird.rw --> uird.ro
-
Выполняются скрипты rc.preinit
/memory/
├── bundles - точка монтирования модулей
│ ├── 00-kernel.xzm
│ ├── 01-firmware.xzm
│ ├── 10-core.xzm
│ ├── 80-eepm-1.5.2.xzm
│ └── ... - и т.д.
├── changes - точка монтирования для хранения изменений
│ ├── etc
│ ├── home
│ ├── memory
│ ├── run
│ ├── var
│ └── ... - и т.д.
├── data - точка монтирования источников
│ ├── cache - кеш уровня
│ ├── homes - homes уровня
│ ├── mounts - mounts уровня
│ ├── machines - машинно-зависимых изменений
│ └── from - базового уровня
├── copy2ram - точка монтирования для синхронизации модулей/директорий в ОЗУ
├── ovl - точка монтирования вспомогательных каталогов OverlayFS
│ ├── lowerdir - lowerdir
│ └── workdir - workdir
├── layer-base - точка монтирования базового уровня
│ ├── 0 - ресурс первого источника
│ ├── 1 - ресурс второго источника (в порядке перечисления в uird.from=)
│ └── ... - и т.д.
├── layer-cache - точка монтирования кеш уровня
│ ├── 0 - ресурс первого источника
│ ├── 1 - ресурс второго источника (в порядке перечисления в uird.cache=)
│ └── ... - и т.д.
├── layer-homes - точка монтирования homes уровня
│ ├── 0 - ресурс первого источника
│ ├── 1 - ресурс второго источника (в порядке перечисления в uird.homes=)
│ └── ... - и т.д.
├── layer-mounts - точка монтирования mounts уровня
│ ├── 0 - ресурс первого источника
│ ├── 1 - ресурс второго источника (в порядке перечисления в uird.mounts=)
│ └── ... - и т.д.
├── cmdline - системный файл для хранения дополнительных параметров командной строки
└── MagOS.ini.gz - системный файл для хранения конфигурационного файла
uird.config=MagOS.ini
uird.ramsize=70%
uird.ro=*.xzm;*.rom;*.rom.enc;*.pfs
uird.rw=*.rwm;*.rwm.enc
uird.cp=*.xzm.cp,*/rootcopy
uird.load=/base/,/modules/,rootcopy
uird.noload=/MagOS-Data/changes,/MagOS-Data/homes
uird.from=/MagOS;/MagOS-Data
uird.find_params=-maxdepth_3
uird.mode=clean
uird.changes=/MagOS-Data/changes
uird.syscp=/livekitlib::/usr/lib/magos/scripts;/uird.scan::/usr/lib/magos/scripts;/liblinuxlive::/mnt/live/liblinuxlive
Расширения поддерживаемые в MagOS Linux с этим конфигом:
*.ROM - RO слой
*.RWM - RW слой
*.XZM - RO слой с squashfs
*.XZM.CP - распаковывается в корень системы
*.RWM.ENC - RW слой криптованый
*.ROM.ENC - RO слой криптованый
Другие примеры конфигурационных файлов смотрите тут
В основе реализации лежит набор скриптов инициализации dracut (модули base, kernel-modules ) и скрипты uird (livekitlib+uird-init).
cmdline-hook: parse-root-uird.sh (заглушка)
mount-hook: mount-uird.sh (выполняет скрипт uird-init)
- livekitlib - содержит библиотеку функций системы инициализации.
- uird-init - последовательно выполняет набор функций из livekitlib и осуществляет каскадно-блочное монтирование модулей системы в единый корень AUFS в директорию, указанную в переменной dracut $NEWROOT.
Смотрите описание процесса: uird_build.md