davfs2 и загрузка файлов в OpenWrt

В опубликованной на днях статье про резервное копирование в WebDav мы касались того, что davfs2 из репозитория OpenWrt не всегда способен успешно загружать файлы в удаленное хранилище, и зачастую они заканчивают свой путь в каталоге lost+found. При этом чтение файлов из WebDav, получение их атрибутов, а также и удаление – всегда работает корректно.

Как оказалось, эта проблема имеет простое решение.

Логирование в davfs2, размещенном на роутере под управлением OpenWrt, организовано не самым удобным образом. Лог всегда пишется в системный кольцевой буфер, прочитать который можно при помощи команды logread, и объем оного весьма незначителен. А отладочные сообщения davfs2 в зависимости от выбранного уровня отладки либо слишком подробны и многочисленны, либо слишком кратки и по ним ничего невозможно понять.

Так или иначе, при работе стандартного пакета davfs2 с выставленным в davfs2.conf параметре debug most в системном логе можно наблюдать следующие строки при попытке загрузки файла в удаленное хранилище:

Mon Dec 22 19:15:36 2014 mark.debug syslog: Running pre_send hooks
Mon Dec 22 19:15:36 2014 mark.debug syslog: Sending request headers:
Mon Dec 22 19:15:36 2014 mark.debug syslog: PUT /testfile HTTP/1.1
User-Agent: davfs2/1.5.2 neon/0.30.0
Connection: TE
TE: trailers
Host: webdav.yandex.ru
Transfer-Encoding: chunked
Authorization: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

Mon Dec 22 19:15:36 2014 mark.debug syslog: Sending request-line and headers:
Mon Dec 22 19:15:36 2014 mark.debug syslog: Sending request body:
Mon Dec 22 19:15:36 2014 mark.debug syslog: Request body provider failed with 
Mon Dec 22 19:15:36 2014 mark.debug syslog: -
Mon Dec 22 19:15:36 2014 mark.debug syslog: 1
Mon Dec 22 19:15:36 2014 mark.debug syslog: 
Mon Dec 22 19:15:36 2014 mark.debug syslog: sess: Closing connection.
Mon Dec 22 19:15:36 2014 mark.debug syslog: sess: Connection closed.
Mon Dec 22 19:15:36 2014 mark.debug syslog: Request ends, status 
Mon Dec 22 19:15:36 2014 mark.debug syslog: 0
Mon Dec 22 19:15:36 2014 mark.debug syslog:  class 
Mon Dec 22 19:15:36 2014 mark.debug syslog: 0
Mon Dec 22 19:15:36 2014 mark.debug syslog: xx, error line:
Mon Dec 22 19:15:36 2014 mark.debug syslog: Failed reading request body file: Bad address
Mon Dec 22 19:15:36 2014 mark.debug syslog: 
Mon Dec 22 19:15:36 2014 mark.debug syslog: Running destroy hooks.
Mon Dec 22 19:15:36 2014 mark.debug syslog: Request ends.
Mon Dec 22 19:15:36 2014 mark.debug syslog: tidy: neon error
Mon Dec 22 19:15:36 2014 mark.debug syslog:       Failed reading request body file: Bad address

Как видим, выводится не самая информативная ошибка Bad address, происходящая из используемой в davfs2 для коммуникации библиотеки neon – текста Failed reading request body file в исходных кодах davfs2 найти не получится.

После некоторой изыскательной деятельности удалось обнаружить, что причина кроется в том простом факте, что библиотека neon и пакет davfs2 по умолчанию компилируются с разными параметрами. Так, в Makefile пакета neon указаны следующие флаги:

TARGET_CPPFLAGS += -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE

А в Makefile пакета davfs2 такая строка отсутствует. И именно это отличие приводит к фатальной нестыковке, когда дело доходит до загрузки файлов в удаленное хранилище. Простым добавлением означенных флагов в Makefile проблема полностью решается и davfs2 начинает всегда корректно загружать файлы в WebDav.

PS: Кстати, интересно отметить, что данная проблема не была зафиксирована в устаревшей версии davfs2, размещенной в нашем архиве – в нашем случае Makefile содержал все необходимые флаги для корректной сборки. Вопрос, отчего требуемые флаги потерялись в Makefile из официального репозитория OpenWrt, оставим на совести его мейнтейнеров. Да, кстати, версия davfs2 в нашем хранилище теперь обновлена до актуальной 1.5.2. А также приложен дополнительный патч, корректирующий вывод отладочного текста в системный лог.

This entry was posted in Сеть и интернет and tagged , . Bookmark the permalink.

3 Responses to davfs2 и загрузка файлов в OpenWrt

  1. Sergey says:

    Спасибо за пакеты =)

  2. Sergey says:

    Привет на релизе Chaos Calmer 15.05 davfs2 не собирается с поддержкой языков =(

  3. Ввиду того, что утилита «davfs2» из одноименного пакета не входит в базовую комплектацию ОС «Ubuntu», следует провести предварительную установку данного пакета. Если необходимо добавить другого пользователя ОС, то «$USER» следует заменить на имя пользователя в ОС, которому будет дозволено монтировать облачные диски посредством «davfs2».

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>