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

Автор Тема: Настройка mc (menu, extfs)  (Прочитано 92701 раз)

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

Оффлайн betcher

  • Ветеран
  • *****
  • Сообщений: 3019
  • Репутация: +35/-0
    • MagOS linux
Re: Настройка mc
« Ответ #195 : 08 Март 2018, 04:57:14 »
Для сравнения питон:
Код
user@MagOS ~ $ time unsquashfs -ll  /memory/data/from/0/MagOS/base/00-kernel.xzm > ./test1

real    0m1,384s
user    0m0,405s
sys     0m0,971s
user@MagOS ~ $ time ./xzm.py /memory/data/from/0/MagOS/base/00-kernel.xzm > ./test1

real    0m1,416s
user    0m0,559s
sys     0m0,883s


Тоже без оптимизаций, чисто как написалось :)
Код
#!/usr/bin/python
# -*- coding:utf-8 -*-
import os,  sys

def getList():
command = ('unsquashfs -ll ' + sys.argv[1] + ' |sed \'1,4d\'')
listing =  os.popen( command ).read().split('\n')
return listing

for line in getList():
if len(line) != 0:
items=line.split()
if len(items) == 8 :
print  items[0], '1', items[1].split('/')[0], items[1].split('/')[1], items[2], items[3].split('-')[2] + '-' + items[3].split('-')[0] + '-' + items[3].split('-')[1], items[4], items[5].replace('squashfs-root/', ' ') + ' -> ' + items[7] 
                if len(items) == 6 :
            print  items[0], '1', items[1].split('/')[0], items[1].split('/')[1], items[2], items[3].split('-')[2] + '-' + items[3].split('-')[0] + '-' + items[3].split('-')[1], items[4], items[5].replace('squashfs-root/', ' ')


Оффлайн betcher

  • Ветеран
  • *****
  • Сообщений: 3019
  • Репутация: +35/-0
    • MagOS linux
Re: Настройка mc
« Ответ #196 : 10 Март 2018, 18:48:15 »
Код
#!/usr/bin/python
# -*- coding:utf-8 -*-
import os,  sys, tempfile, shutil

def unsq_list(arch):
command = ('unsquashfs -ll ' + arch + ' |sed \'1,4d\'')
for line in os.popen( command ).read().split('\n'):
if len(line) != 0:
items=line.split()
if len(items) == 8 :
print  items[0], '1', items[1].split('/')[0], items[1].split('/')[1], items[2], items[3].split('-')[1] + '-' + items[3].split('-')[2] + '-' + items[3].split('-')[0], items[4], items[5].replace('squashfs-root/', ' ') + ' -> ' + items[7] 
if len(items) == 6 :
print  items[0], '1', items[1].split('/')[0], items[1].split('/')[1], items[2], items[3].split('-')[1] + '-' + items[3].split('-')[2] + '-' + items[3].split('-')[0], items[4], items[5].replace('squashfs-root/', ' ')

def copyout(arch, filename, dest):
tmpdir = tempfile.mkdtemp()
command = ('unsquashfs -f -d ' +  tmpdir + " " +  arch +   ' -e /' + filename )
os.popen(command)
shutil.copy2(tmpdir + '/' + filename, dest )
shutil.rmtree(tmpdir, ignore_errors=True)


if sys.argv[1] == 'list':
unsq_list( sys.argv[2] )
if sys.argv[1] == 'copyout':
copyout( sys.argv[2], sys.argv[3], sys.argv[4] )

Рабочий скрипт. По скорости довольно сносно, с первым вариантом на баше не сравнить.
Проверил на своих модулях. В среднем около секунды на вход в модуль. Максимум 3 сек было, на модуле с кучей мелких файлов. Копирование из модуля выглядит как со смонтированного. Короче вполне нормально.

Еще нужна секция в /etc/mc/mc.ext вроде такой.
# xzm
regex/\.xzm$
   Open=%cd %p/xzm://
Это если сам скрипт называется  xzm.
« Последнее редактирование: 10 Март 2018, 19:37:44 от betcher »

Оффлайн sfs

  • Администратор
  • Ветеран
  • ****
  • Сообщений: 33972
  • Репутация: +231/-0
  • Автор темы
    • PuppyRus-A
Re: Настройка mc
« Ответ #197 : 12 Март 2018, 10:01:22 »
Тянуть питон только для этого не вариант. Тем более проблемы только на больших архивах-модулях. Решаются через F2  распаковкой или монтированием
Может правда на СИ перепереть для ускорения? С построителем меню для jwm помогло

Оффлайн betcher

  • Ветеран
  • *****
  • Сообщений: 3019
  • Репутация: +35/-0
    • MagOS linux
Re: Настройка mc
« Ответ #198 : 12 Март 2018, 15:08:59 »
Необходимости именно в питоне конечно нет. Но чем то ускорить надо. Может perl или awk, но чтоб за один вызов, а не как у меня в первом варианте.  Си вряд ли добавит ощутимо скорости, а усложнит поддержку однозначно. Не та задача, чтоб еще конпилять :)
Смотрел, что у вас по поводу модулей и  f2-меню. Мне показалось не очень понятным. В итоге пока остановился на двух пунктах. 1.  сборка модуля из текущего каталога и 2. сборка контейнера из выделенных файлов и каталогов (если выделенный файл не squash просто игнорить). Думаю дальше :)

Оффлайн sfs

  • Администратор
  • Ветеран
  • ****
  • Сообщений: 33972
  • Репутация: +231/-0
  • Автор темы
    • PuppyRus-A
Re: Настройка mc
« Ответ #199 : 12 Март 2018, 15:33:45 »
чем то ускорить надо. Может perl или awk
awk или sed было бы идеально

что у вас по поводу модулей и  f2-меню
f2 p - сборка модуля из папки
f2 m сборка составного pfs из папки (если внутри папки есть pfs - из них ; если папки - из папок)
f2 u на pfs - распаковка

Оффлайн betcher

  • Ветеран
  • *****
  • Сообщений: 3019
  • Репутация: +35/-0
    • MagOS linux
Re: Настройка mc
« Ответ #200 : 12 Март 2018, 15:54:58 »
Я понял как сделано, просто, кмк, логичнее делать из выделенного, раз такой механизм есть.  Выделил папки -> контейнер из папок, выделил модули -> контейнер из модулей, выделил модули и папки -> делаем контейнер из модулей и папок.
А perl тоже не вариант? Однострочники на перле тоже в баше часто вижу. Правда на нем я тоже не умею :(

Оффлайн sfs

  • Администратор
  • Ветеран
  • ****
  • Сообщений: 33972
  • Репутация: +231/-0
  • Автор темы
    • PuppyRus-A
Re: Настройка mc
« Ответ #201 : 12 Март 2018, 16:00:32 »
логичнее делать из выделенного
Логичнее - может быть. Только удобнее ли
А уже реализовали?
perl тоже не вариант?
Не вариант.
Правда на нем я тоже не умею :(
тоже не умею

Оффлайн betcher

  • Ветеран
  • *****
  • Сообщений: 3019
  • Репутация: +35/-0
    • MagOS linux
Re: Настройка mc
« Ответ #202 : 12 Март 2018, 16:34:35 »
А уже реализовали?
Прототип.
Код
+ t t
q       Compress tagged files to xzm module
        list=''; droped=''
for i in %t ; do
            if file $i |grep -q quashfs ; then
               list="$list $i"
    elif [ -d $i ] ; then
       list="$list $i"
    else
       droped="$droped $i"
    fi
        done
echo "Dirs and modules for mkpfs: $list"
[ -n "$droped" ] && echo "Droped files (is not squashfs): $droped"
        echo -n "Name of the compressed file: [ $(echo $list |cut -d " " -f 1) ]: "
        read modname
        if [ "$modname"x = x ] ; then
   modname=""
else
   modname="-o $modname"
fi
mkpfs $list -o $modname

А вот тот файл, что на питоне будет уже в следующей сборке. Оч. удобная штука получилась. Если сообразим сопоставимый по скорости и простоте поддержки вариант без питона думаю, что уговорю Михаила заменить. Если таких совместных кусочков для работы в mc с модулями наберется можно добавить в гит pfs-utils, только продумать в каком виде, тут же не только файлы, но и патчи.
« Последнее редактирование: 12 Март 2018, 17:06:33 от betcher »

Оффлайн sfs

  • Администратор
  • Ветеран
  • ****
  • Сообщений: 33972
  • Репутация: +231/-0
  • Автор темы
    • PuppyRus-A
Re: Настройка mc
« Ответ #203 : 30 Март 2018, 09:40:54 »
Посмотрел внимательнее - это совсем плохо - много форков
Пересмотрел свое. У меня сделано : mount + find + ls
Вряд ли на питоне быстрее

Оффлайн betcher

  • Ветеран
  • *****
  • Сообщений: 3019
  • Репутация: +35/-0
    • MagOS linux
Re: Настройка mc
« Ответ #204 : 30 Март 2018, 11:39:27 »
Что плохо не спорю. Это просто проверка того, что вообще возможно обойтись без монтирования.

Оффлайн sfs

  • Администратор
  • Ветеран
  • ****
  • Сообщений: 33972
  • Репутация: +231/-0
  • Автор темы
    • PuppyRus-A
Re: Настройка mc
« Ответ #205 : 30 Март 2018, 11:41:57 »
возможно обойтись без монтирования.
Как раз с такого варианта начинали. Рядом лежит squashfs-ilyuk. Подглючивал
А чем монтирование плохо?

Оффлайн betcher

  • Ветеран
  • *****
  • Сообщений: 3019
  • Репутация: +35/-0
    • MagOS linux
Re: Настройка mc
« Ответ #206 : 30 Март 2018, 11:49:25 »
Монтирование очень плохо.
Во первых только рут, во вторых при копировании из модуля нескольких файлов получим несколько монтирований (возможно тут не прав), в третьих при любых проблемах с mc, терминалом или например не хватке места для копирования получим не размонтированный модуль. С unsquashfs этих проблем нет. По скорости думаю что моунт+файнд и парсинг питоном будут сопоставимы. Возможно даже будет разный победитель при разных размерах модулей.   
« Последнее редактирование: 30 Март 2018, 11:57:29 от betcher »

Оффлайн betcher

  • Ветеран
  • *****
  • Сообщений: 3019
  • Репутация: +35/-0
    • MagOS linux
Re: Настройка mc
« Ответ #207 : 30 Март 2018, 12:01:41 »
Можно еще патчить unsquashfs, или написать авторам, чтоб сразу правильный выхлоп сделали.

Оффлайн sfs

  • Администратор
  • Ветеран
  • ****
  • Сообщений: 33972
  • Репутация: +231/-0
  • Автор темы
    • PuppyRus-A
Re: Настройка mc
« Ответ #208 : 30 Март 2018, 12:42:54 »
Во первых только рут
это да
Еще одно "облегчение" от работы под рутом
при копировании из модуля нескольких файлов получим несколько монтирований (возможно тут не прав)
уже не первый год монтирование
Таких проблем не было

Оффлайн betcher

  • Ветеран
  • *****
  • Сообщений: 3019
  • Репутация: +35/-0
    • MagOS linux
Re: Настройка mc
« Ответ #209 : 30 Март 2018, 12:48:47 »
Мне кажется если можно не монтировать, то нужно не монтировать. Вся задача только в том, как быстро разобрать выхлоп unsquashfs -ll, на удобоворимый для mc без привлечения питона, перла и проч. Если получится, я за.