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.параметр+=Подчеркивание__значение - добавить значение к списку дефолтных значений
Встроенная помощь

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

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