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

Разработки проекта PuppyRus => PFS-utils => Разработка PFS и Initrd => Разработка PFS-utils v.3 (устаревшая) => Тема начата: Zay от 19 Январь 2017, 15:22:04

Название: libpfs Библиотека функций
Отправлено: Zay от 19 Январь 2017, 15:22:04
Как мне кажется, реализовать библиотеку функций можно было бы более оптимальным способом.
В реализации, предложенной betcher в ветке develop, я вижу некоторые недостатки, а именно:
 Синтаксическая ошибка в любом месте libpfs может сломать любой другой скрипт.
 Некоторая сложность тестирования функционала и отладки.

По моему мнению, эти функции лучше было бы реализовать по тому же принципу, по которому работает busybox. Т.е. не использовать функции, а вызывать библиотеку как любой внешний исполняемый файл, передавая ему первым параметром название нужной задачи.
Название: Re: Библиотека функций
Отправлено: betcher от 19 Январь 2017, 15:28:02
Запустить любую функцию можно отдельно. Вот так.
. /usr/lib/libpfs ; mountb ...

Не особо отличается от
/usr/bin/libpfs mountb

Зато в настоящем варианте файл либы читается один раз в начале скрипта, а в Вашем при каждом обращении. Еще у нас там сейчас переменные с дефолтными значениями общие для всех скриптов, если переделать как вы хотите то их нужно будет выносить в отдельный конфиг и его также нужно будет читать вначале каждого скрипта. В общем смысла не вижу, но и настаивать не стану.
Название: Re: Библиотека функций
Отправлено: Zay от 19 Январь 2017, 15:33:51
Запустить любую функцию можно отдельно
Из консоли?

. /usr/lib/libpfs
Вот это - ИМХО не очень хорошо.
Как мне кажется, лучше использовать функции из библиотеки так:
Код
libpfs mountb парамер1 параметр2

Т.е. так, как в ветке master сейчас вызываются скрипты mountb и umountb.
Название: Re: Библиотека функций
Отправлено: betcher от 19 Январь 2017, 15:39:32
Из консоли?
конечно
. /usr/lib/libpfs ; mountb par1 par2

P.S. Дополнил предыдущий ответ
Название: Re: libpfs Библиотека функций
Отправлено: betcher от 06 Февраль 2017, 11:03:49
Предлагаю вынести в отдельную функцию fs_type.

fstype=$(fs_type $filename)
Название: Re: libpfs Библиотека функций
Отправлено: sfs от 06 Февраль 2017, 11:15:30
вынести в отдельную функцию fs_type.
Ок. Только без правок с побочкой для disktype
Название: Re: libpfs Библиотека функций
Отправлено: betcher от 06 Февраль 2017, 11:43:27
Запушил, смотрите.
З.Ы. В libpfs нужно путь до ченджез вписать.
changesDir=
Не помню как у вас в ПРА.
Название: Re: libpfs Библиотека функций
Отправлено: sfs от 07 Февраль 2017, 09:02:52
changesDir=
/mnt/live/memory/changes Не нашел где понадобился. Вроде без этого обходились. Или это для sync2layer ?
Название: Re: libpfs Библиотека функций
Отправлено: betcher от 07 Февраль 2017, 09:31:13
Да для sync2layer.
Название: Re: libpfs Библиотека функций
Отправлено: sfs от 07 Февраль 2017, 09:36:29
Добавил в гит.  Так отлично
Название: Re: libpfs Библиотека функций
Отправлено: betcher от 07 Февраль 2017, 10:43:49
Надо бы sync2layer в пра проверить, возможно слэш нужен в конце.
Название: Re: libpfs Библиотека функций
Отправлено: sfs от 07 Февраль 2017, 10:52:46
Судя по changesDir=${SYSMNT}/changes/ - надо. Дописал. Он по любому не помешает
sync2layer в selftest никак не прикрутить?
Название: Re: libpfs Библиотека функций
Отправлено: betcher от 07 Февраль 2017, 11:30:16
Боюсь что нет. Там необратимые изменения. Ну то есть не ломает конечно, но вернуть к состоянию до  sync2layer не получится.
Название: Re: libpfs Библиотека функций
Отправлено: betcher от 17 Февраль 2017, 11:49:49
Хорошая мысля приходит опосля.
Код
if [ "$(basename $0)" == "libpfs" ] ;then
[ $1 ] || exit 1
command="$1"
shift
$command $@
fi
Вот такой кусочек в конце либы позволяет использовать ее так как у нас сейчас в скриптах и как Zay хотел тоже.

/usr/lib/libpfs disktypeb /dev/sda1 

тоже что и
. /usr/lib/libpfs ; disktypeb /dev/sda1

Название: Re: libpfs Библиотека функций
Отправлено: sfs от 18 Февраль 2017, 09:01:31
Хорошая мысля приходит опосля.
Давайте сделаем и переместим libpfs в /usr/bin
Название: Re: libpfs Библиотека функций
Отправлено: betcher от 18 Февраль 2017, 09:36:02
Да, можно. Я тогда и название бы сменил на pfsfunc например. А то либы запускать не комильфо :)
Название: Re: libpfs Библиотека функций
Отправлено: sfs от 18 Февраль 2017, 09:47:56
ок
Название: Re: libpfs Библиотека функций
Отправлено: betcher от 20 Март 2017, 09:23:07
Подумал сейчас. Надо было либу назвать просто pfs.
pfs addlayer
pfs ramfree
Куда лучше, кмк, чем
pfsfunc addlayer
pfsfunc ramfree
Стоит заморачиваться переименование?
Название: Re: libpfs Библиотека функций
Отправлено: sfs от 20 Март 2017, 10:21:24
Стоит заморачиваться переименование?
да. Там не много. Или тупо симлинк(и)
Название: Re: libpfs Библиотека функций
Отправлено: betcher от 20 Март 2017, 10:26:08
Там можно сидом по всей репе. Сделаю.
Название: Re: libpfs Библиотека функций
Отправлено: sfs от 06 Июль 2017, 15:25:33
Предлагаю заменить ад if-оф на
Код
losetupb() { losetup $@ || losetup-FULL $@   ; }
  mountb() {   mount $@ || busybox mount $@  ; }
 umountb() {  umount $@ || busybox mount $@  ; }
Это еще частично решит проблему систем без  busybox

Столкнулся с проблемой в системе с http://wiki.puppyrus.org/soft/arch-initrd-rootaufs2
mkpfs на tmpfs
Код
# mkpfs 1
mount: /mnt/aufs1 not mounted or bad option

       In some cases useful info is found in syslog - try
       dmesg | tail or so.
can't insert layer to aufs 1

[root@pra-roll live]# dmesg |tail
[ 5589.982845] aufs test_add:259:mount[1225]: unsupported filesystem, /home/live/1 (aufs)

#mount
proc on /proc type proc (rw,nosuid,nodev,noexec,relatime)
sys on /sys type sysfs (rw,nosuid,nodev,noexec,relatime)
dev on /dev type devtmpfs (rw,nosuid,relatime,size=502160k,nr_inodes=125540,mode=755)
run on /run type tmpfs (rw,nosuid,nodev,relatime,mode=755)
/dev/sr0 on /mnt/home type iso9660 (ro,relatime)
tmpfs on /mnt/live/memory/changes type tmpfs (rw,relatime,size=612404k)
/mnt/home/pra64/base/089-pra64f-filesystem-2017.06-07_any-sf12.pfs on /mnt/live/memory/images/089-pra64f-filesystem-2017.06-07_any-sf12.pfs type squashfs (ro,relatime)
/mnt/home/pra64/base/070-praf_64-sf06.pfs on /mnt/live/memory/images/070-praf_64-sf06.pfs type squashfs (ro,relatime)
/mnt/home/pra64/base/001-pra64f-170604_64-sf03.pfs on /mnt/live/memory/images/001-pra64f-170604_64-sf03.pfs type squashfs (ro,relatime)
/mnt/home/pra64/base/000-kernel-4.11.7-1-MANJARO_64.pfs on /mnt/live/memory/images/000-kernel-4.11.7-1-MANJARO_64.pfs type squashfs (ro,relatime)
rootaufs on / type aufs (rw,relatime,si=e5ce265916c1bc09)
/dev/sda1 on /mnt/sda1 type ext4 (rw,relatime,data=ordered)
securityfs on /sys/kernel/security type securityfs (rw,nosuid,nodev,noexec,relatime)
tmpfs on /dev/shm type tmpfs (rw,nosuid,nodev)
devpts on /dev/pts type devpts (rw,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=000)
tmpfs on /sys/fs/cgroup type tmpfs (ro,nosuid,nodev,noexec,mode=755)
cgroup on /sys/fs/cgroup/systemd type cgroup (rw,nosuid,nodev,noexec,relatime,xattr,release_agent=/usr/lib/systemd/systemd-cgroups-agent,name=systemd)
pstore on /sys/fs/pstore type pstore (rw,nosuid,nodev,noexec,relatime)
cgroup on /sys/fs/cgroup/memory type cgroup (rw,nosuid,nodev,noexec,relatime,memory)
cgroup on /sys/fs/cgroup/devices type cgroup (rw,nosuid,nodev,noexec,relatime,devices)
cgroup on /sys/fs/cgroup/freezer type cgroup (rw,nosuid,nodev,noexec,relatime,freezer)
cgroup on /sys/fs/cgroup/net_cls,net_prio type cgroup (rw,nosuid,nodev,noexec,relatime,net_cls,net_prio)
cgroup on /sys/fs/cgroup/blkio type cgroup (rw,nosuid,nodev,noexec,relatime,blkio)
cgroup on /sys/fs/cgroup/cpuset type cgroup (rw,nosuid,nodev,noexec,relatime,cpuset)
cgroup on /sys/fs/cgroup/cpu,cpuacct type cgroup (rw,nosuid,nodev,noexec,relatime,cpu,cpuacct)
cgroup on /sys/fs/cgroup/perf_event type cgroup (rw,nosuid,nodev,noexec,relatime,perf_event)
cgroup on /sys/fs/cgroup/pids type cgroup (rw,nosuid,nodev,noexec,relatime,pids)
systemd-1 on /proc/sys/fs/binfmt_misc type autofs (rw,relatime,fd=29,pgrp=1,timeout=0,minproto=5,maxproto=5,direct)
configfs on /sys/kernel/config type configfs (rw,relatime)
tmpfs on /tmp type tmpfs (rw,nosuid,nodev)
debugfs on /sys/kernel/debug type debugfs (rw,relatime)
hugetlbfs on /dev/hugepages type hugetlbfs (rw,relatime)
mqueue on /dev/mqueue type mqueue (rw,relatime)
tmpfs on /run/user/1000 type tmpfs (rw,nosuid,nodev,relatime,size=102064k,mode=700,uid=1000,gid=1000)
/dev/loop12 on /mnt/.1.pfs type squashfs (ro,relatime)
Т.е смонтировано по другому и не идет
Решил костыльно , но лучше идей нет
Код
#mount -o remount,add:1:"$NEWLAYER" "$AUFSMNT" || return 5
mount -o remount,add:1:"$NEWLAYER" "$AUFSMNT" || mount -o remount,add:1:"$changesDir$NEWLAYER" "$AUFSMNT" || return 5
т.е. если не remount из корня - берем реальную точку монтирования tmpfs

В гит не добавлял. Хочу сначала обсудить...

При FULL установке нет сообщения об этом и т.п.
Название: Re: libpfs Библиотека функций
Отправлено: betcher от 06 Июль 2017, 19:02:24
Про ад if-ов не против. Так лучше конечно.
По второму не пойму в какой ситуации такое нужно и почему.
Название: Re: libpfs Библиотека функций
Отправлено: sfs от 06 Июль 2017, 19:24:05
По второму не пойму в какой ситуации такое нужно и почему.
Переделал pra-roll . С UIRD не задалось (писал - Вы не впряглись)
Сделал свой инитрд
Вот с ним и вылезает проблема
unsupported filesystem, /home/live/1 (aufs)
Подробности выше
Название: Re: libpfs Библиотека функций
Отправлено: betcher от 07 Июль 2017, 03:33:42
Правильно ли я понял. У вас получается, что newlayer это aufs, и mount ругается на подключение aufs бранчем к aufs? Так никогда и не работало. У нас во всяком случае. Костыль не плохая идея для обхода в общем, если это работает. Надо только подумать не приведет ли это к неожиданностям и правильно ли сразу подключать или выделить ключик под такой финт, чтоб пользователь знал что подключено как бы нестандартно.
Название: Re: libpfs Библиотека функций
Отправлено: sfs от 07 Июль 2017, 08:48:52
Костыль не плохая идея для обхода в общем, если это работает.
Работает. Причем просто изменить
mount -o remount,add:1:"$NEWLAYER" "$AUFSMNT"
на  mount -o remount,add:1:"$changesDir$NEWLAYER" "$AUFSMNT" не прокатывает. mkpfs срабатывает - дальше проблемы
Вариант с || по идее в прочих ситуациях не должен сработать и поэтому не помешает
Если заморачиваться универсальностью - надо разбираться
Днями выложу пра-roll. Если посмотрите эту проблему - буду благодарен

По итогу функции перенес в гит. mount - думаем
Название: Re: libpfs Библиотека функций
Отправлено: betcher от 07 Июль 2017, 16:28:18
Если на работу у нас и в обычном ПРА это не влияет, то переносите. Проблемы будем решать по мере поступления неприятностей :)
Название: Re: libpfs Библиотека функций
Отправлено: sfs от 07 Июль 2017, 16:51:03
Не влияет но уж очень костыльно
Надеюсь, удастся изящней
Название: Re: libpfs Библиотека функций
Отправлено: betcher от 07 Июль 2017, 19:31:29
но уж очень костыльно
Можно добавить проверок. На то что $changesDir$NEWLAYER существует и что $NEWLAYER и $changesDir$NEWLAYER - одно и тоже. По дате, размеру или md5sum сравнить.
Название: Re: libpfs Библиотека функций
Отправлено: sfs от 08 Июль 2017, 12:01:30
Тогда уж проверить unsupported filesystem, /home/live/1 (aufs) и if с двумя вариантами
А еще лучше в rootaufs2 сделать как в porteus и uird
Название: Re: libpfs Библиотека функций
Отправлено: sfs от 17 Август 2017, 10:32:08
Разобрался (pfs 220 строка)
Код
if df $NEWLAYER |grep -q ^aufs ;then
Не то фильтруем. Надо
Код
if df --output=fstype $NEWLAYER |grep -q ^aufs$ ;then
Т.е. просто совпало что в uird и porteus:
df -T / давал aufs aufs
А в rootaufs2 было  rootaufs aufs
Только в busybox df нет --output... Будем заморачиваться?

По этой же причине 17
Код
aufsroot="$(`which busybox` mount |egrep '^aufs on / type aufs')" 
aufsroot="$(`which busybox` mount |egrep ' on / type aufs ')"


Пoправил в гит

Поправил ошибку в начале pfs
Код
PATH=${$PATH}:/sbin
PATH=${PATH}:/sbin
Название: Re: libpfs Библиотека функций
Отправлено: betcher от 17 Август 2017, 15:52:20
Нам busybox df может понадобиться только если на уровне uird что-то делать. То есть пока не важно, но кто его знает :)
Может чем то другим, не df, можно fs type смотреть?
Название: Re: libpfs Библиотека функций
Отправлено: Pro от 17 Август 2017, 16:09:50
Я сегодня смотрел через cat /proc/mounts вроде там были типы систем
Название: Re: libpfs Библиотека функций
Отправлено: sfs от 17 Август 2017, 16:24:26
Я сегодня смотрел через cat /proc/mounts вроде там были типы систем
Да. Так будет совсем универсально
Название: Re: libpfs Библиотека функций
Отправлено: betcher от 17 Август 2017, 19:51:05
Я сегодня смотрел через cat /proc/mounts вроде там были типы систем
Да. Так будет совсем универсально
Ага, надо думать. А то у нас:
./devel-tools/selftest
############# mkpfs ##############
df: неизвестный ключ «--output=fstype»
...
Может df -T $NEWLAYER |  awk '{print $2}' |grep ...
Название: Re: libpfs Библиотека функций
Отправлено: sfs от 18 Август 2017, 10:04:16
Поправил в гит
Код
#if df --output=fstype $NEWLAYER |grep -q ^aufs$ ;then
if [ "$(cat /proc/mounts |egrep '^'`df "$NEWLAYER" |tail -1 |cut -f1 -d " "`' ' |cut -f3 -d " ")" = aufs ];then
даже специально без awk
Название: Re: libpfs Библиотека функций
Отправлено: betcher от 18 Август 2017, 11:51:09
Селфтест проходит, но вот такая штука:
MagOS proc # cat /proc/mounts |egrep '^'`df /home |tail -n1 |cut -f1 -d " "`' ' |cut -f3 -d " "
ext3
ext3
ext3
ext3
ext3
ext3
ext3
ext3

Это строчки которые наделал uird своими mount --bind. То есть раздел один,но смонтирован несколько раз. Могут быть грабли или в данном случае не важно.
С aufs норм.
Название: Re: libpfs Библиотека функций
Отправлено: sfs от 28 Сентябрь 2017, 15:00:52
Код
if [ "$(cat /proc/mounts |egrep '^'`df "$NEWLAYER" |tail -1 |cut -f1 -d " "`' ' |cut -f3 -d " " |uniq)" = aufs ];then
Название: Re: libpfs Библиотека функций
Отправлено: sfs от 31 Октябрь 2019, 09:29:41
Для клонов дебиана надо
Код
#[ -d "$1/usr/lib/gdk-pixbuf-2.0/" ]  && gdk-pixbuf-query-loaders --update-cache &
[ "`find  "$1/usr/lib/" -maxdepth 2 -type d -name gdk-pixbuf-2.0`" ]
там /lub/x86_64-linux-gnu