Концепт режима сохранения в модуль

В общих чертах готово. Бранч в гит uird - newmode.
Работает это так. Первый старт, то есть когда модуля еще нет:
uird.mode=toxzm - включаем режим
uird.shudown - включаем сохранения в /run/initramfs
дальше варианты:

uird.changes=/existing_folder/new.cfg
создаст конфиг в “existing_folder” с именем “new.cfg”, при сохранении модуль будет иметь имя new.xzm (то есть по имени конфига). Если далее конфиг не трогать будет работать как сейчас сохранение в модуль.

uird.changes=/existing_folder
создаст конфиг в “existing_folder” с именем привязанным к железу (mac или vga как сейчас у machines), при сохранении модуль будет иметь имя “имя_конфига”.xzm. Если конфиг не трогать будет работать как сейчас machines в dynamic.

Когда конфиг уже существует достаточно его имени, найдет сам.

Теперь по конфигу. По дефолту такой:
XZM0=mac-dc0ea1fbbb19.xzm (имя модуля по имени конфига)
MODE0=copy (режим подключения, второй вариант mount)
REBUILD0=yes (пересобирать или нет, аналог static/dynamic, варианты yes/no)
ADDFILTER0=’’ (список через пробел чего надо включить, пустой список означает включить все)
DROPFILTER0=’’ (список через пробел чего нужно исключить из выбранного ADDFILTER)
SQFSOPT0=’’ (параметры для mksquashfs - сжатие, размер блока и т.д.)

Ноль в конце имен параметров это идентификатор первого модуля, можно сохранять в несколько модулей с разными настройками, тогда у второго будет идентификатор 1 у третьего 2 и т.д. Например один модуль может иметь имя привязанное с mac и туда сохраняете только /etc, а второй модуль используется для всех машин один и туда сохраняете все остальное.


Тут собранный с бранча newmod uird под последнюю сборку MagOS.

Изменения не особо большие, кстати. Плюс одна строка в uird-init, плюс одна функция в либе и переделанный скрипт для shutdown. Раньше он работал с machines (что было проблемно использовать в магос из-за обработки machines в скриптах) теперь работает с toxzm.

Что то не могу я найти newmode - https://github.com/neobht/

Наверно можно использовать MagOS.ini ?
Или по новому - /etc/MagOS/config

Нет. В конфиге только то, что относится к модулю и он должен быть рядом с модулем.


Допилил MAXCOPYSIZE для модуля. Значение задается в метрах. Если значение указано, то при старте проверяется размер, если размер модуля больше указанного модуль переводится в режим mount и создается секция в конфиге по которой при выключении машины будет создан новый модуль но уже в режиме copy. Учитывая, что предыдущий модуль не является результатом склейки, то в нем должны сохраниться тени, что при монтировнии учтется.
Дефолтный конфиг, теперь выглядит так:
XZM0=mac-dc0ea1fbbb19.xzm
MODE0=copy
REBUILD0=yes
ADDFILTER0=’’
DROPFILTER0=’’
SQFSOPT0=’’
MAXCOPYSIZE0=’’

Если после сменить MAXCOPYSIZE0 на например 10, то при достижении модулем 10 мегабайт UIRD изменит конфиг на такой:
XZM0=mac-dc0ea1fbbb19.xzm
MODE0=mount
REBUILD0=no
ADDFILTER0=’’
DROPFILTER0=’’
SQFSOPT0=’’
MAXCOPYSIZE0=10
XZM1=mac-dc0ea1fbbb19_next.xzm
MODE1=copy
REBUILD1=yes
ADDFILTER1=’’
DROPFILTER1=’’
SQFSOPT1=’’
MAXCOPYSIZE1=10

То есть первый модуль монтируется и не пересобирается, второй копируется и пересобирается. Если второй модуль также достигнет установленного предела произойдет тоже самое, то есть добавится секция для третьего модуля, а второй будет MODE=mount REBUILD=no.

Без указания MAXCOPYSIZE будет работать по конфигу без автоматики.

P.S. Вверху по ссылке UIRD для последней сборки магос с этими правками. Если решитесь попробовать нужно заменить uird на скачанный и добавить к cmdline ядра к чистому режиму:
uird.mode=toxzm uird.shutdown uird.changes=/существующая_папка
Получите режим приблизительно аналогичный machines.
uird.changes=/существующая_папка/имя_конфига.cfg
Получите аналог сохранения в один модуль.
Дальнейшие настройки смотрите в конфиге, который будет создан в указанной вами папке.

Надо попробовать сделать чуть иначе. Перенести функцию для toxzm до подключения бандлов, а вместо подключения модулей с сохранениями непосредственно в этой функции дописывать имя модуля в uird.load и uird.ro/cp. В файлы с параметрами.
Так UIRDее получится :slight_smile: Можно даже копитурам для этих модулей докрутить наверное.

Если использовать маски для модулей, то наверное можно без конфигов обойтись:
uird.load=changes.xzm uird.ro=changes_mount uird.cp=changes_cp

По сути надо просто “умным” образом реализовать сохранение. Но для этого можно просто написать сценарий и подсунуть его uird.changes=$(ai_saver.sh)

Не нравится мне схема с конфигами вшитыми. Это сложно - мало, кто будет использовать. А вот режим AI какой-нить одной командой активируемый - это другое дело. А уже скрипт может и конфиги и все остальное для себя использовать.

Надо как-то так наверное двигаться.

Я не настаиваю на своем варианте. Давайте думать еще. То что есть сейчас не достаточно управляемо. С конфигами и буквально одной функцией я получил намного больше вариантов работы с сохранениями в модуль. Почитай выше, оно уже работает.
Конфиги я сделал потому, что нужно передать много значений и пихать в cmdline не удобно. Там же не только подключение, но и пересборка. А так все что касается настроек относящихся к работе с сохранением в конкретный модуль лежит в одном месте - в его конфиге. Конфиг создается автоматом и если не нужно ничего сложнее чем аналоги machines или changes.xzm то в конфиг вообще не нужно лезть.

Пробовал.
Из /usr/lib/magos/rc.halt и /usr/lib/magos/rc.halt.pre удалил почти все
UIRD свежее. Задавал в grub2 для папки machines

uird.mode=toxzm uird.shutdown uird.changes=machines/93-new.xzm

uird.shutdown - работает, модули отмонтировались но не формируется 93-new.xzm
В згрузчике mksquashfs нет, но я копировал mksquashfs в /run/initramfs/usr/bin
Может что делаю не так ?

Возможно одного mksquashfs недостаточно, может либы ему нужны. Лучше пересобрать uird наверное, предварительно установив mksquashfs.
Не знаю важно или нет, я писал в uird.changes имя папки начиная со слэша. И самое важное там не xzm должно быть, а cfg после чего uird создаст этот конфиг и уже там пропишет xzm.
То есть uird.changes=/machines/93-new.cfg
Не знаю, кстати, что произойдет если вы укажете 93-new.cfg и при этом 93-new.xzm уже существует. Такой случай не предусмотрел :frowning: Лучше пока новое имя наверное подсунуть, 94-new.cfg :slight_smile:
И не забывайте, что собрать нужно не из мастера, а из бранча. Либо эксперементировать на магосе и взять мой uird.
Мне важно мнение со стороны, насколько это удобно и насколько вообще понятно как это работает. Свое же всегда зашибись, сами знаете :slight_smile:

Тут такой вопрос.

  1. Задал в grub 2 - uird.mode=toxzm …
    И теперь при выключении изменения попадут в модуль.
    Можно ли отменить сохранения модуля ?
    Сейчас я в /etc/MagOS/config пишу SAVETOMODULE=no или перезагружаюсь
  2. Наверно можно для выключения системы задавать uird.shutdown ?
    Или uird.shutdown только для режима сохранения ?
    Вроде шустро отключает

Для отключения использовать можно, но сперва всеравно выполнятся скрипты из rc.halt и все что у системд положено. То есть быстрее быть не должно, но размонтирует перед отключением в идеале все.
Отменить сохранение можно в конфиге модуля, заменив REBUILD на no.
Если отменяете часто, нужно так:

uird.shutdown=ask

будет спрашивать перед сохранением.


Пару фиксов.

  1. Так в этом загрузчике то же пакета /usr/bin/mksquashfs нет
    Пробовал на старой версии загрузчика запускать у себя МагОС

uird.load+=/machines/ uird.mode=toxzm uird.shutdown uird.changes=/machines/93-new.cfg

Сделал /machines/93-new.cfg

XZM0=93-new.xzm
MODE0=copy
REBUILD0=yes
ADDFILTER0=’’
DROPFILTER0=’’
SQFSOPT0=’’
MAXCOPYSIZE0=’’

И формируется пустой 93-new.xzm
Может что упустил ?

  1. Не получается скачать бранч в гит uird - newmode.

git clone --recursive https://github.com/neobht/uird/tree/newmode?files=1
git clone --recursive https://github.com/neobht/uird/tree/newmode

  1. В Магее скачал newmode из гит и сконфигурировал uird
    И магея не запускается. Вроде не может найти путь к ядру

PS

Пока остановился на этапе конфигурирования UIRD

Заходите в папку uird после того как скачали его как обычно git clone --recursive …
git checkout newmode
git pull origin newmode:newmode # эта может даже не нужна

uird.load=+machines не нужно. Пока не нужно.
Конфиг создавать не нужно, он создается сам.
Сейчас активно фиксим с Ильфатом, лучше забирать свежие изменения перед экспериментами. Обсуждаем в телеграме, если хотите присоединиться можем переехать в беседку.

было бы неплохо
хоть знать какие проблемы и что уже решено

Ок, напишу Ильфату.

Попробовал такой вариант. Вроде и работает, но сильно усложняет жизь. Особенно когда модуль не в источниках находится. Пока отложим.

https://yadi.sk/d/DFf73-eFkiWIh
Добавлена обрабока copy2ram, то есть режим можно использовать с фримедиа и режимом mount для модулей.
Починили с Ильфатом исчезновение некоторых теней в модуле при использовании фильтров.
Добавлен параметр silent для uird.shutdown, просто молча работает.
Добавлено логгирование скрипта в шатдоуне в /var/log/uird.shutdown.log, Если фильтрами не зарезать логс сохранится в модуле. Надо там еще подробностей добавить, пока мало чего пишет.
В планах обработка ситуации, когда модуль запаковать не удалось. Есть идеи?