Форум проекта PuppyRus Linux

Разработки проекта PuppyRus => Разработка PFS и Initrd => Альтернатива PFS => Тема начата: DdShurick от 15 Февраль 2017, 19:40:10

Название: addlayer
Отправлено: DdShurick от 15 Февраль 2017, 19:40:10
 Следующим номером нашей программы addlayer (https://github.com/DdShurick/pfs-utils/blob/master/usr/bin/addlayer), прошу ругать и жаловаться.
 (только для работы с дополнительными aufs)
Название: Re: addlayer
Отправлено: betcher от 15 Февраль 2017, 20:37:08
Добовьте ему -n 0 и он заменить pfsload ;)
Учитывая использование ключей сделать из него библиотечную функцию будет проблематично.
Название: Re: addlayer
Отправлено: DdShurick от 15 Февраль 2017, 21:20:57
 Если ограничиться одной дополнительной aufs, то ключи не нужны. Одной хватит?
Добовьте ему -n 0 и он заменить pfsload
Но не заменит layermanager (https://github.com/DdShurick/pfs-utils/blob/master/usr/bin/layermanager), к которому я хочу прикрутить GUI.
Название: Re: addlayer
Отправлено: betcher от 16 Февраль 2017, 05:04:56
Если ограничиться одной дополнительной aufs, то ключи не нужны. Одной хватит?
Просто заменить ключи на позиционные параметры $1 $2. В функции все ровно так же.
Название: Re: addlayer
Отправлено: DdShurick от 16 Февраль 2017, 21:07:53
 Переписал, теперь надо "вычёсывать блох"
Название: Re: addlayer
Отправлено: sfs от 17 Февраль 2017, 09:04:02
Я правильно понял - на выходе ожидается функциональный аналог пфс-cli с максимальным использованием mount вместо cp и пр. костылей + совместимость со старыми модулями? На уровле идеи понимание сложилось. Сейчас отладка кода?
Уже можно тестировать ? если да - хорошо бы примеры создания модуля , объ(раз)единения. В идеале selftest
Мануал в вики не пора писать? доступ есть?
Название: Re: addlayer
Отправлено: DdShurick от 17 Февраль 2017, 09:15:46
Сейчас отладка кода?
Проверка на возможные ошибки.
Уже можно тестировать?
А для чего выложено?
примеры создания модуля , объ(раз)единения.
Кое-какие примеры я приводил, правда в ручном режиме.
Мануал в вики не пора писать?
Пожалуй пора.
Название: Re: addlayer
Отправлено: sfs от 17 Февраль 2017, 09:24:09
Пожалуй пора.
Сильно упростит понимание замысла и расширит круг тестеров. Не хотелось бы играть в угадайки при доступном авторе
По итогу надо решить какой набор дальше развивать
доступ есть?
Кстати selftest - может стать тестом и примерами в одном флаконе... Очень бы не помешал
Название: Re: addlayer
Отправлено: betcher от 17 Февраль 2017, 09:24:45
Быть может заморозить в текущем виде pfs-utils. Только фиксы если нужно. Сделать бранч и в нем начать переписывать с начала, с учетом старых ошибок и новых идей?
Смотрел скрипт, по функционалу вопросов нет. Надо тестить и смотреть как в либу переносить.
Название: Re: addlayer
Отправлено: sfs от 17 Февраль 2017, 09:29:16
заморозить в текущем виде pfs-utils
Вроде и так все тормознулись. В свете последних идей - переписать возможно лучший вариант чем еще наприделывать костылей
Если у Дяди Шурика уже функционально полный вариант - надо протестировать и определяться. давайте на этом и сосредоточимся
Хорошо бы selftest - поможет обойтись без доки и примеров
Название: Re: addlayer
Отправлено: betcher от 17 Февраль 2017, 09:39:10
Дядь Шурик, если этот же кусок кода будет работать в pfsload (или аналоге) то еще нужно не обязательный $3 - номер слоя.
Название: Re: addlayer
Отправлено: DdShurick от 17 Февраль 2017, 09:43:01
то еще нужно не обязательный $3 - номер слоя.
Я думал об этом, но пока отложил.
Название: Re: addlayer
Отправлено: sfs от 17 Февраль 2017, 09:53:05
пока отложил.
Верное решение - не первостепенно нужный функционал
Какой итог - ждем selftest , доку или там все и так понятно (пока не смотрел ) - тестируем?
Название: Re: addlayer
Отправлено: betcher от 17 Февраль 2017, 10:00:02
Я пока видел только пару кусков кода для либы и пару скриптов, которые написаны раньше и новый код не используют. Прежде чем наворотить новых утилит хотелось бы обсудить что будет в финале. Какие утилиты, с какими ключами, что можно вынести в либу, где будет конфиг, будем ли поддерживать все подряд или только то что мы приняли как стандарт. Пока одни вопросы.
Название: Re: addlayer
Отправлено: DdShurick от 17 Февраль 2017, 10:09:18
хотелось бы обсудить что будет в финале.
Из печального опыта: сначала будет долгое "обсудить", а потом ничего не будет.
Не хотелось бы.
Название: Re: addlayer
Отправлено: betcher от 17 Февраль 2017, 10:12:45
Из моего печального опыта, сперва пишем как на душу легло, потом сочиняем костыли чтоб работало как надо, потом смотрим со стороны на всю эту кучу и переписываем поновой :)
Не хотелось бы. Нужно сперва решить чего надо, как надо это делать и уже потом писать.
Название: Re: addlayer
Отправлено: sfs от 17 Февраль 2017, 10:45:15
решить чего надо, как надо это делать и уже потом писать.
Надо создания модуля , объ(раз)единения ,под(от)ключение
Если уже есть на базе идей монтирования - дайте. Если макет работает - будем обсуждать дальше (вписать в пфс или полностью заменить cli)
Т.е. поэтапно.
Название: Re: addlayer
Отправлено: betcher от 17 Февраль 2017, 11:11:22
Мне как сделано деление по функциям в pfs-utils в общем нравится, единственно что объединил бы мерж и мерж-дир. А DdShurick объединяет кучу функций в layermanager и pfsedit. По этому и надо обсуждать. С самого начала, скрипты, названия, функционал, общие куски кода.
Название: Re: addlayer
Отправлено: DdShurick от 17 Февраль 2017, 13:23:01
Из моего печального опыта
Опыт у нас немного разный. У вас на MagOS (http://magos-linux.ru/) инициативы не забалтывают, а у нас запросто :( Поэтому браться за что-нибудь серьёзное боязно, шапками закидают.
layermanager и pfsedit.
Layermanager + GUI пожалуй пойдёт на замену modules_event, если договоримся насчёт GUI. Ну а pfsedit, благодаря вашей идее, надо переписывать, устарел.
Название: Re: addlayer
Отправлено: sfs от 18 Февраль 2017, 09:30:56
Layermanager + GUI пожалуй пойдёт на замену modules_event, если договоримся насчёт GUI.
Все операции задаются переменными в начале скрипта
Название: Re: addlayer
Отправлено: DdShurick от 18 Февраль 2017, 09:41:45
mnt_sfs
Нечто подобное и даже с таким же названием я писал лет семь назад, потом выбросил, ибо достаточно действий по ПКМ и ЛКМ.
Объясняю: modules_event это немного другое и по другому сделано, layermanager это третье.
Название: Re: addlayer
Отправлено: sfs от 18 Февраль 2017, 09:47:20
писал лет семь назад
Скорее всего из этого я и сделал
достаточно действий по ПКМ и ЛКМ.
В скрипте куча вариантов что можно сделать с модулем
Так в ФМ достаточно повесить mnt_sfs на все .pfs - иначе для каждого ФМ описывать все возможные варианты

Да ладно - пока не до gui. Позже решим
Название: Re: addlayer
Отправлено: DdShurick от 18 Февраль 2017, 10:04:29
Скорее всего из этого я и сделал
Тогда должна быть ссылка на первоисточник.
Название: Re: addlayer
Отправлено: DdShurick от 20 Февраль 2017, 07:18:40
 Последний вариант проверяли?
Название: Re: addlayer
Отправлено: sfs от 20 Февраль 2017, 14:54:43
Последний вариант проверяли?
Да. все ок!
Немного доработал https://github.com/pfs-utils/pfs-utils-cli/blob/master/project-files/usr/bin/addlayer
Т.е. поправил текст ошибки и добавил проверок
Предлагаю принять этот вариант и дальше использовать его у Вас и в пфс
Название: Re: addlayer
Отправлено: DdShurick от 20 Февраль 2017, 15:31:18
Код
delaufs "$1" && echo "AUFS слой '$1' размонтирован." ; exit 1
А это зачем? Не примонтировался слой, и не надо, а если другие были примонтирваны, начинай сначала?
usage взял.
Название: Re: addlayer
Отправлено: sfs от 20 Февраль 2017, 15:47:50
Тоже думал про это
Давайте определимся
Вряд ли даже разрабы будут юзать непосредственно addlayer - только внутри других скрпптов
Когда переделывал pfsmerge-dir - мне показалось - так удобнее. Посмотрите этот скрипт - все сами поймете
Иначе эту обработку придется дублировать в каждом скрипте
А в остальном? Хотелось бы как то засинхронизировать большинство скриптов
Ну или чтобы не спорить - давайте ключ приделаем
Название: Re: addlayer
Отправлено: DdShurick от 20 Февраль 2017, 15:59:51
Вряд ли даже разрабы будут юзать непосредственно addlayer - только внутри других скрпптов
Опрос! Заодно узнаем сколько нас.
Посмотрите этот скрипт - все сами поймете
А бутылку, чтоб понять? :D
Иначе эту обработку придется дублировать в каждом скрипте
А как-же иначе? Слои в любом случае подключаются только руками и тут всякое может быть.
Хотелось бы как то засинхронизировать большинство скриптов
Форкайте и делайте как нравится.
Название: Re: addlayer
Отправлено: DdShurick от 20 Февраль 2017, 18:13:07
Проверка ФС:
Код
[ "$(df "$2" | egrep 'aufs|unionfs')" ] && usage "Ошибка!
    '$2' находится на разделе с aufs.
    Переместите на раздел с другой файловой системой."
И овцы целы, и волки сыты, и любой набор ФС можно вписать.
Название: Re: addlayer
Отправлено: sfs от 20 Февраль 2017, 20:58:02
Давайте на всякий случай egrep '^aufs|^unionfs'
Название: Re: addlayer
Отправлено: sfs от 21 Февраль 2017, 12:34:14
https://github.com/pfs-utils/pfs-utils-cli/blob/master/project-files/usr/bin/addlayer
поправил grep-ы , наставил кавычек
Без этого не смонтировать было 3.pfs - фильтры находили все модули где есть 3
Название: Re: addlayer
Отправлено: DdShurick от 21 Февраль 2017, 17:08:06
Код
egrep '^$NEWLAYER'
Не согласен. У меня есть модули *.pfs запускаемые по ссылке *.xzm, на них вылетает ошибка.
было 3.pfs - фильтры находили все модули где есть 3
Подробнее?
Может быть откатить назад, без проверки /proc/mounts?
Название: Re: addlayer
Отправлено: sfs от 22 Февраль 2017, 09:31:49
egrep '^$NEWLAYER' - переделал https://github.com/pfs-utils/pfs-utils-cli/commit/95f900ffbf90133b01ac9bf7e6d42043ada5b99d
Так ок?
Название: Re: addlayer
Отправлено: DdShurick от 22 Февраль 2017, 09:46:43
Может быть откатить назад, без проверки /proc/mounts?
Давайте вот над этим подумаем, стоит ли искать и повторно использовать точку монтирования ради экономии одной loop, или сразу монтировать в bundles$N как было раньше?
Код
		if [ "$(grep $NAME /proc/mounts)" ]; then #if the module is already mounted
NEWLAYER="$(grep $NAME /sys/fs/aufs/si_*/br[1-9]* | cut -f2 -d:| cut -f1 -d=)"
else
#оставить только это ---->
mkdir -p /$SYSMNT/bundles$N/"$MODNAME"
mount -o loop "$NEWLAYER" /$SYSMNT/bundles$N/"$MODNAME"
NEWLAYER=/$SYSMNT/bundles$N/"$MODNAME"
#<----
fi
Название: Re: addlayer
Отправлено: sfs от 22 Февраль 2017, 09:57:55
#оставить только это ---->
Времени и места не занимает. Монтируется временно
Остальной код - только потенциальный источник ошибок
Название: Re: addlayer
Отправлено: DdShurick от 22 Февраль 2017, 10:00:01
#оставить только это ---->
Ok.
Название: Re: addlayer
Отправлено: sfs от 22 Февраль 2017, 10:04:40
https://github.com/pfs-utils/pfs-utils-cli/commit/55335817ac01858b74ef26cbfd7f2a0a960595df
Название: Re: addlayer
Отправлено: DdShurick от 23 Февраль 2017, 07:41:47
 Вопрос: как будет удобнее?
- addlayer home save
- addlayer /home/save
- addlayer /dev/sda3/save
- все эти варианты
Название: Re: addlayer
Отправлено: sfs от 23 Февраль 2017, 07:57:37
- addlayer home save
Меньше писать , проще парсить, логично
/home/save - можно понять что только эта папка и создастся
Только home - дистрозависимая вещь... Как быть?
Название: Re: addlayer
Отправлено: DdShurick от 23 Февраль 2017, 08:32:59
Только home - дистрозависимая вещь... Как быть?
Писать раздел.
Название: Re: addlayer
Отправлено: sfs от 23 Февраль 2017, 08:34:57
Тогда лучше home вообще не упоминать
Название: Re: addlayer
Отправлено: DdShurick от 23 Февраль 2017, 08:42:41
Уже убрал
Название: Re: addlayer
Отправлено: betcher от 23 Февраль 2017, 08:46:35
В uird это так решено
/dev/sda3/home
UUID@/home
LABEL@/home
Почему просто папку нельзя так и не пойму.
Название: Re: addlayer
Отправлено: sfs от 23 Февраль 2017, 10:42:22
В uird это так решено
Мы же универсально заморочились
Почему просто папку нельзя так и не пойму.
Меньше писать , проще парсить, логично
Название: Re: addlayer
Отправлено: DdShurick от 27 Февраль 2017, 20:25:15
 На практике оказалось очень удобно добавлять каталог|модуль в первый слой основной aufs.
Код
# addlayer 0 glib-2.48.1_XZM
#
и готово :)
Название: Re: addlayer
Отправлено: sfs от 28 Февраль 2017, 09:00:21
Чем это лучше pfsload ?
Название: Re: addlayer
Отправлено: betcher от 28 Февраль 2017, 10:56:14
это и будет pfsload, добавится только обновление менюшек, depmod, ldconfig и т.д.
Название: Re: addlayer
Отправлено: sfs от 28 Февраль 2017, 11:01:03
Т.е. addlayer - одна из функций. Не надо из нее лепить что-то другое
Название: Re: addlayer
Отправлено: betcher от 28 Февраль 2017, 16:29:32
Т.е. addlayer - одна из функций. Не надо из нее лепить что-то другое
Да я так думаю. Просто pfsload будет ее использовать как и остальные скрипты.
Название: Re: addlayer
Отправлено: DdShurick от 28 Февраль 2017, 17:17:59
addlayer - одна из функций.
Добавил addlayer в mkpfs, вот что получилось:
Код
#!/bin/sh
## mkaufs, DdShurick 28.02.2017, GPL v2. The idea of betcher.
usage () {
if [ "$1" ]; then
echo "$0: $1"
else
echo "Использовать:"
echo " $0 [-r|--root dir] - изменения сохраняются в tmpfs"
echo " $0 [-r|--root dir] <раздел> <каталог> - изменения сохраняются в
  каталог на указанном разделе"
echo " -r|--root указать корень создаваемой aufs, по умолчанию /$SYSMNT/aufs$N"
echo "  раздел - \"sd[a-f][1-9]*\""
echo "  каталог - любое имя без пробела"
fi
exit 0
}

addlayer () {
[ "$(id -u)" = 0 ] || usage "Разрешено только root"
while true; do
echo "Для выхода нажмите Enter или укажите подключаемый модуль или каталог:"
read D
[ "$D" ] || exit
NEWLAYER=$(realpath "$D") || usage "Файл не найден"
[ "$(df "$NEWLAYER" | egrep '^aufs|^unionfs')" ] && usage "Ошибка!
    '$2' находится на разделе с aufs.
    Переместите на раздел с другой файловой системой."
    MODNAME=$(basename "$NEWLAYER")

case $(file -b $NEWLAYER) in
*directory) ;;
Squashfs*4.0*|Linux*ext*)
mkdir -p /$SYSMNT/bundles$N/"$MODNAME"
mount -o loop "$NEWLAYER" /$SYSMNT/bundles$N/"$MODNAME"
NEWLAYER=/$SYSMNT/bundles$N/"$MODNAME";;
*) usage "Invalid format $MODNAME" ;;
esac

mount -o remount,add:1:"$NEWLAYER" "$AUFSROOT" || usage "Ошибка монтирования"
done

}

SYSMNT=$(cut -f2 -d/ /sys/fs/aufs/si_$(grep ' / aufs' /proc/mounts | cut -f2 -d= | tr ',' ' ' | cut -f1 -d' ')/br0)
AUFSROOT="/"

[ "$0" = "addlayer" ] && addlayer

N=$(ls /sys/fs/aufs/ | wc -w) # № для aufs если несколько.
AUFSROOT="/$SYSMNT/aufs$N"

O=$(getopt -l help,root: -- hr: $@) || usage
eval set -- "$O"
for OPT in $O
do
case "$OPT" in
-h|--help) usage; break;;
-r|--root) AUFSROOT="$2"
shift 2;;
--) shift; break;;
esac
done

[ "$(id -u)" = 0 ] || usage "Разрешено только root"

if [ $# = 0 ]; then
mkdir /$SYSMNT/changes$N
mount -t tmpfs tmpfs /$SYSMNT/changes$N
elif [ $# = 2 ]; then
MNTPT="$(grep $1 /proc/mounts | awk '{print $2}')"
if [ "$MNTPT" = "" ]; then
[ "$(grep $1 /proc/partitions)" ] || usage "Такого раздела не существует"
[ "$(blkid $DEV | grep ext)" ] || usage "ФС не Linux"
MNTPT=/mnt/$1
mkdir $MNTPT
mount /dev/$1 $MNTPT
fi
mkdir $MNTPT/$2
ln -s $MNTPT/$2 /$SYSMNT/changes$N
else
usage
fi

mkdir -p $AUFSROOT
mount -t aufs -o dirs=/$SYSMNT/changes$N/=rw aufs "$AUFSROOT"

echo "Создана aufs с корнем $AUFSROOT"

addlayer
Неудобно, нет автодополнения при наборе имени модуля.
Название: Re: addlayer
Отправлено: sfs от 28 Февраль 2017, 17:27:59
Неудобно, нет автодополнения при наборе имени модуля.
http://wiki.puppyrus.org/puppyrus/pr218/pfs#editor_pfs
Название: Re: addlayer
Отправлено: DdShurick от 28 Февраль 2017, 17:44:36
http://wiki.puppyrus.org/puppyrus/pr218/pfs#editor_pfs
GUI лепить? Проще на ПКМ повесить.
Название: Re: addlayer
Отправлено: DdShurick от 09 Март 2017, 22:52:22
 Внёс некоторые изменения, возможно станет удобнее.
Название: Re: addlayer
Отправлено: betcher от 10 Март 2017, 06:50:18
Я так понял изменения касаются /tmp/aufs$n?
Собирался делать что-то подобное, но не для переноса пути к ауфс, а для блокировки. В принципе можно совместить наверное. Надо подумать.
Название: Re: addlayer
Отправлено: DdShurick от 10 Март 2017, 07:51:42
изменения касаются /tmp/aufs$n?
Да. Теперь mkaufs создаёт /tmp/aufs$n в котором записывается $AUFSROOT (корень aufs$N). Туда можно и другие переменные записывать.
Ещё. Не обязательно указывать № aufs, при необходимости спросит. Если aufs$N нет, автоматически будет запущен mkaufs.
Название: Re: addlayer
Отправлено: betcher от 10 Март 2017, 07:51:51
О, есть идея как сделать надежно.
1. Научить delaufs взвращать ошибку если осталась хоть одна папка aufs|bundles|changes($n)
2. В mkaufs после получения свободного $n, запускать delaufs $n, если ошибка n=n+1 и снова delaufs $n пока полностью чистый не найдет.
Название: Re: addlayer
Отправлено: DdShurick от 10 Март 2017, 08:00:11
1. Научить delaufs взвращать ошибку
Возвращает при невозможности удалить.
2 - не понял.
Название: Re: addlayer
Отправлено: betcher от 10 Март 2017, 08:11:16
При невозможности удалить недостаточно. Это же баш кодом завершения скрипта будет код завершения последней команды. Нужно после размонтирований и удалений проверять наличие папок с $n. Если найдено завершаться с ошибкой, если нет удалять /tmp/aufs$n.
Название: Re: addlayer
Отправлено: DdShurick от 10 Март 2017, 08:19:55
Код
 [ -d /$SYSMNT/aufs$N -a -d $AUFSROOT ] && usage "Выполнение $0 завершилось с ошибкой" || rm /tmp/aufs$N 
??
Название: Re: addlayer
Отправлено: betcher от 10 Март 2017, 08:25:03
По п.2.
delaufs в некоторых ситуациях может отработать некорректно. Или вообще не отработать если скрипт был поерван. Changes монтируется до aufs и в этот момент $n будет свободен. То есть два одновременно запущенных mkaufs с высокой вероятностью приведут к ошибке. По этому предлагаю такой алгоритм для mkpfs.
Получаем $n как сейчас.
Delaufs $n
если ошибка,  ищем следующий свободный и снова
delaufs $n
Пока не найдется свободный полностью.
Затем создаем /tmp/aufs$n - нужно, чтоб наличие этого файла запрещало другим эуземплярам mkaufs испрльзовать этот $n.
и только тогда создавать ченджз и ауфс.
Как то так.
Название: Re: addlayer
Отправлено: betcher от 10 Март 2017, 08:27:18
??
А в ситуации когда точка монтирования aufs размонтирована и удалена, а  ченджез и бандлез с этим номером нет?
Название: Re: addlayer
Отправлено: betcher от 10 Март 2017, 08:41:58
Можно даже не delaufs $n в mkaufs, а просто [ -f /tmp/aufs$n ]. Если файл есть, значит aufs удалена не полностью и номер использовать нельзя. Так много проще. То есть номер для mkaufs, это первый из тех, для которых нет блокирующего файла /tmp/aufs$n
Название: Re: addlayer
Отправлено: DdShurick от 10 Март 2017, 09:53:48
 Создал две aufs и удалил
Код
# su
Password:
# addlayer Git/pfs-utils/sqmod-tools.pfs
Корень aufs №1 /initrd/aufs1, сохранение изменений /initrd/changes1
# mkaufs
# addlayer /mnt/sda1/219/optional/Tetris.sfs
Выберите № aufs из:
1
2
Напечатайте выбранный №:2
Корень aufs №2 /initrd/aufs2, сохранение изменений /initrd/changes2
# delaufs 1
# delaufs 2
# ls /initrd/
bundles  changes
# ls /sys/fs/aufs
si_2771d6a7
ошибок нет.
Название: Re: addlayer
Отправлено: betcher от 10 Март 2017, 10:00:44
Они у вас поочередно запущены.
Пфсэкстракт создает новую ауфс ддя каждого извлекаемого пакета. Так вот два параллельно работающих пфсэкстракт валятся. Не у верен, что дело именно в этом, но хочу надежно щастраховаться от ошибок с созданием aufs, когда они создаются параллельно.
Название: Re: addlayer
Отправлено: betcher от 10 Март 2017, 11:16:49
Сделал то что описывал. Смотрите в /usr/bin/pfsfunc мы туда перенесли Ваши mkaufs и остальные. Не знаю на сколько поможет, но вроде не мешает и то ладно :) Буду тестить.
Название: Re: addlayer
Отправлено: DdShurick от 10 Март 2017, 11:43:04
Пфсэкстракт создает новую ауфс ддя каждого извлекаемого пакета.
Зачем? Это уже перебор. В каталог будет вполне нормально.
Так вот два параллельно работающих пфсэкстракт валятся.
На практике два часто приходится запускать?
надежно застраховаться от ошибок с созданием aufs, когда они создаются параллельно.
И не только параллельно. Над этим надо подумать.
Название: Re: addlayer
Отправлено: betcher от 10 Март 2017, 11:50:00
Зачем? Это уже перебор. В каталог будет вполне нормально.
Это в цикле не одновременно. Так удобнее было.
На практике два часто приходится запускать?
Нет конечно, но тем не менее... Сейчас два параллельно запустил, с описанными правками. 10 минут полет нормальный. Жду :)