<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Erinome Lane &#187; webdav</title>
	<atom:link href="https://tt.erinome.net/tag/webdav/feed" rel="self" type="application/rss+xml" />
	<link>https://tt.erinome.net</link>
	<description>a bit of this, a bit of that...</description>
	<lastBuildDate>Mon, 23 Mar 2026 12:51:51 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>https://wordpress.org/?v=4.2.38</generator>
	<item>
		<title>Автоматизация загрузки файлов на WebDav</title>
		<link>https://tt.erinome.net/2014/04/668</link>
		<comments>https://tt.erinome.net/2014/04/668#comments</comments>
		<pubDate>Wed, 23 Apr 2014 11:59:37 +0000</pubDate>
		<dc:creator><![CDATA[root]]></dc:creator>
				<category><![CDATA[Сеть и интернет]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[network]]></category>
		<category><![CDATA[openwrt]]></category>
		<category><![CDATA[webdav]]></category>

		<guid isPermaLink="false">http://tt.erinome.net/?p=668</guid>
		<description><![CDATA[Ранее на страницах этого сайта рассматривалась возможность монтирования облачных WebDav-хранилищ при помощи fuse-системы davfs2. Одним из ее недостатков был тот факт, что при любых операциях над файлами они неминуемо копировались сначала во временную директорию, а лишь затем перемещались в целевой &#8230; <a href="https://tt.erinome.net/2014/04/668">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>Ранее на страницах этого сайта рассматривалась возможность монтирования облачных WebDav-хранилищ при помощи fuse-системы <a href="http://tt.erinome.net/2012/11/360">davfs2</a>. Одним из ее недостатков был тот факт, что при любых операциях над файлами они неминуемо копировались сначала во временную директорию, а лишь затем перемещались в целевой каталог.</p>
<p>Альтернативой davfs2 для прямого получения или загрузки файлов в облачное хранилище является утилита <a href="http://tt.erinome.net/2012/11/375">cadaver</a>. Однако, она предполагает интерактивное взаимодействие с пользователем, и использование ее в автоматизированных скриптах не представляется возможным. Обойти эту проблему можно при помощи утилиты <a href="http://tt.erinome.net/2014/04/660">empty</a>, аналога <em>expect</em> для создания и взаимодействия с псевдотерминалами.<span id="more-668"></span></p>
<p>Для реализации полностью автоматической загрузки и скачивания файлов с облачного хранилища был создан скрипт <a href="http://fs.erinome.net/openwrt/scripts/webdav.sh" target="_blank">webdav.sh</a>.</p>
<p>Перед использованием необходимо настроить несколько параметров, определенных в начале скрипта:<br />
<small>
<ul>
<li><em>ififo=/tmp/empty.in.fifo</em><br />
&#8211; путь к fifo ввода, на роутерах желательно размещать в /tmp</li>
<li><em>ofifo=/tmp/empty.out.fifo</em><br />
&#8211; путь к fifo вывода, на роутерах желательно размещать в /tmp</li>
<li><em>cmd=&#8221;cadaver https://webdav.yandex.ru&#8221;</em><br />
&#8211; путь к утилите cadaver и адрес WebDav-сервиса</li>
<li><em>username=YourUserName</em><br />
&#8211; логин от WebDav-сервиса</li>
<li><em>password=YourPassword</em><br />
&#8211; пароль от WebDav-сервиса</li>
</ul>
<p></small></p>
<p>Доступные команды:<br />
<small>
<ul>
<li><strong>webdav.sh put <локальный файл> [удаленный путь]</strong> &#8211; загрузка файла в облако<br />
&#8211; <em>Локальный файл</em> &#8211; обязательный параметр, должен быть указан один, файл должен быть доступен для чтения;<br />
&#8211; <em>Удаленный путь</em> &#8211; опционально, если его не указать, то файл будет загружен в корневой каталог WebDav.</li>
<li><strong>webdav.sh get <удаленный файл> [локальный путь]</strong> &#8211; выгрузка файла из облака<br />
&#8211; <em>Удаленный файл</em> &#8211; обязательный параметр, должен быть указан один, файл должен существовать;<br />
&#8211; <em>Локальный путь</em> &#8211; опционально, если его не указать, то файл будет загружены в текущий каталог.</li>
<li><strong>webdav.sh mput <локальные файлы> [удаленный путь]</strong> &#8211; множественная загрузка<br />
&#8211; <em>Локальные файлы</em> &#8211; маска вида &#8220;/path/to/*.files&#8221;, указание кавычек <em>обязательно</em>;<br />
&#8211; <em>Удаленный путь</em> &#8211; опционально, если его не указать, то файлы будут загружены в корневой каталог WebDav.</li>
<li><strong>webdav.sh mget <удаленные файлы> [локальный путь]</strong> &#8211; множественная выгрузка<br />
&#8211; <em>Удаленные файлы</em> &#8211; маска вида &#8220;/remote/path/*&#8221;;<br />
&#8211; <em>Локальный путь</em> &#8211; опционально, если его не указать, то файлы будут загружены в текущий каталог.</li>
</ul>
<p></small></p>
<p>Например, для загрузки файла &#8220;/etc/config/firewall&#8221; в удаленный каталог &#8220;/openwrt&#8221; необходимо набрать команду <em>webdav.sh put /etc/config/firewall /openwrt/firewall</em>. Отметим, что удаленный каталог &#8220;openwrt&#8221; перед выполнением этой команды должен существовать.</p>
<p>PS: Стоит обратить внимание, что утилита <em>empty</em> имеет такую особенность, что если указанные в конфигурации fifo-файлы уже существуют на момент ее запуска, то она просто не запустится, тихо ругнувшись в syslog. А в случае каких-либо сбоев в ходе работы с empty эти fifo-файлы могут автоматически не удалиться.</p>
]]></content:encoded>
			<wfw:commentRss>https://tt.erinome.net/2014/04/668/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>cadaver &#8211; консольный клиент WebDav</title>
		<link>https://tt.erinome.net/2012/11/375</link>
		<comments>https://tt.erinome.net/2012/11/375#comments</comments>
		<pubDate>Thu, 22 Nov 2012 20:43:37 +0000</pubDate>
		<dc:creator><![CDATA[root]]></dc:creator>
				<category><![CDATA[Сеть и интернет]]></category>
		<category><![CDATA[network]]></category>
		<category><![CDATA[openwrt]]></category>
		<category><![CDATA[webdav]]></category>

		<guid isPermaLink="false">http://tt.erinome.net/?p=375</guid>
		<description><![CDATA[Ранее рассматривалась возможность установки файловой системы davfs2 для монтирования облачных сетевых дисков по протоколу WebDav на роутерах с OpenWrt. Также была выявлена проблема с переносом в облако крупных файлов, которое в случае davfs2 происходит с обязательным дублированием всех файлов в &#8230; <a href="https://tt.erinome.net/2012/11/375">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>Ранее рассматривалась возможность установки <a href="http://tt.erinome.net/2012/11/360" title="davfs2 for OpenWrt">файловой системы davfs2</a> для монтирования облачных сетевых дисков по протоколу <strong>WebDav</strong> на роутерах с <strong>OpenWrt</strong>. Также была выявлена проблема с переносом в облако крупных файлов, которое в случае <strong>davfs2</strong> происходит с обязательным дублированием всех файлов в кэше.</p>
<p>Частичным решением этого вопроса может стать использование отдельного WebDav-клиента. Изучение поисковиков говорит нам о том, что такой клиент в природе существует &#8211; и практически в единственном экземпляре. Это <strong>cadaver</strong>. И, как водится, под OpenWrt его никто не портировал &#8211; так что снова пытаемся решить вопрос портирования самостоятельно.<span id="more-375"></span></p>
<p>В ходе непродолжительных изысканий был составлен пакет <strong>cadaver</strong>, совместимый со стандартным OpenWrt Buildroot. Хранится он, как обычно, в нашем хранилище &#8211; <a href="http://fs.erinome.net/wrt-packages/cadaver" title="cadaver package" target="_blank">fs.erinome.net</a>.</p>
<p>К сожалению, данный пакет тащит за собой довольно большой хвост из зависимостей &#8211; это библиотеки <strong>libncurses</strong>, <strong>libreadline</strong>, а также знакомые по davfs2 <strong>libneon</strong>, <strong>libexpat</strong> и <strong>libopenssl</strong>. В откомпилированном виде для платформы ar71xx он занимает 81.5K свободного пространства без учета библиотек.</p>
<p>Применение клиента не представляет сложностей, все основные команды изложены в соответствующем ему мануале &#8211; например, на <a href="http://linux.die.net/man/1/cadaver" title="man cadaver" target="_blank">linux.die.net</a>.</p>
<p>Пример загрузки файла на сервис Яндекс.Диск:</p>
<pre class="console"># cadaver https://webdav.yandex.ru
WARNING: Untrusted server certificate presented for `webdav.yandex.ru':
Issued to: ITO, Yandex, Moscow, Russia, RU
Issued by: ld, yandex, ru
Certificate is valid from Tue, 25 Sep 2012 11:43:32 GMT to Fri, 17 Jan 2014 15:15:46 GMT
Do you wish to accept the certificate? (y/n) y
Authentication required for Yandex.Disk on server `webdav.yandex.ru':
Username: login
Password:
dav:/> put /srv/shared/WTFEntryOutComLp.wav /Music/WTFEntryOutComLp.wav
Uploading /srv/shared/WTFEntryOutComLp.wav to `/Music/WTFEntryOutComLp.wav':
Progress: [=============================>] 100.0% of 16581672 bytes succeeded.
dav:/> exit
Connection to `webdav.yandex.ru' closed.
#</pre>
<p>К сожалению, при помощи данной утилиты все же не представляется возможным передать динамически генерируемые файлы с STDIN. Зато крупные файлы можно загружать на удаленный хостинг без дублирования их в кэше.</p>
]]></content:encoded>
			<wfw:commentRss>https://tt.erinome.net/2012/11/375/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Монтирование облачного диска по WebDav</title>
		<link>https://tt.erinome.net/2012/11/360</link>
		<comments>https://tt.erinome.net/2012/11/360#comments</comments>
		<pubDate>Thu, 22 Nov 2012 17:08:44 +0000</pubDate>
		<dc:creator><![CDATA[root]]></dc:creator>
				<category><![CDATA[Сеть и интернет]]></category>
		<category><![CDATA[network]]></category>
		<category><![CDATA[openwrt]]></category>
		<category><![CDATA[webdav]]></category>

		<guid isPermaLink="false">http://tt.erinome.net/?p=360</guid>
		<description><![CDATA[Авторы репозитория EntWare для роутеров на платформе Broadcom достигли определенного успеха в портировании файловой системы davfs2, при помощи которой становится возможным монтирование на роутер облачных хранилищ данных по протоколу WebDav. Данный протокол используется в таких сервисах как DropBox, Яндекс.Диск, Google &#8230; <a href="https://tt.erinome.net/2012/11/360">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>Авторы репозитория <a href="http://code.google.com/p/wl500g-repo/" title="EntWare" target="_blank">EntWare</a> для роутеров на платформе Broadcom достигли определенного успеха в портировании файловой системы <strong>davfs2</strong>, при помощи которой становится возможным монтирование на роутер облачных хранилищ данных по протоколу <strong>WebDav</strong>. Данный протокол используется в таких сервисах как <strong>DropBox</strong>, <strong>Яндекс.Диск</strong>, <strong>Google Drive</strong>. Получить в свое распоряжение несколько лишних гигабайт свободного дискового пространства на роутере, встроенная память которого ограничена считанными мегабайтами &#8211; задача интересная.</p>
<p>А используя данные наработки, нетрудно пересобрать <strong>davfs2</strong> также и для запуска на роутерах со стандартной прошивкой OpenWrt.<span id="more-360"></span></p>
<h3>Изменения</h3>
<p>Для того, чтобы собрать в <strong>OpenWrt Buildroot</strong> представленный в репозитории EntWare пакет <a href="http://code.google.com/p/wl500g-repo/source/browse/#svn%2Ffeeds%2Frtndev%2Fdavfs2" title="EntWare's davfs2" target="_blank">davfs2</a>, требуется внести в его файлы несколько незначительных изменений. В частности это касается используемых путей в основном Makefile, а также требуется добавление нового патча, исключающего зависимость от sys/xattr.h, который отсутствует в OpenWrt.</p>
<p>Скачать модифицированный пакет davfs2 для сборки в OpenWrt можно в нашем хранилище <a href="http://fs.erinome.net/wrt-packages/davfs2" title="davfs2 package" target="_blank">fs.erinome.net</a>.</p>
<h3>Сборка</h3>
<p>Для сборки необходимо распаковать скачанный пакет в каталог ./trunk/package/davfs2 в стандартном Buildroot&#8217;е OpenWrt, после чего выполнить <strong>make menuconfig</strong> и выбрать пакет <strong>davfs2</strong>, расположенный в разделе <strong>Network</strong> -> <strong>Filesystems</strong>. Стоит обратить внимание, что выбор данного пакета автоматически отметит также пакеты libneon, libfuse, libopenssl для решения зависимостей.</p>
<p>Сборка производится в обычном автоматическом режиме.</p>
<h3>Настройка</h3>
<p>Для настройки пакета <strong>davfs2</strong> используются следующие конфигурационные файлы:
<pre class="console">/etc/davfs2/davfs2.conf
/etc/davfs2/secrets</pre>
Первый содержит основные настройки <strong>davfs2</strong>, во втором содержится аутентификационная информация для возможности автоматически смонтировать сетевое хранилище.</p>
<p>Перед монтированием хранилища необходимо изменить следующие настройки в <strong>davfs2.conf</strong>:
<pre class="console">dav_user        nobody            # system wide config file only
dav_group       nogroup            # system wide config file only</pre>
Данные настройки определяют имя пользователя и группу, от имени которых будет работать davfs2.
<pre class="console">cache_dir       /srv/davfs2/cache # system wide cache</pre>
Данная настройка задает абсолютный путь к каталогу кэша, который будет использоваться при работе davfs2. Использование кэша является обязательным, его нельзя отключить. <strong>Важно! Путь должен указывать либо на каталог на подключенном к роутеру USB-носителе, либо на каталог в разделе /tmp</strong>. Это связано с особенностью логики работы davfs2. Указанный путь должен существовать.</p>
<p>Строки в файле /etc/davfs2/secrets имеют два возможных варианта структуры:
<pre class="console">/path/to/mount/point your_login your_password
# либо
https://webdav.server.com/ your_login your_password</pre>
Если при монтировании файловой системы вы укажете точку монтирования или адрес сервера, совпадающий с имеющимся в <strong>/etc/davfs2/secrets</strong>, то автоматически будут использоваться указанные там имя пользователя и пароль.</p>
<h3>Монтирование</h3>
<p>Для монтирования облачного хранилища используется утилита <strong>mount.davfs</strong>:
<pre class="console"># mount.davfs https://webdav.server.com /path/to/mount/point</pre>
Например, монтирование сетевого диска Яндекса может выглядеть так:
<pre class="console"># mount.davfs https://webdav.yandex.ru /mnt
Please enter the username to authenticate with server
https://webdav.yandex.ru or hit enter for none.
  Username: login
Please enter the password to authenticate user login with server
https://webdav.yandex.ru or hit enter for none.
  Password:
mount.davfs: the server certificate is not trusted
  issuer:      ld, yandex, ru
  subject:     ITO, Yandex, Moscow, Russia, RU
  identity:    webdav.yandex.ru
  fingerprint: 32:75:bd:91:e3:70:28:41:6d:e1:37:a1:0b:6b:26:77:93:7b:11:da
You only should accept this certificate, if you can
verify the fingerprint! The server might be faked
or there might be a man-in-the-middle-attack.
Accept certificate for this session? [y,N] y
# </pre>
К сожалению, по умолчанию сертификаты не принимаются и требуют ручной установки. При желании вы можете самостоятельно разобраться, как научить <strong>davfs2</strong> без ругани принимать предлагаемый сертификат. :)</p>
<p>После выполнения данной команды в точке <strong>/mnt</strong> будет примонтировано облачное хранилище <strong>Яндекс.Диск</strong>. Проверить это и посмотреть доступный объем свободного пространства можно командой <strong>df -h</strong>:
<pre class="console">Filesystem                Size      Used Available Use% Mounted on
rootfs                    2.4M      1.0M      1.4M  42% /
/dev/root                 4.3M      4.3M         0 100% /rom
tmpfs                    30.2M    812.0K     29.4M   3% /tmp
tmpfs                   512.0K         0    512.0K   0% /dev
/dev/mtdblock4            2.4M      1.0M      1.4M  42% /overlay
overlayfs:/overlay        2.4M      1.0M      1.4M  42% /
/dev/sda1               133.1M     19.9M    106.5M  16% /optware
/dev/sda2                 7.3G      4.2G      2.7G  61% /srv
https://webdav.yandex.ru
                        260.0G     55.5M    259.9G   0% /mnt</pre>
Определение квоты доступного дискового пространства выполняется экспериментальным запросом USERINFO и, в случае сетевого диска Яндекса, работает корректно. (Да, здесь именно 260 ГБ.)</p>
<p>Для автоматизации процесса монтирования без ручного ввода логина и пароля необходимо заполнить файл /etc/davfs2/secrets, а для борьбы с ручным подтверждением сертификата можно использовать стандартную утилиту <strong>yes</strong>. Тогда монтирование диска может выглядеть следующим образом:
<pre class="console"># yes | mount.davfs https://webdav.yandex.ru /mnt</pre></p>
<h3>Особенности работы с кэшем</h3>
<p>При взгляде со стороны смонтированная облачная файловая система ничем не отличается от локальных разделов. Но на самом деле все операции с файлами проводятся над кэшем.</p>
<p>Например, при запросе на редактирование файла из облачного хранилища, сначала он скачивается в <strong>cache_dir</strong>, а лишь затем происходит его открытие из данного каталога. При завершении редактирования, файл сначала сохраняется в кэше и лишь затем оказывается загружен обратно в облачное хранилище. Другой пример: при копировании с подключенного к роутеру USB-диска файла в облачное хранилище, данный файл сначала копируется в каталог кэша (который часто находится на том же USB-диске!), и лишь затем загружается на удаленный сервер.</p>
<p>К сожалению, с этим ничего нельзя поделать &#8211; такова логика работы davfs2.</p>
<p>Если планируется передавать лишь небольшие файлы, то для кэша разумно использовать раздел <strong>/tmp</strong>, который представляет собой RAM-диск. В этом случае есть смысл ограничить размер кэша переменной <strong>cache_size</strong> в <strong>davfs2.conf</strong>, но следует иметь в виду, что данная переменная определяет лишь суммарный объем кэша, а при попытке записи или чтения одного крупного файла она будет игнорироваться.</p>
<p>В случае передачи крупных файлов остается либо размещать кэш на смонтированном на роутере USB-носителе и мириться с его постоянной перезаписью, либо для работы именно с большими файлами можно использовать отдельные WebDav-клиенты типа <strong>cadaver</strong>.</p>]]></content:encoded>
			<wfw:commentRss>https://tt.erinome.net/2012/11/360/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>
