Menu
Categories
davfs2 и загрузка файлов в OpenWrt
December 23, 2014 Сеть и интернет

В опубликованной на днях статье про резервное копирование в 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. А также приложен дополнительный патч, корректирующий вывод отладочного текста в системный лог.

"2" Comments
  1. Спасибо за пакеты =)

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

Leave a Reply to Sergey

Click here to cancel reply.




*