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

У меня не работал еще режим mount.
Режим none+wh работал если модуль сохранения не монтировался в систему при загрузке
Если модуль от none+wh был смонтирован, допустим записан в папку base, то он не писался
Работал только режим copy

Хорошо бы в конфигуратор uird дополнить прогой тестирования ядра
Что бы не было лишней работы

Из всех путей где может быть конфиг ядра при сборке уирда надежно доступен только /lib/modules/ядро/build/.config, так как без модулей ядра уирд не собрать текущее ядро может быть совсем другим. Если этот путь является обязательным для всех дистров (в чем я не уверен) то можно его парсить на предмет нужных настроек. Но изменить ведь все равно ничего не получится. Просто писать предупреждение? Есть ли смысл?

Так и должно быть без shwh, а вот просто mount должен был работать, мне кажется.

Ну хотя бы предупреждение.
Уже знаешь, что режимы mount с родным ядром работать не будут.
Я с неделю крутил uird. А оказалось что виновно ядро.
И главное что ваше время экономится. Юзеры не будут задавать лишних вопросов

Проверил на свежей uird. Режим mount с родным ядром в Убунту действительно у меня работает.
Видимо или старая версия uird была виновна или ошибка. Но это уже не важно
В общем то все не так страшно.

С ядром от Магеи Убунту работает и даже Plymouth в uird запускается
Но это с загрузчиком сконфигурированным а Магее
Если загрузчик для ядра от Магеи сконфигурировать для uird в Убунту то Plymouth запускается только из системы
С родным ядром от Убунту uird делает загрузчик ок
Но в стр 32 в /usr/share/uird/mkuird.cfg

#DM_base="base ntfs kernel-modules crypt shutdown plymouth"
DM_base="base ntfs kernel-modules crypt shutdown"

Получается в ядре от Убунту еще и нет plymouth
Без этой правки загрузчик не формируется в Убунту

Для работы, все же надо патчить в Убунту родное ядро
Но с этим у меня пока проблемы. Главное что методик много а какую выбрать ?

Снова переписан разбор ADDFILTER и DROPFILTER c устранением ошибок с папками. Просьба проверить. Еще разок напоминаю логику. Если в фильтре указана строка которая начинается со слэша, то проверяться она будет только от корня, если с любого другого символа то проверяется как шаблон для grep по полному списку файлов и папок. Сделано это чтоб при указании к примеру /bin не зацепило и /usr/bin тоже.

Михаил, фильтр который получился работает намного быстрее чем то что в 80-savetomodule, может и там поменять? В скрипте для toxzm выглядит так:

[ -f /tmp/allfiles  ] || find $SRC/ | sed -e 's|^'$SRC'||' -e '/^\/$/d' > /tmp/allfiles
			: > /tmp/savelist.black
			: > /tmp/savelist.white
			for item in $ADDFILTER ; do 
				if [ -d "$SRC$item" ] ; then
					echo "^$item" >> /tmp/savelist.white
				else
					echo "$item" >> /tmp/savelist.white 
				fi
			done
			grep -q . /tmp/savelist.white || echo '.' > /tmp/savelist.white
			for item in $DROPFILTER ; do 
				if [ -d "$SRC$item" ] ; then
					echo "^$item" >> /tmp/savelist.black
				else
					echo "$item" >> /tmp/savelist.black 
				fi
			done
			(cat /tmp/allfiles  | grep -f /tmp/savelist.white  \
			| awk -F"/" '{ A = $1 ;{for (i=2; i<=NF; i++) { A = A "/" $i ; print A} } }'  \
			| sort -u | cat - /tmp/allfiles  |sort |uniq -u
			grep -q . /tmp/savelist.black && cat /tmp/allfiles  | grep -f /tmp/savelist.black ) \
			|sort -u >> /tmp/$n/excludedfiles

Здесь DROPFILTER и ADDFILTER это списки того что добавить удалить, а SRC это /memory/changes

Проверил на Магее. Работает !!!
Что не скажешь о предыдущей версии.
Там был сбой и уж было собрался писать да вы меня опередили новой версией.

Но сделал два дополнения к коду - мой shutdown-uird.sh

1 Стр 195 - 206

if [ -z "$ADDFILTER" ] ;then
	echo "/.cache" >> /tmp/$n/excludedfiles
	echo "/.dbus" >> /tmp/$n/excludedfiles
	echo "/run" >> /tmp/$n/excludedfiles
	echo "/tmp" >> /tmp/$n/excludedfiles
	echo "/dev" >> /tmp/$n/excludedfiles # maybe it is not necessary
	echo "/proc" >> /tmp/$n/excludedfiles # maybe it is not necessary
	echo "/sys" >> /tmp/$n/excludedfiles # maybe it is not necessary
	echo "/mnt" >> /tmp/$n/excludedfiles # maybe it is not necessary
  else
    cleaner_root
  fi

Что не разрешено в ADDFILTER то из корня удаляется
Мало ли что может оказаться в корне. И в разных дистрах ADDFILTER может отличаться
Для случая если ADDFILTER пустой то будет работать ваш код.

Разделил я DROPFILTER.
Теперь у меня в DROPFILTER фильтр только со слэшем

/etc/.updated
/etc/mtab
/etc/hostname
/etc/initvars
/etc/fstab
и так далее

А для поиска файлов и папок для удаления сделал фильтром SEARCHFILTER

MagOS
magos
magosm
uird
Trash
RecentDocuments
.updated
old
mdk-menu-migrated
esd_auth
wh..wh..opq
00-modes.conf
bookmarks
tbd

И добавленные стр 249 - 251

>/tmp/search.black
for item in $SEARCHFILTER ; do echo "$item" >> /tmp/search.black ; done
grep -q . /tmp/search.black && grep -f /tmp/search.black /tmp/allfiles >> /tmp/$n/excludedfiles

Изменения тестировались уже больше месяца
Поиск ведется быстро и зависаний нет
Допустим теперь все файлы и папки где есть слово MagOS удаляются из образа для записи модуля сохранения. А это сократило DROPFILTER что несомненно удобно.

PS
А что теперь /tmp/savelist.white и /tmp/search.black теперь не удаляются после формирования excludedfiles ?

Что-то не пойму чего вы добиваетесь этими изменениями. Давайте словами опишу как все задумано, может мы по разному понимаем как должно быть.
Фильтры ADDFILTER и DROPFILTER идейные последователи savelist для 80-savetomodule и логика их работы максимально похожа. Если в savelist пусто, то сохраняется все не удаляется ничего. Аналогично и тут.
Если в ADDFILTER пусто, то его значение заменяется на ‘.’, а под “греп точка” подходят любые строки. То есть - разрешаем все. Иными словами дефолтное значение ADDFILTER=’.’
DROPFILTER проверяется как есть, то есть если пусто то ничего не удалять.
Список файлов и папок который получился после прохождения полного списка из /memory/changes через эти фильтры записывается в файл /tmp/НомерСекции/excludedfiles, который используется mksquashfs при запаковке. Кроме этого в этот файл дописываются папки, которые однозначно не нужно сохранять /proc, /sys, /tmp, а также рутимены aufs из корня.
Если что-то работает не так или вам не хватает в этой логике чего-то, давайте обсуждать. Из файла с вашими правками я не понял чего вы добивались.

Удаляются перед обработкой следующей секции.

Если записать все в дропфильтр работать будет также. Имею ввиду добавить в дропфильтр все что у вас в searchfilter.

Циклы в баш работают крайне медленно, именно убрав циклы получилось ускорить в несколько раз обработку фильтров.

Да. Был косяк. Не сразу обнаружился, потому, что с моими фильтрами не проявлялся.

Правка 2

Вы оказались правы и ваш вариант работает.
Удалил поиск для SEARCHFILTER

добавленные стр 249 - 251

>/tmp/search.black
for item in $SEARCHFILTER ; do echo "$item" >> /tmp/search.black ; done
grep -q . /tmp/search.black && grep -f /tmp/search.black /tmp/allfiles >> /tmp/$n/excludedfiles

Так что мои поздравления.

Но соеденил свои DROPFILTER и SEARCHFILTER строкой

for item in $DROPFILTER $SEARCHFILTER ; do 

Так мне показалось удобнее при анализе содержимого фильтров.

Хорошо. А по логике работы есть вопросы? Или достаточно того, что есть?

Вопросов два

  1. Что то с логами надо делать.
    У меня два конфига для toxzm и лежат в /memory/layer-base/0
    Один рабочий. Причем сохранение в папке machines

XZM0=machines/toxzm/base0.xzm
XZM1=machines/toxzm/home0.xzm

Второй отладочный со входом как root и изменения пишутся прямо в систему

XZM0=base/37-1-baseadd.xzm
XZM1=base/37-2-homeadd.xzm

Т е два конфига и 4 лога в /memory/layer-base/0

Запустил режим machines от toxzm. Изменения пишутся в machines/dynamic
Фильтры поместил machines/filtres
Но опять же один конфиг и два лога в папке machines
А если конфигов будет 5 или 10 ?
Логи конечно вещь нужная но я смотрю их во время отладки
Только куда их поместить ?
Ну так чтоб не мешали и что бы всегда были под рукой
Может в machines/log ?
Хорошо бы чтобы у юзера был выбор и он мог писать путь до логов в конфиге ?
Папку machines я наверно зря выбрал. Все же это папка для старой версии.
Не получится ли каких нибудь конфликтов ?
Может лучше допустим в папке toxzm собирать machines от toxzm?

  1. В режиме machines от toxzm конфиг формируются по умолчанию
    Но после запуска системы приходится править конфиг
    Могу ли я отредактировать формирования конфига по умолчанию уже с нужными параметрами ?

Думаю, что в вашем случае проще разнести конфиги по подкаталогам. Указание пути к логам можно сделать только относительно конфига, в любое место не получится, все же размонтировано. По этому думаю, что смысла нет.

Да, такая возможность есть. Смотрите последний абзац инструкции для toxzm здесь в форуме.

Разобрался вроде с логами. Мой shutdown-uird.sh

Стр 337 - 342

if [ -d $CFGPWD -a $log != 'no' ] ;then
	logname=$(echo ${CHANGESMNT##*/} | sed 's/.cfg$/_log.tar.gz/')
	[ ! -d "$CFGPWD/toxzmlog" ] && mkdir -p $CFGPWD/toxzmlog
	[ -f $CFGPWD/toxzmlog/$logname ] && mv -f $CFGPWD/toxzmlog/$logname $CFGPWD/toxzmlog/${logname}.old
	cd /tmp ; tar -czf $CFGPWD/toxzmlog/$logname * ; cd /
fi

В папке конфига появляется папка toxzmlog
Сюда переносятся все логи конфига
А так же bak-модули, кот появляются после записи модуля с изменениями
Стр 226

[ -f "$SAVETOMODULENAME" ] && mv -f "$SAVETOMODULENAME" "${SAVETOMODULEDIR}/toxzmlog/${SAVETOMODULENAME##*/}.bak"

Если будет несколько папок с конфигами то в каждой папке будет свой toxzmlog`

Папку toxzmlog можно сделать скрытой. Записать

$CFGPWD/.toxzmlog

Даже лучше, но .toxzmlog` в dolphin появляется на первом месте, если есть другие папки
Что то же нехорошо.

А куда пишется модуль.bak, когда логи не включены?

Перенос bak-модулей с логами не связаны. Они должны все равно переноситься в toxzmlog
Это я просто попробовал для эксперимента. Может лучше не надо переносить ?
Как то даже непривычно.
С другой стороны чистые загрузочные папки. Как бы улучшена стабильность загрузки, т к ничего лишнего.
PS
А что с 01-background
В последней сборке MagOS нет подписей на фоновую картинку для рабочего стола.

bak-модули с отключенными логами переносятся в toxzmlog

Мне кажется их то как раз нужно оставлять рядом с новым модулем.
И еще вопрос, что будет если в одной папке два конфига?

Как раз мой случай. У меня в /memory/layer-base/0 два конфига

saveadmin.cfg - режим обновления системы и модуль пишется в папку base
savetoxzm.cfg - обычная работа и модуль пишется в папку toxzm

Все логи переносятся в папку toxzmlog
Сделал аналог machines.
Конфиг лежит в toxzm/machines
machines.cfg

XZM0=
MODE0='mount+wh'
REBUILD0='yes'
ADDFILTER0='boot etc opt home root run usr shares var'
DROPFILTER0="$(cat /memory/layer-base/0/toxzm/filtres/base-filtr)"
SEARCHFILTER0="$(cat /memory/layer-base/0/toxzm/filtres/search-filtr)"
SQFSOPT0=''
MAXCOPYSIZE0=''

Сюда же пишутся модули
В toxzm/machines появляется свой toxzmlog куда переносятся логи machines
В принципе удобно.
Если папок с конфигами будет больше то в каждой будет свой toxzlog

В целом я нет против, давайте только оставим xzm.bak рядом c .xzm, а все что связано с логами пусть включается только если логи включены.