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

Что то не могу я найти 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, Если фильтрами не зарезать логс сохранится в модуле. Надо там еще подробностей добавить, пока мало чего пишет.
В планах обработка ситуации, когда модуль запаковать не удалось. Есть идеи?

Еще немного фиксов. Работает стабильно в том числе с фримедиа. Есть еще пару нереализованных идей, но можно и походу допилить. Тестить конечно еще надо, но если покрупному косяков не всплывет то думаю готово для перевода в мастер.
Дело за малым - уговорить Антона :)))
Есть вопросы по названиям.
Название режима? Сейчас “toxzm”.
Папка для монтирования слоя (если конфиг не в источниках)? Сейчас “xzmchanges”

Если чего не ясно по смыслу всей затеи - спрашивайте. Нужно будет писать хелп, чтоб знать заранее что непонятно.

Совместными усилиями с Ильфатом добили еще пару моментов. Мне кажется получилась очень хорошая штука. Надо брать :slight_smile:
Попробую собрать плюсы и минусы.
Минусы:

  • по большей части повторяет функционал, который уже есть
  • дополнительный конфиг(и)
  • новые параметры, с которыми нужно будет разбираться
  • не работает без системд
  • Что еще?

Плюсы:

  • реализация не связанна с сохранениями в модуль от магос никак, можно спокойно использовать что нравится;
    раньше для использования сохранений с uird.shutdown в магос нужно было блокировать 80-savetomodule
  • можно использовать uird.shutdown для корректного размонтирования в магос и одновременно machines
  • в простейшем случае не требуется рабираться с конфигами, работает малоотличимо от machines и changes в модуль.xzm
  • полностью перекрывает возможности по сохранению в модуль которые есть в магос
  • не требуется ./lock файлов и перемонтирования дисков с udev при freemedia
  • нет ограничения по времени на создание модуля, которое накладывает системд
  • возможность монтировать модули вместо копирования
  • возможность сохранения в два и более модулей с разными фильтрами; при этом модули могут иметь конкретное имя либо
    привязаны к машине (как машинез)
  • возможность сохранения в модули с разными параметрами для mksquashfs
  • возможность задать максимальный размер для модуля при превышении которого, модуль переводится в режим mount
    и больше не пересобирается, изменения будут писаться в новый модуль с прежними настройками; ввиду того, что в этом
    режиме исключается конкатенация модулей проблем с исчезновением теней не будет в оличии от пересборки модулей в режиме mount
  • гибридный режим для работы с несколькими машинами, когда изменения пишутся выборочно в общий и раздельные модули

Как обычно для последнего магоса:

Добалена возможность делать секцию с привязкой имени модуля к машине.
Нужно вместо имени передать пустое значение.
XZM1=’’
Мелкие исправления и новый баннер :slight_smile:

1 Симпатия