LINUX.ORG.RU
ФорумTalks

SFTP в midnight commander


1

1

Есть желающие потестировать sftp в mc?

собирать так

git clone git://midnight-commander.org/git/mc.git
cd mc
git checkout -b 1535_sftp origin/1535_sftp
autogen.sh
configure --prefix=$(pwd)/TEST
make && make install
TEST/bin/mc

нужна libssh2 >= 1.2.5

★★★★

Ответ на: комментарий от Dark_SavanT

хмм, а мне всегда казалось, что он сфтп поднимает при этом
но, видимо, ошибался

TERRANZ ★★★★ ()

сегфолт сразу после ввода пароля, если вход по dns по неверному порту
strace:

socket(PF_INET, SOCK_STREAM, IPPROTO_IP) = 9
connect(9, {sa_family=AF_INET, sin_port=htons(22), sin_addr=inet_addr("255.255.255.255")}, 16) = -1 ENETUNREACH (Network is unreachable)
--- SIGSEGV (Segmentation fault) @ 0 (0) ---
+++ killed by SIGSEGV +++

вход по IP, неверный порт

socket(PF_INET, SOCK_STREAM, IPPROTO_IP) = 9
connect(9, {sa_family=AF_INET, sin_port=htons(22), sin_addr=inet_addr("192.168.2.1")}, 16) = -1 ECONNREFUSED (Connection refused)
--- SIGSEGV (Segmentation fault) @ 0 (0) ---
+++ killed by SIGSEGV +++

и наконец удачный вход, если ввести корректное user@NN.NNN.NNN.NNN:PPPP
скопировал директорию с sftp успешно, после копирования на sftp на середине

fstat(9, {st_mode=S_IFREG|0664, st_size=0, ...}) = 0
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f9afb3e0000
write(9, "Midnight Commander TreeStore v 2"..., 35) = 35
close(9)                                = 0
munmap(0x7f9afb3e0000, 4096)            = 0
access("/home/kolan/.cache/mc/Tree.tmp", R_OK) = -1 ENOENT (No such file or directory)
rt_sigprocmask(SIG_BLOCK, [INT QUIT TSTP TTIN TTOU WINCH], [], 8) = 0
write(1, "\33[?1l\33>\33[31;1H\33[m\33[39;49m\r      "..., 184) = 184
rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
ioctl(3, SNDCTL_TMR_START or TCSETS, {B38400 opost isig icanon echo ...}) = 0
rt_sigprocmask(SIG_BLOCK, [INT QUIT TSTP TTIN TTOU WINCH], [], 8) = 0
ioctl(3, SNDCTL_TMR_STOP or TCSETSW, {B38400 opost isig icanon echo ...}) = 0
close(3)                                = 0
rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
fstat(1, {st_mode=S_IFCHR|0620, st_rdev=makedev(136, 3), ...}) = 0
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f9afb3e0000
write(1, "\33[39;49m", 8)               = 8
rt_sigaction(SIGCHLD, {SIG_DFL, [CHLD], SA_RESTORER|SA_RESTART, 0x3aed2321f0}, {0x416580, [], SA_RESTORER|SA_RESTART, 0x3aed2321f0}, 8) = 0
write(1, "\n", 1)                       = 1
exit_group(0)                           = ?

backbone ★★★★★ ()
Ответ на: комментарий от backbone

а, да, последнее тоже завершилось сегфолтом и ./configure запускал как было указано в прежней теме

configure --prefix=$(pwd)/ROOT --enable-maintainer-mode

backbone ★★★★★ ()
Ответ на: комментарий от backbone

а да, забыл, да надо пока по IP, по FQDN пока не сделал, сегодня, вечером наверное запушу...

angel_il ★★★★ ()
Ответ на: комментарий от angel_il

при копировании одной и той же директории from sftp 4 Гб замирает случайно на 350-430Мб, mc.log:

sftpfs_open read
sftpfs_read: 8192
sftpfs_read: 8192
sftpfs_read: 8192
...

при копировании to sftp то же от 150Мб до 460Mb:

sftpfs_translate_path: [/#path...]
sftpfs_open write mode: [33152]
sftpfs_write: [8192]
sftpfs_write: [8192]
...

процессор amd k8 загрузка 90-100% во время копирования.

backbone ★★★★★ ()

еще потестируйте копирование линков - чтобы копировал файл целиком, а не 11 байт.

sign ()
Ответ на: комментарий от backbone

замирает случайно

Обычное копирование через ssh при этом работает нормально? Не может ли это быть связано с потерей фрагментированных пакетов?

sign ()
Ответ на: комментарий от sign

>Обычное копирование через ssh при этом работает нормально? Не может ли это быть связано с потерей фрагментированных пакетов?

возможно, так как пробовал повторить с localhost, не повторяется пока, при копировании на удалённый хост тоже заметил — падает... но это нормально для текущего статуса плагина которому пока исполнилось 2 дня отроду :)

angel_il ★★★★ ()

Недавно (начался после обновления из git, эдак, неделю-две назад) время от времени стал ловить глюк в mc: коннектился к ssh-серверу, редактировал файл по F4, сохранял по F2. В результате новое содержимое файла ДОПИСЫВАЛОСЬ к существующему в конец вместо записи поверх.

Сегодня обновился, но пока ещё с ssh особо не работал, не могу сказать, остался ли этот глюк.

karbofos ()
Ответ на: комментарий от karbofos

это FISH, немного другое, но там действительно кое что менялось а именно добавлена пакетная передача файла и докачка... вот видимо в редакторе оно докачивает а не перезаписывает, спасибо за реторт...

angel_il ★★★★ ()
Ответ на: комментарий от backbone

просьба пересобрать и увеличить таймаут секунд до 10000, дело в нём, ну и я там по мелочи запатчил...

angel_il ★★★★ ()
Ответ на: комментарий от backbone

>да, обычное через ssh нормально работает тут такое дело... через fish если копировать с одного хоста на другой то сначала всё скопируется в каталог /tmp что не всегда уместно...

angel_il ★★★★ ()
Ответ на: комментарий от angel_il

по имени хоста коннект успешный =)

установлен таймаут sftp в 10000 сек

Если указан неверный порт, корректно выдаёт ошибку без вылета, но повторная попытка выдаёт: «Невозможно прочесть содержимое каталога» сразу после ввода имени и адреса, не запрашивая пароля, даже если имя и адрес изменились => перезапуск MC.

Имеется на sftp в одной директории file1, symlink1->file1. Если выбрать клавишами курсора symlink1, в строке статуса появляется сообщение: «сбой чтения ссылки»
Попытка скопировать его на локальную машину, где уже имеется file1 выводит сообщение «Невозможно создать целевую симв. ссылку /путь/symlink1 Нет такого файла или каталога (2) ignore/retry/abort»

Всё остальное (~3894Мб данных 455 файлов) скопировалось с sftp и обратно успешно =).

установлен таймаут sftp в 30 сек
копирование прошло успешно в обоих направлениях, видимо в патче скрыта киллерфича =)

загрузка процессора при копировании с локального sftp приблизительно mc:44-50%, sshd:33+7=50%

запуск mc на быстром процессоре k10, таймаут sftp по-умолчанию = 900 сек
загрузка mc: 9-11%, sshd(удалённый хост): 16-21%
~4Гб в обоих направлениях скопировалось без ошибок!

p.s. в процессе тестирования ни одного сегфолта не замечено

в mc.log наблюдаются многократно повторяющиеся строчки

sftpfs_read: 8192
sftpfs_read: 8192
sftpfs_read: 8192
...
при копировании с sftp и
sftpfs_write: [8192] - (8192)
- обратно

backbone ★★★★★ ()
Ответ на: комментарий от backbone

sftpfs_read: 8192

это порции которыми оно качает, порций много... :)

Если выбрать клавишами курсора symlink1, в строке статуса появляется сообщение: «сбой чтения ссылки»

это пока просто не реализовано :) там в обработчике просто заглушка...

angel_il ★★★★ ()
Ответ на: комментарий от backbone

да забыл сказать еще можно симлинки попробовать посоздавать...

angel_il ★★★★ ()
Ответ на: комментарий от angel_il

скопированная с локалхоста на sftp ссылка указывает на корень фс /, если в пути указано только имя файла:

file1, symlink -> ./file1 - работает корректно с относит. и абс. путями =)
file2, symlink -> file2 - работает некорректно

backbone ★★★★★ ()
Ответ на: комментарий от angel_il

А нет, в случае с symlink -> ./file тоже не так. В случае относительных ссылок урезается начало пути и добавляется слеш:

symlink -> file => /
symlink -> ./file => /file
symlink -> dir/file => /file
symlink -> ./dir/file => /dir/file

с абсолютными путями всё работает!

backbone ★★★★★ ()
Ответ на: комментарий от backbone

В строке статуса ссылка во всех случаях читается правильно.

backbone ★★★★★ ()
Ответ на: комментарий от angel_il

> а можно подробнее?
«скопированная с локалхоста на sftp ссылка указывает на корень фс /, если в пути указано только имя файла»

копируешь симлинк на sftp-сервак, симлинк должен быть относительным.
скопируй mc, mcview, mcedit

Slavaz ★★★★★ ()
25 сентября 2011 г.
Ответ на: комментарий от angel_il


чтобы mc_log работал надо запускать как то так
export MC_LOG_ENABLE=1; src/mc
лог видно тут
tail -f ~/.cache/mc/mc.log



debian sid, mc вчера собрал из git


под юзером даю export MC_LOG_ENABLE=1
но файл ~/.cache/mc/mc.log не создается


mc -V
GNU Midnight Commander, версия 4.7.5-49-g1b99570
Скомпилирован с библиотекой GLib версии 2.28.1
С библиотекой S-Lang и с базой данных terminfo
Со встроенным редактором
C поддержкой внутренней командной оболочки
С поддержкой фоновых операций
С поддержкой мыши в xterm
С поддержкой событий X11
С поддержкой интернационализации
С поддержкой многих кодировок
Виртуальная файловая система: cpiofs, tarfs, sfs, extfs, ftpfs, fish
Тип данных: char: 8; int: 32; long: 32; void *: 32; size_t: 32; off_t: 64;

Sky777 ()
Ответ на: комментарий от Sky777

я не смог собрать мс по рекомендациям из 1 поста

CC util.o
CC selcodepage.o
CCLD mc
filemanager/.libs/libmcfilemanager.a(libmcfilemanager_la-panel.o): In function `_do_panel_cd':
/usr/src/mc/src/filemanager/panel.c:2679: undefined reference to `mc_log'
/usr/src/mc/src/filemanager/panel.c:2699: undefined reference to `mc_log'
/usr/src/mc/src/filemanager/panel.c:2712: undefined reference to `mc_log'
/usr/src/mc/src/filemanager/panel.c:2714: undefined reference to `mc_log'
/usr/src/mc/src/filemanager/panel.c:2720: undefined reference to `mc_log'
filemanager/.libs/libmcfilemanager.a(libmcfilemanager_la-panel.o):/usr/src/mc/src/filemanager/panel.c:2725: more undefined references to `mc_log' follow
collect2: ld returned 1 exit status
make[3]: *** [mc] Ошибка 1
make[3]: Leaving directory `/usr/src/mc/src'
make[2]: *** [all-recursive] Ошибка 1
make[2]: Leaving directory `/usr/src/mc/src'
make[1]: *** [all-recursive] Ошибка 1
make[1]: Leaving directory `/usr/src/mc'
make: *** [all] Ошибка 2

Sky777 ()
Ответ на: комментарий от angel_il

спасибо - помогло, sftp заработал

но вижу часто сообщения

кеш каталога устарел для «ИМЯ каталога»

такое сообщение выскакивает при просмотре по F3 или редактировании по F4 какого-либо файла на удаленной машине

в логах

mc_get_current_wd
vfs_release_path
panel_clean_dir
do_load_dir
_do_panel_cd
directory = [..]
mc_get_current_wd
vfs_release_path
panel_clean_dir
do_load_dir
_do_panel_cd
directory = [Wallpapers]
mc_get_current_wd
vfs_release_path
panel_clean_dir
do_load_dir
_do_panel_cd
directory = [..]
mc_get_current_wd
vfs_release_path
panel_clean_dir
do_load_dir
_do_panel_cd
directory = [LOST.DIR]
mc_get_current_wd
vfs_release_path
panel_clean_dir
do_load_dir
_do_panel_cd
directory = [..]
mc_get_current_wd
vfs_release_path
panel_clean_dir
do_load_dir
_do_panel_cd
directory = [Android]
mc_get_current_wd
vfs_release_path
panel_clean_dir
do_load_dir
_do_panel_cd
directory = [data]
mc_get_current_wd
vfs_release_path
panel_clean_dir
do_load_dir
_do_panel_cd
directory = [com.cooliris.media]
mc_get_current_wd
vfs_release_path
panel_clean_dir
do_load_dir
_do_panel_cd
directory = [cache]
mc_get_current_wd
vfs_release_path
panel_clean_dir
do_load_dir

Sky777 ()
Ответ на: комментарий от angel_il

делал по вашей инструкции в 1 посту


/usr/src/mc/TEST/bin$ ./mc -V
GNU Midnight Commander, версия 4.8.0-pre1-87-g7274e3d
Скомпилирован с библиотекой GLib версии 2.28.1
С библиотекой S-Lang и с базой данных terminfo
Со встроенным редактором
C поддержкой внутренней командной оболочки
С поддержкой фоновых операций
С поддержкой мыши в xterm
С поддержкой событий X11
С поддержкой интернационализации
С поддержкой многих кодировок
Виртуальная файловая система: cpiofs, tarfs, sfs, extfs, ftpfs, fish
Тип данных: char: 8; int: 32; long: 32; void *: 32; size_t: 32; off_t: 64;

Sky777 ()
Ответ на: комментарий от Sky777

да согласен есть пока такая фигня, на работу не влияет, я там кой какие еще косячки поправил, прошу еще потестить... в основном исправил глючки с редактированием файла

angel_il ★★★★ ()
Ответ на: комментарий от angel_il

> я там кой какие еще косячки поправил, прошу еще потестить... в основном исправил глючки с редактированием файла
он это исправил... ишь ты. Я поломал - я исправил.

Илья, давай очистим твой бранч от лишних диалогов настроек и вольём в 4.8.1? А то с твоими новомодными штучками бранч будет ждать переделки VFS API на mc_events. Заколебёшьси опять переделывать под новое API :)

Slavaz ★★★★★ ()
Ответ на: комментарий от Slavaz

>Я поломал - я исправил.

а кто придумал как исправить? :)

angel_il ★★★★ ()
Ответ на: комментарий от angel_il

обновился - потестирую

./mc -V
GNU Midnight Commander, версия 4.8.0-pre2-26-g76c9eed
Скомпилирован с библиотекой GLib версии 2.28.1
С библиотекой S-Lang и с базой данных terminfo
Со встроенным редактором
C поддержкой внутренней командной оболочки
С поддержкой фоновых операций
С поддержкой мыши в xterm
С поддержкой событий X11
С поддержкой интернационализации
С поддержкой многих кодировок
Виртуальная файловая система: cpiofs, tarfs, sfs, extfs, ftpfs, fish
Тип данных: char: 8; int: 32; long: 32; void *: 32; size_t: 32; off_t: 64;

Sky777 ()
Ответ на: комментарий от Sky777

впрочем, есть новые замечания - появились тормоза, которых ранее не было

Тормоза появились во время навигации по папкам на удаленном сервере. МС подвисает на несколько минут, после чего просыпается

в статусной строке вижу -


sftps Listing ... ttya0



также есть тормоза при выходе в родительскую подпапку - при этом вижу старое сообщение кеш каталога ХХХ устарел - МС висит пару минут, потом возвращается



Sky777 ()
Ответ на: комментарий от Sky777

тормоза связаны с отсутствием кэширования посещенных каталогов... тут еще пока не реализовано...

ну и я кое чего переделал... так что просьба обновиться с гита и еще потестировать...

angel_il ★★★★ ()
Ответ на: комментарий от angel_il

скажите, какой командой надо правильно обновляться ?


у меня вот так получается - с кучей конфликтов

кроме того, тормозов не было на сборке, о которой я рапортовал в 1 раз

usr/src/mc$ sudo git pull -u
Password:
remote: Counting objects: 892, done.
remote: Compressing objects: 100% (185/185), done.
remote: Total 607 (delta 528), reused 469 (delta 422)
Receiving objects: 100% (607/607), 140.49 KiB, done.
Resolving deltas: 100% (528/528), completed with 129 local objects.
From git://midnight-commander.org/git/mc
+ 76c9eed...274a136 1535_sftp -> origin/1535_sftp (forced update)
+ 725a8a3...e86f3eb 2261_multiedit_2 -> origin/2261_multiedit_2 (forced update)
+ b7a9e9e...eab58b8 2338_free_space_calculation -> origin/2338_free_space_calculation (forced update)
5c85f6b..cd91bfc 2608_widget_enhancement -> origin/2608_widget_enhancement
c6af67e..a993dd3 2610_posix_fallocate -> origin/2610_posix_fallocate
8a4a705..90e62fc 4.7.5-stable -> origin/4.7.5-stable
182ce84..f9ec788 DEV_master_cleanup -> origin/DEV_master_cleanup
+ 9c0e11d...fc1a241 DEV_new_vfs -> origin/DEV_new_vfs (forced update)
4a48f5c..1e9a3f5 master -> origin/master
Auto-merging src/filemanager/midnight.c
CONFLICT (content): Merge conflict in src/filemanager/midnight.c
Auto-merging src/filemanager/panel.c
CONFLICT (content): Merge conflict in src/filemanager/panel.c
Auto-merging src/vfs/sftpfs/sftpfs.c
CONFLICT (add/add): Merge conflict in src/vfs/sftpfs/sftpfs.c
Auto-merging src/vfs/sftpfs/sftpfs.h
CONFLICT (add/add): Merge conflict in src/vfs/sftpfs/sftpfs.h
Automatic merge failed; fix conflicts and then commit the result.

Sky777 ()

Извиняюсь за частичный офтопик, но темы о Midnight Commander так редко появляются...

Если в системе установлены две версии S-Lang (1.x и 2.x), можно ли при запуске configure как-то ткнуть его, чтобы он использовал именно 2-ю?

hobbit ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.