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

Со свежей версией toxzm подвижки.
Появилось сообщение
mount: mounting aufs on /tmp/aufs filed: invalid arguments

Может у меня получится.
Но с модулем записи все равно проблема. Не отмонтируется и все тут.
Но хоть режим copy работает.

А Ubuntu выложу несколько позже, т к выяснилось сборка сыровата и не все пакеты установил.
Может что то не установлено. Хорошо бы список пакетов что именно нужно для МагОС
И какой то установочный скрипт бы не помешал.
А то вручную делать долго

Это если в toxzm использовать функцию shell для выхода в терминал при записи модуля.
Так в Ubuntu этот терминал без истории команд. Как бы неудобно.
В системе все ок

Я сейчас работаю над сборкой где тоже не работает mount+wh. Но причина не в toxzm, а в том что поддержка монтирования SHWH не включена в ядре. Посмотрите как у вас, может таже проблема. Просто грепом поищите SHWH в конфиге ядра.

Там один и тот же шелл во всех вариантах, он не из дистрибутива, а из бизибокса, который в UIRD. Между сессиями хранить историю слишком сложно будет, нет смысла так усложнять.

Списки пакетов для каждого модуля есть в сборке, в /var/lib/rpm/modules, но Вам это не поможет, так как имена пакетов в убунте будут отличаться.

У магеи есть в /usr/lib/modules/5.6.14-desktop-2.mga7 файл shwh
В ядре от Убунту в /usr/lib/modules/… файла shwh нет

Так вроде пробовал я запуститься на ядре от Магеи. И то же mount+wh не работал.
Попробую снова.

Надо в конфиге ядра смотреть.
cat /boot/config-(имя-ядра) |grep SHWH
или
zcat /proc/config.gz |grep SHWH
или
cat /lib/modules/имя-ядра/build/.config |grep SHWH
В разных дистрах в разных местах может конфиг лежать

Да вы голова !
Заработал mount+wh в toxzm в Убунту с ядром от Магеи

Причем с родным ядром

 root@ubuntu:~ cat /boot/config-5.4.0-37-generic  |grep SHWH
 CONFIG_AUFS_SHWH is not set
 root@ubuntu:~ zcat /proc/config.gz |grep SHWH
 gzip: /proc/config.gz: No such file or directory
 root@ubuntu:~ cat /usr/lib/modules/5.4.0-37-generic/build/.config |grep SHWH
 CONFIG_AUFS_SHWH is not set

С ядром от Магеи

 root@ubuntu:~ cat /boot/config-5.6.14-desktop-2.mga7  |grep SHWH
 CONFIG_AUFS_SHWH=y
 root@ubuntu:~ zcat /proc/config.gz |grep SHWH
 CONFIG_AUFS_SHWH=y
 root@ubuntu:~cat /usr/lib/modules/5.6.14-desktop-2.mga7/build/.config |grep SHWH
 CONFIG_AUFS_SHWH=y

Но одна проблема осталась. Последний смонтированный модуль в toxzm не отмонтируется
У мня это - toxzm/home0.xzm
Мой uirdsave.cfg

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

XZM1=toxzm/home0.xzm
MODE1='mount+wh'
REBUILD1='yes'
ADDFILTER1='etc home var'
DROPFILTER1="$(cat /memory/layer-base/0/optional/home-filtr)"
SEARCHFILTER1="$(cat /memory/layer-base/0/optional/search-filtr)"

Но модуль сохранения все же записался, т к toxzm как то исправил ситуацию
С родным ядром второй модуль сохранения писался всегда пустой

Так теперь получается патчить ядро?
Может разрабов Убунты озадачить ?

Помогли списки пакетов для сборки Магеи. Сборку веду на базе urpmi и списки у меня гораздо короче чем в МагОС а urpmi по зависимостям до устанавливает нужные пакеты.
По функционалу apt-get install это тот же urpmi
Имена пакетов в Магее и Убунту в основном совпадают

Проблема пропала. Теперь все чисто.
С ядром от Mагеи в Убунте все ок !
Может так и оставить ?

PS
Видимо aufs в ядре Убунту надо патчить актуальной версией
Может конфигуратор загрузчика uird дополнить функцией обновления aufs в активном ядре ?
Ну как для busybox и dracut
А то похоже что ядра в дистрах это очередное минное поле

Почему бы и нет. Работает раз. Ну или не использовать то где нужен shwh. У нас это mount+wh в конфигах toxzm и ключ -w у mkpfs. Вроде все.

Ну не патчить, всего лишь включить shwh и пересобрать. AUFS же есть в ядре.

У меня не работал еще режим 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 

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

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