Сайт | Скачать | Видео | Wiki

Голосование

Нужно?

Нужно
10 (71.4%)
Не нужно
4 (28.6%)

Проголосовало пользователей: 14

Автор Тема: mod-up. Обновление загруженных модулей.pfs из репозитория  (Прочитано 66873 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн ander

  • Активный участник
  • Старожил
  • ****
  • Сообщений: 300
  • Репутация: +16/-0
Re:Автообновление автозагружаемых модулей.pfs
« Ответ #15 : 27 Декабрь 2015, 20:04:41 »
Немного доработал регулярное выражение для разбора.
Разобрал правильно почти все.
Малость спотыкается на именах типа:
Osmo-0.2.12-2-p-s02.pfs                   ->      Osmo-.*\.pfs                   0.2.12-2-.*-s02
Paromplayer-p-150126-vlc-2.2.1.pfs   ->      Paromplayer-p-.*\.pfs      150126-.*-2.2.1

То есть таких, где внутри цифровой части есть еще часть с буквами.  Обрабатываться-то такие имена обрабатываются, но, например, в Paromplayer-p-150126-vlc-2.2.1.pfs  часть "vlc" получается не относящейся ни к имени, ни к версии, то есть, если в репозитории появится файл отличающийся именно в этой части, (Paromplayer-p-150126-vlc2-2.2.1.pfs например) скрипт его проигнорирует, сочтя идентичным.  Скорее всего такое маловероятно, но мало ли...

В имени
easypaint-git-p-v0.1.1.17.gad6cf88.pfs    ->   easypaint-git-p-.*.gad6cf88\.pfs        v0.1.1.17
часть ".gad6cf88" скрипт отнес к имени модуля, но тут уж я и сам в сомнениях, что это такое :)

В именах типа
sdl-lib-1.2.15-7-i686.pfs            ->       sdl-lib-.*\.pfs                1.2.15-7-i686
часть "i686" относится скриптом к версии.  Тут не знаю, что можно сделать, есть ведь, например
083-chrome-profile-i01.pfs, где подобная часть действительно относится к версии, да и часто встречающиеся "s03" по структуре аналогичны.

Зато довольно с довольно сложными для разбора именами типа
Network-manager-gtk2-0.9.8.9-3s07.pfs         ->   Network-manager-gtk2-.*\.pfs       0.9.8.9-3s07
linux-firmware-20150722.e10097a-1-any.pfs   ->   linux-firmware-.*-any\.pfs             20150722.e10097a-1
скрипт справляется вполне удовлетворительно.
Код
repo="http://www.puppyrus.org/~melvik/puppyrus/ftp/puppyrus/puppyrus-a/pra03/pfs"
[ -f repolist.txt ] \
  || wget -q -O - "$repo" \
      |sed -n 's/.*href="\(.*\.pfs\)".*/\1/p' \
      >repolist.txt
splitname(){  # Vlc-p-2.2.1-s03.pfs -> Vlc-p-.*.pfs 2.2.1-s03
  local name ver
  ver=$(echo "$1" |grep -oE '[_-]([A-z]{,2}[0-9][a-z0-9]*[_.+-])+')
  ver=${ver%?}
  ver=${ver#?}
  ver=$(echo $ver |sed 's/ /.*/g')
  export $2=$(echo "$1" |sed 's/\(.*\)'$ver'\(.*\)\.pfs/\1.*\2\\.pfs/')
  export $3=$ver
}
ls -1 /sys/fs/aufs/*/br[0-9]* \
 | while read branch ; do
      branchDir=$(cat $branch)
      pfsname=$(basename ${branchDir%=r*})
      pfsname=${pfsname#.}
      splitname $pfsname modname modver
#      echo "  $pfsname $modname $modver"
      grep "$modname" repolist.txt |grep -v "$pfsname" \
       | while read similarpfs ; do
           splitname "$similarpfs" rname rver
           if [ "$modname" == "$rname" -a "$modver" != "$rver" ] ; then
             echo "$pfsname"
             echo "$similarpfs"
             echo -----------
           fi
         done
   done

Оффлайн Pro

  • Активный участник
  • Ветеран
  • ****
  • Сообщений: 10737
  • Репутация: +113/-2
Re:Автообновление автозагружаемых модулей.pfs
« Ответ #16 : 28 Декабрь 2015, 03:05:18 »
ну теоретически, ты можешь потребовать чтобы названия модулей привели к более читаемому виду
возможно найдется доброволец вроде меня, который перепакует с правильным названием модули проблемные

Заодно будем знать, к какому виду надо стремиться при назывании модулей
Я загружаю новые пакеты сюда: http://file.puppyrus.org/users/ а дальше можно найти самостоятельно.

Оффлайн sfs

  • Администратор
  • Ветеран
  • *****
  • Сообщений: 33965
  • Репутация: +231/-0
  • Автор темы
    • PuppyRus-A
Re:Автообновление автозагружаемых модулей.pfs
« Ответ #17 : 28 Декабрь 2015, 09:41:34 »
Давайте определим стандарт и в НГ каникулы переименуем
Главные сомнения - -p- и авторВерсия. Как удобнее с точки зрения скрипта?
pfs-old pfs-testing не трогаем и в поиск не включаем
« Последнее редактирование: 28 Декабрь 2015, 09:43:11 от sfs »

Оффлайн ander

  • Активный участник
  • Старожил
  • ****
  • Сообщений: 300
  • Репутация: +16/-0
Re:Автообновление автозагружаемых модулей.pfs
« Ответ #18 : 29 Декабрь 2015, 00:35:34 »
Еще немного улучшил разбор.  Теперь архитектура типа i386 i686 x86-64 x64,
указание на xfree типа xf86 XF_86,
указание на библиотеку qt4
 всегда включаются в имя, а не в версию.
Linuxdcpp-1.1.0-4-i686-p01.pfs     ->   Linuxdcpp-.*-i686-.*\.pfs      1.1.0-4-p01
Части имени и версии вполне могут перемежаться.
Paromplayer-p-150126-vlc-2.2.1.pfs  ->  Paromplayer-p-.*-vlc-.*\.pfs     150126-2.2.1

-p- и авторВерсия разбираются без проблем.

принцип разбора:  версией считается часть, начинающаяся после - или _ и состоящая из секций, каждая из которых начинается с не более чем двух букв, за которыми следует как минимум одна цифра, а потом буквы и цифры.  Секция завершается . - + _
(то есть -s02- или -sf01- будут относиться к версии, а -sfs03- - уже нет)
Допустимые виды версий: module-0.1.8beta   module_v5c3 module-rc1234567a и тому подобное.
Частей версии может быть несколько (Paromplayer-p-150126-vlc-2.2.1.pfs - "150126" и "2.2.1"), все части в итоге объединяются в одну строку версии.
Все, что не относится к версии, а также особые случаи, указанные в начале (i686, xf86, qt4) остается в имени, вырезанные куски с версией заменяются на .*
То есть, если то, что получилось использовать как шаблон grep, найдутся все пакеты с таким именем разных версий.

Для проверки функции разбора сделал скрипт, содержащий только эту функцию: splitnametest.sh.txt
можно сделать так:
cat repolist.txt |while read name ; do ./splitnametest.sh.txt "$name"; done |less
или так
find /mnt/home/pra1511g/ -type f -name "*.pfs" -exec ./splitnametest.sh.txt {} \; |less
и посмотреть, есть ли файлы, какие разберутся неправильно, или просто сделать
./splitnametest.sh.txt hochu-nazvat-modul-tak-0123.4567f.pfs
и посмотреть, разберется ли предлагаемое название.

Пока еще не все просмотрел, но навскидку могу сказать, что переименовать скорее всего придется модули, содержащие в названии версию ядра, например Vbox-5.0.4-full-k4.1.6-pf4-p02.pfs  -> Vbox-.*-full-.*\.pfs  5.0.4-k4.1.6-pf4-p02
Проблема в том, что версия ядра тут - это действительно версия и нет никаких признаков, чтобы ее от версии пакета отличить, но в то же время Vbox-5.0.4-full-k4.1.6-pf4-p02.pfs на Vbox-5.0.4-full-k4.3.0-pf4-p02.pfs, к примеру, обновлять нельзя.
По-хорошему, тут разбор должен быть Vbox-.*-full-k4.1.6-pf4-.*\.pfs   5.0.4-p02, но как этого добиться, не представляю,
пожалуй проще все же переименовать в Vbox-5.0.4-full-kmod4.1.6pf4-p02.pfs  -> Vbox-.*-full-kmod4.1.6pf4-.*\.pfs   5.0.4-p02
то есть "k" заменить на "kmod" - больше двух букв и "pf4" прилепить без дефиса.

Но по крайней мере модулей, требующих переименования, очень немного.
« Последнее редактирование: 29 Декабрь 2015, 00:39:53 от ander »

Оффлайн sfs

  • Администратор
  • Ветеран
  • *****
  • Сообщений: 33965
  • Репутация: +231/-0
  • Автор темы
    • PuppyRus-A
Re:Автообновление автозагружаемых модулей.pfs
« Ответ #19 : 29 Декабрь 2015, 09:51:16 »
Модули ядра можно переложить в папку с ядром и не париться

Оффлайн ander

  • Активный участник
  • Старожил
  • ****
  • Сообщений: 300
  • Репутация: +16/-0
Re:Автообновление автозагружаемых модулей.pfs
« Ответ #20 : 06 Январь 2016, 01:20:43 »
Попытался присобачить к скрипту проверки обновлений что-то вроде gui на gtkdialog  :-\
Скрипт пока опять же ничего не делает,  :) только проверяет, нет ли в репозитории обновленных
версий тех модулей, которые на данный момент подключены и открывает окошко с чекбоксами.
Можно для пробы нащелкать что угодно, он пока ничего обновлять не будет, просто выведет в консоль,
с которой запущен, какие чекбоксы включены.

Видок, конечно, еще тот.  Мало того, что из меня дизайнер, как из слона балерина, так еще и не пойму,
как на этом gtkdialog хоть как-то текст выровнять.

Оффлайн Pro

  • Активный участник
  • Ветеран
  • ****
  • Сообщений: 10737
  • Репутация: +113/-2
Re:Автообновление автозагружаемых модулей.pfs
« Ответ #21 : 06 Январь 2016, 04:26:54 »
allign= не?
поставь pburn или pRun посмотри.
Я загружаю новые пакеты сюда: http://file.puppyrus.org/users/ а дальше можно найти самостоятельно.

Оффлайн sfs

  • Администратор
  • Ветеран
  • *****
  • Сообщений: 33965
  • Репутация: +231/-0
  • Автор темы
    • PuppyRus-A
Re:Автообновление автозагружаемых модулей.pfs
« Ответ #22 : 06 Январь 2016, 10:32:39 »
Попытался присобачить к скрипту проверки обновлений что-то вроде gui на gtkdialog  :-\
На ntf или yad не проще будет?
У меня куча ошибок
Код
echo "transmission-cli-p-2.84-s06.pfs"         |sed 's/i[3-6]86\|x86[_-]64\|x64\|[Xx][Ff][_-]\?86\|[Qq][Tt]4/masq/g'         |grep -oE '[_-]([A-z]{,2}[0-9][a-z0-9]*[_.+-])+'
grep: Неверный конец диапазона

Оффлайн ander

  • Активный участник
  • Старожил
  • ****
  • Сообщений: 300
  • Репутация: +16/-0
Re:Автообновление автозагружаемых модулей.pfs
« Ответ #23 : 06 Январь 2016, 13:37:34 »
На ntf или yad не проще будет?
А как на том же ntf получить окно с несколькими строчками?  Или делать на каждый обновляемый файл по окну?  Мне кажется, это уж будет слишком громоздко.  С yad вроде бы та же проблема, стандартное окошко вывести можно, а чуть более сложную структуру в этом окне уже не создать.

allign= не?
поставь pburn или pRun посмотри.
А где в gtkdialog есть align?
Я, конечно, только начал про него читать, но вроде бы там ни у одного элемента такого параметра нет.
Из всего выравнивния только флаги space-expand и space-fill, и то как-то кривовато работающие.  А самое главное -
нет упаковки виджетов в таблицу, есть только hbox, vbox и frame.
Ладно, это дело десятое, помаленьку разберусь.

У меня куча ошибок
Код
echo "transmission-cli-p-2.84-s06.pfs"         |sed 's/i[3-6]86\|x86[_-]64\|x64\|[Xx][Ff][_-]\?86\|[Qq][Tt]4/masq/g'         |grep -oE '[_-]([A-z]{,2}[0-9][a-z0-9]*[_.+-])+'
grep: Неверный конец диапазона

Странно.  grep другой, что ли?  У меня эта строчка нормально отрабатывает:
Код
~$ echo "transmission-cli-p-2.84-s06.pfs"  |sed 's/i[3-6]86\|x86[_-]64\|x64\|[Xx][Ff][_-]\?86\|[Qq][Tt]4/masq/g'  |grep -oE '[_-]([A-z]{,2}[0-9][a-z0-9]*[_.+-])+'
-2.84-s06.

~$ which grep
/usr/bin/grep

~$ ls -l /usr/bin/grep
-rwxr-xr-x 1 root root 161836 ноя 24  2014 /usr/bin/grep

~$ grep --version
grep (GNU grep) 2.21
Copyright (C) 2014 Free Software Foundation, Inc.
Лицензия GPLv3+: GNU GPL версии 3 или новее <http://gnu.org/licenses/gpl.html>
Это свободное ПО: вы можете продавать и распространять его.
Нет НИКАКИХ ГАРАНТИЙ до степени, разрешённой законом.

Авторы программы — Майк батон колбасытель (Mike Haertel) и другие, см. <http://git.sv.gnu.org/cgit/grep.git/tree/AUTHORS>.

busybox grep споткнулся, но тоже не так, для него надо
'[_-]([A-z]{,2}[0-9][a-z0-9]*[_.+-])+'
заменить на
'[_-]([A-z]{0,2}[0-9][a-z0-9]*[_.+-])+'
а то сокращенной записи не осилил.  Но с нулем и он отработал без ошибок.
« Последнее редактирование: 06 Январь 2016, 13:51:33 от ander »

Оффлайн sfs

  • Администратор
  • Ветеран
  • *****
  • Сообщений: 33965
  • Репутация: +231/-0
  • Автор темы
    • PuppyRus-A
Re:Автообновление автозагружаемых модулей.pfs
« Ответ #24 : 06 Январь 2016, 16:41:55 »
Код
ntf -k "gtk-yes|yes да|1=gtk-no|no|2" ["Заголовок"] ["текст"]
| можно заменить переводом строки
Запустите ntf --test - увидете все возможности

grep у меня как у Вас
Код
echo "transmission-cli-p-2.84-s06.pfs"  |sed 's/i[3-6]86\|x86[_-]64\|x64\|[Xx][Ff][_-]\?86\|[Qq][Tt]4/masq/g'  |busybox grep -oE '[_-]([A-z]{0,2}[0-9][a-z0-9]*[_.+-])+'
-2.84-s06.
Сработало - но busybox - плохая идея. Может на awk или sed заменить...
Только у меня проблема с grep?

Оффлайн ander

  • Активный участник
  • Старожил
  • ****
  • Сообщений: 300
  • Репутация: +16/-0
Re:Автообновление автозагружаемых модулей.pfs
« Ответ #25 : 06 Январь 2016, 19:19:17 »
Ну не может же быть, чтобы одинаковый grep с одинаковым регулярным выражением и с одинаковыми данными по-разному работал!
Самое смешное, неверный конец диапазона ему мог привидиться только в конструкциях типа [_-]
Можно попробовать переставить минус в начало:
'[-_]([A-z]{0,2}[0-9][a-z0-9]*[-_.+])+'
но во всех же руководствах написано, что чтобы минус воспринимался в квадратных скобках как символ, а не как признак диапазона, он должен стоять или в начале, или в конце, так что должно быть без разницы, если только grep не какой-нибудь нестандартный.

В аттач свой grep прикрепите, попробовать хочу.

Библиотеки не могут несовпадать?

ldd /usr/bin/grep
   linux-gate.so.1 (0xb7704000)
   libpcre.so.1 => /usr/lib/libpcre.so.1 (0xb767e000)
   libc.so.6 => /usr/lib/libc.so.6 (0xb74c4000)
   libpthread.so.0 => /usr/lib/libpthread.so.0 (0xb74a6000)
   /lib/ld-linux.so.2 (0xb7705000)
lrwxrwxrwx 1 root root 16 ноя 21 16:19 /usr/lib/libpcre.so.1 -> libpcre.so.1.2.4
-rwxr-xr-x 1 root root 468436 ноя 22  2014 /usr/lib/libpcre.so.1.2.4
lrwxrwxrwx 1 root root 12 ноя 21 16:19 /usr/lib/libc.so.6 -> libc-2.22.so
-rwxr-xr-x 1 root root 2048212 авг  6 07:41 /usr/lib/libc-2.22.so
« Последнее редактирование: 06 Январь 2016, 19:28:19 от ander »

Оффлайн sfs

  • Администратор
  • Ветеран
  • *****
  • Сообщений: 33965
  • Репутация: +231/-0
  • Автор темы
    • PuppyRus-A
Re:Автообновление автозагружаемых модулей.pfs
« Ответ #26 : 06 Январь 2016, 19:28:28 »
Код
# ldd /usr/bin/grep 
linux-gate.so.1 (0xb772c000)
libpcre.so.1 => /usr/lib/libpcre.so.1 (0xb76a9000)
libc.so.6 => /usr/lib/libc.so.6 (0xb74ef000)
libpthread.so.0 => /usr/lib/libpthread.so.0 (0xb74d1000)
/lib/ld-linux.so.2 (0xb772d000)

Оффлайн ander

  • Активный участник
  • Старожил
  • ****
  • Сообщений: 300
  • Репутация: +16/-0
Re:Автообновление автозагружаемых модулей.pfs
« Ответ #27 : 06 Январь 2016, 19:40:40 »
grep ни байтом не отличается и нормально работает.  Что за глюк удивительный.  ???
Версии библиотек не посмотрели?  Не то, что ldd показал, а те, которые реальные файлы, на которые ссылки указывают.

Оффлайн sfs

  • Администратор
  • Ветеран
  • *****
  • Сообщений: 33965
  • Репутация: +231/-0
  • Автор темы
    • PuppyRus-A
Re:Автообновление автозагружаемых модулей.pfs
« Ответ #28 : 06 Январь 2016, 19:56:26 »
Код
md5sum libpcre.so.1.2.4 libc.so.6 libpthread.so.0
483ca6168baf5bca509f274f6585884c  libpcre.so.1.2.4
12221008b9ffdafcb1bc396938a51666  libc.so.6
6b76fb4efd19ab2fb33957f91256094e  libpthread.so.0

Оффлайн ander

  • Активный участник
  • Старожил
  • ****
  • Сообщений: 300
  • Репутация: +16/-0
Re:Автообновление автозагружаемых модулей.pfs
« Ответ #29 : 07 Январь 2016, 01:09:06 »
Библиотеки те же.
Остается локаль.
Воспроизвел-таки я этот глюк, надо LC_COLLATE="ru_RU.UTF-8" поставить (в pra15xx она всегда вроде стояла =C, почему у вас не так, непонятно), тогда grep не переваривает '[A-z]'.
Сделал '[A-Za-z]', теперь можно и COLLATE русскую ставить, все равно работает.

Попробовал gui сделать на yad, на ntf -k оказалось все же менее удобно, третья колонка скрыта.

Опять же, пока ничего не делает, только проверяет модули, выводит список и по OK печатает имена выбранных файлов.