LINUX.ORG.RU

FUSE, FTP, cURL & CP1251


0

0

Итак, возникла проблема. Каким образом все это - FUSE, FTP & cp1251 - собрать вместе и заставить работать не только на download, но и на upload/mkdir.

Собственно использую curlftpfs. Запуск таков:

$curlftpfs 10.20.0.7 /mnt/10.20.0.7 -o allow_other,modules=iconv,from_code=CP1251,to_code=UTF8 -s

Кстати, обратите внимание на использование модуля iconv! В принципе можно и codepage, но так есть более тру, к тому ж будет работать на любом fuse-модуле, даже на тех, где разработчики клали болт на не англоговорящих. Также обратите внимание на -s - иначе будут зависать.

Так вот - все это работает вроде ничего так. Самое то смотреть фильцы прям с обменника (многие захотят заметить, что начиная со вчерашнего дня все это стало не актуальным, но все ж). Кому большего не надо - принимайте этот рецепт.

А теперь о проблеме. Как только начинаешь использовать это дело на загрузку - сразу падает!

100% падение - создать на ftp папку (mkdir). Причем пишет просто - Segmentation fault (core dumped). Я сначало грешил на cp1251 (как никак от самого БГ это ж), но минуту назад оказалось, что это не причем. Не пашет и mkdir tmp.

Таки нашел подобный баг: https://bugzilla.novell.com/show_bug.cgi?id=336840. Яко бы они его исправили. Но у меня версия libcurl... О! 7.16.4-2ubuntu1. Протупил. Смотрел исходники ж 7.17 - вижу баг правленный. А Synaptic молчал об обновлении, ибо 7.17 - уже hardy. Эх, полгода назад зарикался - не уходить на новую Ubuntu, пока не зарелезятся. А теперь опять по новой - здрасти Hardy!

Поставил новую версию libcurl, коя за собой утянула пакетов 10 из hardy. ВСЕ! РАБОТАЕТ! Но теперь падает при смене атрибутов. Но закачивать варез на обменник можно!

Кто заинтересован, и есть опыт постить баги в багзилу, знает что такое backtrace - просьба помочь с атрибутами. Я hz как оно делается.

Да и ещё - нет ли чего ещё для FUSE, но без cURL. Теперь поддержка codepage совершенно не важна с модулем iconv.

P.S. Ужас! Половина четвертого ночи. Что ж с Новым Годом. До завтра.

> утянула пакетов 10 из hardy

Надо было из сырцов собирать

http://packages.ubuntu.com/hardy/source/curl

Тогда бы оно слинковалось с тем что есть и не надо было обновлять другие либы из нестабильной ветки.

INFOMAN ★★★★★
()

>Но теперь падает при смене атрибутов.

какая именно команда вызывает падение?

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

>какая именно команда вызывает падение?

CtrlAltBs@localhost:~$ cd /mnt/10.20.0.7/incoming/
CtrlAltBs@localhost:/mnt/10.20.0.7/incoming$ ls -Z
drwxrwxrwx  root root                                  book
-rw-r--r--  root root                                  free.!
drwxrwxrwx  root root                                  iso
drwxrwxrwx  root root                                  Mobila
drwxr-xr-x  root root                                  Soft
drwxrwxrwx  root root                                  uNsOrT
CtrlAltBs@localhost:/mnt/10.20.0.7/incoming$ cd uNsOrT/
CtrlAltBs@localhost:/mnt/10.20.0.7/incoming/uNsOrT$ ls -Z |grep tmp
drwxrwxrwx  root root                                  tmp
CtrlAltBs@localhost:/mnt/10.20.0.7/incoming/uNsOrT$ cd tmp
CtrlAltBs@localhost:/mnt/10.20.0.7/incoming/uNsOrT/tmp$ ls -Z
-rw-rw-rw-  root root                                  cedega-small_6.0.2_all.deb
CtrlAltBs@localhost:/mnt/10.20.0.7/incoming/uNsOrT/tmp$ chmod 777 cedega-small_6.0.2_all.deb
chmod: изменение прав доступа для `cedega-small_6.0.2_all.deb': Software caused connection abort
CtrlAltBs@localhost:/mnt/10.20.0.7/incoming/uNsOrT/tmp$


В отдельной вкладке с ключом отладки (только конец ввывода):
CtrlAltBs@localhost:~$curlftpfs 10.20.0.7 /mnt/10.20.0.7 -o allow_other,modules=iconv,from_code=CP1251,to_code=UTF8 -s -d
...
LOOKUP /incoming/uNsOrT/tmp
   NODEID: 77
   unique: 1012, error: 0 (Success), outsize: 136
unique: 1013, opcode: OPENDIR (27), nodeid: 77, insize: 48
   unique: 1013, error: 0 (Success), outsize: 32
unique: 1014, opcode: GETATTR (3), nodeid: 77, insize: 40
   unique: 1014, error: 0 (Success), outsize: 112
unique: 1015, opcode: READDIR (28), nodeid: 77, insize: 64
   unique: 1015, error: 0 (Success), outsize: 136
unique: 1016, opcode: LOOKUP (1), nodeid: 77, insize: 67
LOOKUP /incoming/uNsOrT/tmp/cedega-small_6.0.2_all.deb
   NODEID: 78
   unique: 1016, error: 0 (Success), outsize: 136
unique: 1017, opcode: READDIR (28), nodeid: 77, insize: 64
   unique: 1017, error: 0 (Success), outsize: 16
unique: 1018, opcode: RELEASEDIR (29), nodeid: 77, insize: 64
   unique: 1018, error: 0 (Success), outsize: 16
unique: 1019, opcode: LOOKUP (1), nodeid: 77, insize: 45
LOOKUP /incoming/uNsOrT/tmp/chmo
   unique: 1019, error: -2 (No such file or directory), outsize: 16
unique: 1020, opcode: LOOKUP (1), nodeid: 77, insize: 46
LOOKUP /incoming/uNsOrT/tmp/chmod
   unique: 1020, error: -2 (No such file or directory), outsize: 16
unique: 1021, opcode: LOOKUP (1), nodeid: 77, insize: 46
LOOKUP /incoming/uNsOrT/tmp/chmod
   unique: 1021, error: -2 (No such file or directory), outsize: 16
unique: 1022, opcode: OPENDIR (27), nodeid: 77, insize: 48
   unique: 1022, error: 0 (Success), outsize: 32
unique: 1023, opcode: GETATTR (3), nodeid: 77, insize: 40
   unique: 1023, error: 0 (Success), outsize: 112
unique: 1024, opcode: READDIR (28), nodeid: 77, insize: 64
   unique: 1024, error: 0 (Success), outsize: 136
unique: 1025, opcode: READDIR (28), nodeid: 77, insize: 64
   unique: 1025, error: 0 (Success), outsize: 16
unique: 1026, opcode: RELEASEDIR (29), nodeid: 77, insize: 64
   unique: 1026, error: 0 (Success), outsize: 16
unique: 1027, opcode: LOOKUP (1), nodeid: 77, insize: 67
LOOKUP /incoming/uNsOrT/tmp/cedega-small_6.0.2_all.deb
   NODEID: 78
   unique: 1027, error: 0 (Success), outsize: 136
unique: 1028, opcode: GETATTR (3), nodeid: 77, insize: 40
   unique: 1028, error: 0 (Success), outsize: 112
unique: 1029, opcode: LOOKUP (1), nodeid: 77, insize: 67
LOOKUP /incoming/uNsOrT/tmp/cedega-small_6.0.2_all.deb
   NODEID: 78
   unique: 1029, error: 0 (Success), outsize: 136
unique: 1030, opcode: OPENDIR (27), nodeid: 77, insize: 48
   unique: 1030, error: 0 (Success), outsize: 32
unique: 1031, opcode: SETATTR (4), nodeid: 78, insize: 128
Segmentation fault (core dumped)
CtrlAltBs@localhost:~$


А зачем спрашивали? У Вас НЕ падает?

CtrlAltBs
() автор топика

Так, похоже дело именно в module=iconv ;)

Ибо с codepage - не падает (с последней libcurl). Странно это, однако. Ибо проверял на файле с английским названием.

Так что - пользуйте по старинке: -o codepage=cp1251 -s

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

> Так, похоже дело именно в module=iconv

Отсюда ход мыслей следующий:

1. Где это модуль? В самом fuse.
2. Посмотрел разницу между 2.7.0 и 2.7.1. В lib/moduels/iconv.c - за исключением лицензии никакой.
3. Поставил последнюю версию, опять из hardy. chmod работает и с iconv.

Hz почему, но пользуйтесь.

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

Было:
int fuse_fs_chmod(struct fuse_fs *fs, const char *path, mode_t mode)
{
    if (fs->op.chmod)
        return fs->op.chmod(path, mode);
    else
        return -ENOSYS;
}

Стало:
int fuse_fs_chmod(struct fuse_fs *fs, const char *path, mode_t mode)
{
    fuse_get_context()->private_data = fs->user_data;
    if (fs->op.chmod)
        return fs->op.chmod(path, mode);
    else
        return -ENOSYS;
}


Вопрос разрешен, всем спасибо.

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