UIRD - Unified Init Ram Disk system

Унифицированная система инициализации для модульных linux систем. В основе реализации лежит набор скриптов инициализации dracut (модули base, kernel-modules), сценарий инициализации uird-init и библиотека функций к нему livekitlib.

Под унификацией мы понимаем:
  • возможность загрузки одним и тем же набором uird + ядро различных лайв дистрибутивов linux с возможностью сохранения системных изменений;
  • прозрачная работа с различными источниками; не только hdd и cd/dvd, но и сетевыми http, ftp, cifs, rsync etc; более того, источники различного типа могут быть использованы одновременно.
  • максимально унифицирована работа с различными хранилищами данных; модули squashfs (модуль.xzm), файлы-образы (файл.iso, файл.img), и просто каталоги подключаются одинаково. Их можно монтировать с использованием aufs (RO,RW), а также копировать данные в корень системы с сохранением структуры каталогов.

Более подробное описание процесса загрузки с использованием uird можно прочитать на сайте проекта: https://github.com/neobht/uird/

Параметры загрузки UIRD
  • uird.параметр=значение - присвоить новое значение, которое заменит значение по умолчанию;
  • uird.параметр+=значение - добавить значение к списку дефолтных значений
  • uird.basecfg= - расположение базового конфигурационного файла basecfg.ini
  • uird.config= - расположение конфигурационного файла системы MagOS.ini
  • uird.sgnfiles[+]= - перечисление файлов-маркеров для поиска источников указанных в uird.from= в соответсвии с их порядком перечисления
  • uird.ro[+]= - фильтр для модулей/директорий, которые монтируются в режиме RO
  • uird.rw[+]= - фильтр для модулей/директорий, которые монтируются в режиме RW
  • uird.cp[+]= - фильтр для модулей/директорий, содержимое которых копируется в корень
  • uird.copy2ram[+]= - фильтр для модулей/директорий, которые копируются в RAM
  • uird.copy2cache[+]= - фильтр для модулей/директорий, которые копируются в КЭШ
  • uird.ramsize= - размер RAM
  • uird.ip= - IP:GW:MASK , если не указан, то используется DHCP
  • uird.netfsopt[+]= - дополнительные опции монтирования сетевых ФС: sshfs,nfs,curlftpfs,cifs
  • uird.load[+]= - фильтр для модулей/директорий, которые необходимо подключить на этапе загрузки
  • uird.noload[+]= - фильтр для модулей/директорий, которые необходимо пропустить во время загрузки
  • uird.from[+]= - источники, где лежат модули/директории для системы
  • uird.cache[+]= - источники, в которые стоит синхронизировать модули/директории
  • uird.homes[+]= - источники, где хранятся домашние директории пользователей (объединяются AUFS)
  • uird.home= - источник, где хранятся домашние директории пользователей
  • uird.changes= - источник, где хранить персистентные изменения
  • uird.mode= - режим работы с сохранениями (по умолчанию clean)
  • uird.scan= - поиск установленных OC и компонентов для определения параметров uird
  • uird.swap= - список SWAP разделов и/или файлов для подключения, разделитель в списке »;» или »,»
  • uird.mounts= - источники которые будут смонтированы в конкретные точки ( например: uird.mounts=/MagOS-Data/www::/var/www)
  • uird.find_params[+]= - параметры для утилиты find при поиске модулей (например: -maxdepth,2)
  • uird.help - печатает подсказку по параметрам UIRD
  • uird.break=STAGE - остановка загрузки на стадии STAGE и включение режима отладки (debug)
  • quickshell, qs - консоль на начальном этапе работы uird-init
  • qse - консоль в конце работы uird-init
  • debug - подробный вывод и приостановка uird-init на нескольких этапах работы
Параметры по умолчанию и справочная система

UIRD имеет встроенную справочную систему. Для получения подсказки по параметрам и значению, которое имеет параметр по умолчанию нужно просто передать параметру «help». Например:

  • uird.from=help - получить справку по параметру uird.from и узнать его дефолтное значение
  • uird.help - справка по UIRD и параметрам загрузки
Загрузка реальной системы на примере MagOS linux (www.magos-linux.ru)

MagOS - изначально модульная система. Корневая ФС MagOS образуется многослойным подключением модулей squashfs с использованием aufs. Модули, которые необходимо подключить при загрузке, располагаются в каталогах:

  • /MagOS/base/
  • /MagOS/modules/
  • /MagOS-Data/modules/

Помимо подключения необходимо копировать в корневую ФС содержимое каталогов:

  • /MagOS/rootcopy/
  • /MagOS-Data/rootcopy/

Каталоги (источники) MagOS и MagOS-Data могут располагаться на разных дисках.

Чтобы загрузить MagOS c UIRD нужны следующие параметры:

  • uird.from=/MagOS;/MagOS-Data - найти два источника MagOS и MagOS-Data на всех доступных носителях;
  • uird.sgnfiles=MagOS.sgn;MagOS-Data.sgn - при поиске источников MagOS и MagOS-Data проверять наличие файлов-маркеров; MagOS.sgn в источнике MagOS и MagOS-Data.sgn в MagOS-Data
  • uird.load=/base/,/modules/,rootcopy - подключать модули и каталоги если в путях к ним содержится сочетание символов: »/base/», »/modules/» или «rootcopy» (описанию соответствуют: /MagOS/base/, /MagOS/modules, /MagOS-Data/modules/, плюс /MagOS/rootcopy/ и /MagOS-Data/rootcopy/)
  • uird.cp=*.xzm.cp,*/rootcopy - копировать в корневую ФС содержимое каталогов и модулей если в путях/именах присутствуют сочетания символов: *.xzm.cp */rootcopy (описанию соответствуют: /MagOS/rootcopy, /MagOS-Data/rootcopy)
  • uird.rw=*.rwm;*.rwm.enc - подключать в режиме RW модули если в путях/именах присутствуют сочетания символов: *.rwm;*.rwm.enc (таких модулей по умолчанию в MagOS нет, приведено как пример)
  • uird.ro=*.xzm;*.rom;*.rom.enc; - подключать в режиме RO модули если в путях/именах присутствуют сочетания символов: *.xzm;*.rom;*.rom.enc;
  • uird.config=MagOS.ini - найти и использовать системный конфигурационный файл MagOS.ini (не путать с конфигом uird - basecfg.ini)
  • uird.ramsize=70% - установить размер tmpfs для корневого раздела в 70% от размера RAM

Для включения режима сохранений в каталог /MagOS-Data/changes нужно добавить:

  • uird.changes=/MagOS-Data/changes
  • uird.mode=changes

Для включения режима машинно-зависимых сохранений в модули в каталог /MagOS-Data/machines на диск sdb1 нужно добавить:

  • uird.changes=/dev/sdb1/MagOS-Data/machines
  • uird.mode=machines

(внимание, без указания пути используется по умолчанию источник, где удается найти файл машинно-зависимых изменений среди двух источников по-умолчанию)

Для включения режима сохранений домашних директорий в /MagOS-Data/homes нужно добавить:

  • uird.home=/MagOS-Data/homes

Для включения режима сохранения для любого каталога используется параметр uird.mounts=source1::/mount/point1;source2::/mount/point2

  • uird.mounts=/MagOS/vartmp::/var/tmp

Для подключения swap раздела добавляем к параметрам:

  • uird.swap=/dev/sdb2 (или uird.swap=auto если swap раздел всего один)

Для того чтобы запретить подключение модулей из каталогов /MagOS/modules/ и /MagOS-Data/modules/ достаточно добавить:

  • uird.noload=modules

В качестве параметров могут быть использованы команды shell. Например:

  • uird.from=«$( [ $(date +%H) -gt 22 ] && echo Do_not_work_at_night )» - с 10 вечера до 12 ночи система не загрузится, так как uird.from получит значение Do_not_work_at_night
  • uird.from=»/MagOS;$( [ $(date +%u) -gt 5 ] && echo /MagOS-Data)» - источник MagOS-Data подключается только по выходным дням
  • «$(automount && mkdir /mnt/sda1/MagOS-Data/MYDIR && umount /mnt/sd*)» uird.changes=MYDIR - создать каталог /MagOS-Data/MYDIR на диске sda1 и подключить для хранения изменений.
Сравнительная таблица по параметрам uird и magos initrd для magos linux

(Примеры приведены относительно дефолтного конфига uird для magos linux и не отражают специфики системы фильтров uird)

Действиеmagos initrduird
Подключить все модули из optionalload=* uird.load+=optional
Подключить конкретный модуль из optional load=modulename.xzm uird.load+=optional/modulename.xzm
Подключить модули из каталога mymodules—-uird.load+=mymodules
Подключить модуль …mymodules/module.xzm—-uird.load+=mymodules/module.xzm
Не подключать модули из modulesnoload=modulesuird.noload=modules или uird.load=base;rootcopy
Не подключать конкретный модуль из base или modulesnoload=modulename.xzmuird.noload=modulename.xzm
Подключить каталог homes как homehome=homesuird.home=homes или uird.mounts=homes::home
Собрать слоеный home из нескольких каталогов—-uird.homes=home_layer1;home_layer2