У меня не работал еще режим mount.
Режим none+wh работал если модуль сохранения не монтировался в систему при загрузке
Если модуль от none+wh был смонтирован, допустим записан в папку base, то он не писался Работал только режим copy
Хорошо бы в конфигуратор uird дополнить прогой тестирования ядра
Что бы не было лишней работы
Из всех путей где может быть конфиг ядра при сборке уирда надежно доступен только /lib/modules/ядро/build/.config, так как без модулей ядра уирд не собрать текущее ядро может быть совсем другим. Если этот путь является обязательным для всех дистров (в чем я не уверен) то можно его парсить на предмет нужных настроек. Но изменить ведь все равно ничего не получится. Просто писать предупреждение? Есть ли смысл?
Ну хотя бы предупреждение.
Уже знаешь, что режимы mount с родным ядром работать не будут.
Я с неделю крутил uird. А оказалось что виновно ядро.
И главное что ваше время экономится. Юзеры не будут задавать лишних вопросов
Проверил на свежей uird. Режим mount с родным ядром в Убунту действительно у меня работает.
Видимо или старая версия uird была виновна или ошибка. Но это уже не важно
В общем то все не так страшно.
С ядром от Магеи Убунту работает и даже Plymouth в uird запускается
Но это с загрузчиком сконфигурированным а Магее
Если загрузчик для ядра от Магеи сконфигурировать для uird в Убунту то Plymouth запускается только из системы
С родным ядром от Убунту uird делает загрузчик ок
Но в стр 32 в /usr/share/uird/mkuird.cfg
Снова переписан разбор 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
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
>/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.
Циклы в баш работают крайне медленно, именно убрав циклы получилось ускорить в несколько раз обработку фильтров.
Да. Был косяк. Не сразу обнаружился, потому, что с моими фильтрами не проявлялся.
Запустил режим machines от toxzm. Изменения пишутся в machines/dynamic
Фильтры поместил machines/filtres
Но опять же один конфиг и два лога в папке machines
А если конфигов будет 5 или 10 ?
Логи конечно вещь нужная но я смотрю их во время отладки
Только куда их поместить ?
Ну так чтоб не мешали и что бы всегда были под рукой
Может в machines/log ?
Хорошо бы чтобы у юзера был выбор и он мог писать путь до логов в конфиге ?
Папку machines я наверно зря выбрал. Все же это папка для старой версии. Не получится ли каких нибудь конфликтов ?
Может лучше допустим в папке toxzm собирать machines от toxzm?
В режиме machines от toxzm конфиг формируются по умолчанию
Но после запуска системы приходится править конфиг
Могу ли я отредактировать формирования конфига по умолчанию уже с нужными параметрами ?
Думаю, что в вашем случае проще разнести конфиги по подкаталогам. Указание пути к логам можно сделать только относительно конфига, в любое место не получится, все же размонтировано. По этому думаю, что смысла нет.
Да, такая возможность есть. Смотрите последний абзац инструкции для toxzm здесь в форуме.
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
Перенос bak-модулей с логами не связаны. Они должны все равно переноситься в toxzmlog
Это я просто попробовал для эксперимента. Может лучше не надо переносить ?
Как то даже непривычно.
С другой стороны чистые загрузочные папки. Как бы улучшена стабильность загрузки, т к ничего лишнего.
PS
А что с 01-background
В последней сборке MagOS нет подписей на фоновую картинку для рабочего стола.
Как раз мой случай. У меня в /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