-
Notifications
You must be signed in to change notification settings - Fork 172
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Feature: Consider porting FISH(FIle transfer over SHell filesystem) from Midnight Commander #1819
Comments
https://en.wikipedia.org/wiki/Files_transferred_over_shell_protocol SCP in NetRocks is very close afaik. If you could point us to the differences, it would be indeed helpful. |
SCP is fast you are right. Thanks for pointing that out. FISH & SCP are rather similar to each other.
P.S.: I badly miss JumpHosts support with NetRocks. |
As for 2, I am now trying to write NetRocks alternative as wrapper around command line sftp tool just as multiarc wraps around zip or tar. Is it something similar to what FISH in mc does? https://github.com/unxed/netpanel PS: Just PoC as for now, but still I was able to make ununtu-ubuntu connection and download a file. |
2unxed consider adding protocol to NetRocks instead of full plugin implementation. See https://github.com/elfmz/far2l/blob/master/NetRocks/HACKING.txt |
It seems to me that porting readily available and working code from Midnight would be simpler task than writing wrapper around sftp from scratch. FISH is rather primitive. And FISH commands stored in separated files can be just reused. Also FISH can be extended in almost any way you can imagine cause it just executes commands on remote server. With SFTP wrapper you are limited to standard SFTP client functionality and it`s limitations. P.S.: Execute Midnight and try FISH. It works so good. |
@elfmz извините, что на русском, но я немного устал и плохо соображаю. Думал в эту сторону, но есть проблемка: насколько я успел понять апи брокеров протоколов, там надо уметь возможность читать-писать по произвольному смещению. Консольная sftp не даёт такое. Теоретически такое можно было бы эмулировать, используя возможность докачки, и создавая пустой файл нужного размера, но это как-то совсем уж причудливо: писать такое, не обсудив сперва с коллегами, я не рискнул :) и ещё я сразу предупреждаю, что задолбаю вопросами про ipc и многопоточность, потому что в нетроксе уровень сей явно выше моего, и мне конечно, дико интересно разобраться во всем этом, но тупить на старте буду конкретно :) Below is google translation |
Used fish already. Good thing. Definitely porting from mc to netrocks API could be best solution if possible. |
Небязательно. scp тоже не умеет по произвольному и делает так:
|
И вот тут интересное. Докачка то как раз у консольного sftp есть. Вот нельзя ли как-то развинуть границы апи чтоб ее можно было использовать в том виде в котором она есть там? |
Does FISH support download/upload resume in mc? @vasya-r7 |
FISH supports download/upload resume in mc. |
Непонятно что раздвигать. Докачка у консолького sftp есть - так она и у нетроксовского sftp тоже есть. А у консолького scp докачки нету. А что есть у fish - это отдельный вопрос. В любом случае апи позволяет как протоколы с докачкой так и без. |
Раздвигать в том смысле чтоб докачка поддерживалась не только при доступности чтения/записи по любому смещению, но и по доступности опции "вот лежит недокачанный файл, докачивай с места, соответствующего его объему, и пиши в него же", как это в sftp сделано. Иначе придется эмулировать первый вариант поверх второго и это какаято дичь |
Но.. ведь так и сделано же: https://github.com/elfmz/far2l/blob/master/NetRocks/src/Protocol/Protocol.h#L91 |
API VFS mc выглядит так. @elfmz как думаете, этого достаточно для NetRocks? Т.е. можно сделать просто прокладку из одного API в другой?
Там, похоже, даже чтение по произвольному смещению есть:
|
И ещё. mc вроде бы под gpl 3. Плагин к нетроксу с использованием его кода точно легально делать? |
Так, я тут поизучал, как FISH в mc сделан. Офигел от гениальности. Это такая же обёртка, как я вокруг sftp хотел сделать, только вокруг ssh или rsh. То есть ей даже sftp-клиент консольный не нужен, а уж ssh клиент точно есть везде. Там в комплекте с реализацией FISH — пачка скриптов, их содержимое передаётся через стандартный ввод (stdin) процессу удалённой оболочки. И они на той стороне уже делают то что нужно — переименовывают скажем файл или отдают его байты с такого-то по такой-то. Ну и зависимостей никаких, кроме консольного ssh клиента, опять же. Теперь мне кажется, что надо просто всю реализацию из mc в far2l в форме плагина к Нетроксу портировать, а не изобретать велосипед. Не могу правда пока решить, как лучше — только саму fish или в принципе прокладку для любой VFS mc делать. Там ещё реализация VFS у них за собой может пол mc всяких либ потянуть. |
mc's VFS API needs GLib, and since the whole concept is to implement sftp-without-dependencies, this doesn't really suit me. So, apparently, it's easier to make own implementation of FISH based on my NetPanel in the form of a protocol plugin for NetRocks, using helper scripts from mc. Moreover, among its VFS, there is nothing else of particular interest to us, except undelete that can be also ported later. |
For those who are interested in my attempts to implement FISH like in mc. Here are early experiments. Currently working is a class with partial FISH implementation, and it can only connect, log in (by password or crypto key) and get a list of files, and a demo tool for this class. See readme.txt (in Russian only currently, sorry). Further, in principle, is already a matter of technology. PS: It even can remember password, that mc can not. Update from September 26, 2023: I, the author of the sources posted in this message, allow dual licensing of source code used in commit 9a5b427, both under mc-compatible licence and under the terms of GPL version 2. |
The FISH NetRocks plugin has been brought to the state "can show a list of files from a remote server on far2l's panel" (however, nothing else can be done yet :) Details are in readme.txt as as usual. Update from September 26, 2023: I, the author of the sources posted in this message, allow dual licensing of source code used in commit 9a5b427, both under mc-compatible licence and under the terms of GPL version 2. |
oh, it's so early :) |
о, я вижу, вы там что-то делали с кодом. а почему там лучше std::string, а не std::filesystem::path? |
не очень понял, @elfmz вы дальше сами? или это просто исправление ошибок за мной и я могу понемногу дальше пробовать имплементировать? |
думаю пока я это переделаю чутка и потом можно вместе имплементировать |
Аххаха надеюсь я не перестану понимать, как всё устроено, к тому моменту :) |
Ещё там хорошо бы ошибки обрабатывать, вот эти цифры после ### А ещё уже после придумывания, как передать пароль так, чтоб ssh его съел (обычная отправка на stdin через pipe не срабатывает), узнал, что не один я этот фокус изобрел: |
Хм, у меня после последних двух коммитов соединяться перестало, так и должно быть? |
не должно, у меня наоборот ща заработали переходы по директориям |
На хост, где авторизация по паролю, заходит норм! И по папкам там ходит и типы и размер файлов показывает правильно, кайф! А вот на хост, где авторизация по файлу-ключу, до сих пор не заходит. Виснет на «Connecting to site». PS: Оставлю тут ссылку на веточку, чтоб людям за изменениями проще следить было: |
Фреймворком я обозвал совокупность MakePTYAndFork.cpp и ClientApp, да. Слово, конечно, громковатое 😁 пусть будет мини фреймворчек! |
У рклона и фиша совсем разные юзкейсы просто. Фиш это про сходить на древний роутер, где ничего нет, или сходить куда угодно с древнего роутера, где ничего нет, или собрать far2l под какую-то экзотику, куда зависимости не поставишь, и всё же иметь работающий сетевой плагин из коробки. А рклон это в основном про сходить в облака, совсем другая история. Для того же Яндекса, скажем, у нас до сих пор нет клиента, потому что Вебдав у них «работает» в режиме «то потухнет, то погаснет». Там же, кстати, не надо будет делать поддержку 100500 утилит, существующих в 100500 разных версиях и редакциях. Должно быть сильно проще в реализации, по идее. |
Под 18.04 не собралось почему-то https://launchpadlibrarian.net/688892950/buildlog_ubuntu-bionic-amd64.far2l_0+git202309241934.af0eedb3~ubuntu18.04.1_BUILDING.txt.gz
|
А, и да, может, компрессию для ssh включать, всё-таки? |
окошко настроек протокола надо сделать, и там такое включать |
Только, может, сделать так, чтобы «включить» было по умолчанию? Раз уж у нас используются всякие паддинги, которые могут забить канал легко пакуемой, но не очень полезной инфой. |
А, ещё бажок мелкий. Если на удаленной системе по FISH выполнить такой шелл скрипт:
То всё виснет. |
А ещё far2l через shell прекрасно запускается, а вот mc, почему-то, нет:
|
Коллеги. А давайте справку NetRocks/configs/plug/helpe.hlf наполнять про свежедобавленный Shell. Пока предлагаю по аналогии с |
Ещё вот такое на i386:
|
Поддерживаю идею про хелп, но не имею ресурса самому заняться сейчас, увы. Готов проверить текст на фактические и стилистические ошибки! |
Может просто опцию для cmake чтобы была возможность отключить это для некоторых платформ? |
Раскидал обсуждавшиеся здесь задачи и проблемы по отдельным тикетам, а то рехнуться можно искать что-то. |
У нас тут лицензионная коллизия случилась: SHELL в far2l сделан на основе кусочков кода, которые я сюда выкладывал, а я там в архиве прописал, что лицензия совместимая с mc (т.е. GPL 3), так как использовался код helpers из него. От моего кода там почти ничего не осталось сейчас, helpers тех точно нет, однако для 100% юридической чистоты пусть будет так: Update from September 26, 2023: I, the author of some of the sources posted in this issue, allow dual licensing of source code used in commit 9a5b427, both under mc-compatible licence and under the terms of GPL version 2. |
в ветке nr-fish перестал работать вход по ключу. |
у меня входит, на чем виснет? |
Перепроверил как следует. Проблема была у меня на сервере. Всё нормально соединяется. |
Кстати вот ещё какая штука, вокруг которой обёртку бы, подобную обертке над ssh — testdisk. Когда там undelete делаешь ну и вообще ходишь по поврежденным файловым системам. UI отвратительный. Вот бы иметь возможность это всё на панели far2l делать, просто оттуда копировать файлы. |
Midnight Commander has FISH.
And FISH is brilliant IMHO and superfast! It would be so nice to get FISH with far2l.
FISH supports jump hosts which NetRocks is lacking nowadays.
FISH can be used instead SFTP most of the times.
FISH is faster comparing to SFTP. Dirs listing is faster and download/upload speeds are much better.
For example with my 30 MBit Internet transferring files with FISH via Midnight Commander saturates Internet link. SFTP via far2l download speeds are several times less than FISH(2-6x). I have Little Snitch firewall app which displays link speed in menubar. I`ve never saw SFTP via far2l saturating internet link.
Take a look at screenshots for the same file(0017.MOV) transferred via SFTP(far2l) and FISH(mc). It took MC 1 minute 23 seconds compared to Far2l (SFTP) with 2 minutes 48 seconds to transfer the same file. I repeated the test several times. Result is consistent during repetitions.
As for my system I`m using MacOs on MacBook Air M1 with Ventura 13.4. Far2l(2.5.2-beta) and MC(4.8.30 from macports) are latest as of the time of writing.
Thank you for far2l, it`s great!
The text was updated successfully, but these errors were encountered: