Авторы репозитория EntWare для роутеров на платформе Broadcom достигли определенного успеха в портировании файловой системы davfs2, при помощи которой становится возможным монтирование на роутер облачных хранилищ данных по протоколу WebDav. Данный протокол используется в таких сервисах как DropBox, Яндекс.Диск, Google Drive. Получить в свое распоряжение несколько лишних гигабайт свободного дискового пространства на роутере, встроенная память которого ограничена считанными мегабайтами – задача интересная.
А используя данные наработки, нетрудно пересобрать davfs2 также и для запуска на роутерах со стандартной прошивкой OpenWrt.
Изменения
Для того, чтобы собрать в OpenWrt Buildroot представленный в репозитории EntWare пакет davfs2, требуется внести в его файлы несколько незначительных изменений. В частности это касается используемых путей в основном Makefile, а также требуется добавление нового патча, исключающего зависимость от sys/xattr.h, который отсутствует в OpenWrt.
Скачать модифицированный пакет davfs2 для сборки в OpenWrt можно в нашем хранилище fs.erinome.net.
Сборка
Для сборки необходимо распаковать скачанный пакет в каталог ./trunk/package/davfs2 в стандартном Buildroot’е OpenWrt, после чего выполнить make menuconfig и выбрать пакет davfs2, расположенный в разделе Network -> Filesystems. Стоит обратить внимание, что выбор данного пакета автоматически отметит также пакеты libneon, libfuse, libopenssl для решения зависимостей.
Сборка производится в обычном автоматическом режиме.
Настройка
Для настройки пакета davfs2 используются следующие конфигурационные файлы:
/etc/davfs2/davfs2.conf /etc/davfs2/secretsПервый содержит основные настройки davfs2, во втором содержится аутентификационная информация для возможности автоматически смонтировать сетевое хранилище.
Перед монтированием хранилища необходимо изменить следующие настройки в davfs2.conf:
dav_user nobody # system wide config file only dav_group nogroup # system wide config file onlyДанные настройки определяют имя пользователя и группу, от имени которых будет работать davfs2.
cache_dir /srv/davfs2/cache # system wide cacheДанная настройка задает абсолютный путь к каталогу кэша, который будет использоваться при работе davfs2. Использование кэша является обязательным, его нельзя отключить. Важно! Путь должен указывать либо на каталог на подключенном к роутеру USB-носителе, либо на каталог в разделе /tmp. Это связано с особенностью логики работы davfs2. Указанный путь должен существовать.
Строки в файле /etc/davfs2/secrets имеют два возможных варианта структуры:
/path/to/mount/point your_login your_password # либо https://webdav.server.com/ your_login your_passwordЕсли при монтировании файловой системы вы укажете точку монтирования или адрес сервера, совпадающий с имеющимся в /etc/davfs2/secrets, то автоматически будут использоваться указанные там имя пользователя и пароль.
Монтирование
Для монтирования облачного хранилища используется утилита mount.davfs:
# mount.davfs https://webdav.server.com /path/to/mount/pointНапример, монтирование сетевого диска Яндекса может выглядеть так:
# 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 #К сожалению, по умолчанию сертификаты не принимаются и требуют ручной установки. При желании вы можете самостоятельно разобраться, как научить davfs2 без ругани принимать предлагаемый сертификат. :)
После выполнения данной команды в точке /mnt будет примонтировано облачное хранилище Яндекс.Диск. Проверить это и посмотреть доступный объем свободного пространства можно командой df -h:
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Определение квоты доступного дискового пространства выполняется экспериментальным запросом USERINFO и, в случае сетевого диска Яндекса, работает корректно. (Да, здесь именно 260 ГБ.)
Для автоматизации процесса монтирования без ручного ввода логина и пароля необходимо заполнить файл /etc/davfs2/secrets, а для борьбы с ручным подтверждением сертификата можно использовать стандартную утилиту yes. Тогда монтирование диска может выглядеть следующим образом:
# yes | mount.davfs https://webdav.yandex.ru /mnt
Особенности работы с кэшем
При взгляде со стороны смонтированная облачная файловая система ничем не отличается от локальных разделов. Но на самом деле все операции с файлами проводятся над кэшем.
Например, при запросе на редактирование файла из облачного хранилища, сначала он скачивается в cache_dir, а лишь затем происходит его открытие из данного каталога. При завершении редактирования, файл сначала сохраняется в кэше и лишь затем оказывается загружен обратно в облачное хранилище. Другой пример: при копировании с подключенного к роутеру USB-диска файла в облачное хранилище, данный файл сначала копируется в каталог кэша (который часто находится на том же USB-диске!), и лишь затем загружается на удаленный сервер.
К сожалению, с этим ничего нельзя поделать – такова логика работы davfs2.
Если планируется передавать лишь небольшие файлы, то для кэша разумно использовать раздел /tmp, который представляет собой RAM-диск. В этом случае есть смысл ограничить размер кэша переменной cache_size в davfs2.conf, но следует иметь в виду, что данная переменная определяет лишь суммарный объем кэша, а при попытке записи или чтения одного крупного файла она будет игнорироваться.
В случае передачи крупных файлов остается либо размещать кэш на смонтированном на роутере USB-носителе и мириться с его постоянной перезаписью, либо для работы именно с большими файлами можно использовать отдельные WebDav-клиенты типа cadaver.
А для Backfire как это сделать?
Боюсь, что без настройки Openwrt Buildroot – никак.
Компиляция прошивки для Backfire ничем не отличается от сборки под trunk. Кроме того, собирать всю прошивку и перешивать роутер не потребуется – необходимо будет лишь собрать пакет davfs2, а все его зависимости можно доустановить из стандартного репозитория Backfire.